From 26a7079f56c926d8c14fc926d095f22c26b33548 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Mon, 29 Mar 2021 14:39:57 +0530 Subject: [PATCH 01/19] tests(build): fix fileExists check, remove chai, run in CI (#3408) - Fix fileExists check in `test-build.js` (`stats.fileExists()` is not a function) - Remove chai dependency, use jasmine's matchers - Cleanup `builds` dir after running `test:build` - Run `test:build` in CI --- .github/workflows/pr.yml | 7 +++--- package-lock.json | 53 ---------------------------------------- package.json | 1 - tests/test-build.js | 30 ++++++++++++++++------- 4 files changed, 24 insertions(+), 67 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index be33aac3c1..6c4a3600f2 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -46,10 +46,9 @@ jobs: with: path: ~/.npm key: ${{ runner.os }}-node-12-${{ hashFiles('**/package-lock.json') }} - - name: install & build - run: | - npm ci - npm run build:w3c + - run: npm ci + - run: npm run test:build + - run: npm run build:w3c - run: npm run test:headless test-karma: diff --git a/package-lock.json b/package-lock.json index 7a3bb8c413..30b245650e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -514,12 +514,6 @@ "es-abstract": "^1.17.0-next.1" } }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -762,20 +756,6 @@ "upper-case": "^1.1.1" } }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -787,12 +767,6 @@ "supports-color": "^5.3.0" } }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, "chokidar": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", @@ -1109,15 +1083,6 @@ "ms": "2.1.2" } }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, "deep-equal": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", @@ -1986,12 +1951,6 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -3130,12 +3089,6 @@ "pify": "^2.0.0" } }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -4247,12 +4200,6 @@ "prelude-ls": "^1.2.1" } }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", diff --git a/package.json b/package.json index e1773ec245..785d653d58 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "@types/marked": "^2.0.0", "@types/pluralize": "0.0.29", "boxen": "^5.0.0", - "chai": "^4.3.4", "chokidar": "^3.5.1", "clean-css": "^5.1.2", "epipebomb": "^1.0.0", diff --git a/tests/test-build.js b/tests/test-build.js index 673b3de59a..44387a99f3 100644 --- a/tests/test-build.js +++ b/tests/test-build.js @@ -1,18 +1,26 @@ /* eslint-env node */ -const { readFile, lstat } = require("fs").promises; +const { + constants: { F_OK }, + promises: { readFile, access }, +} = require("fs"); +const { execSync } = require("child_process"); const path = require("path"); -const expect = require("chai").expect; const { Builder } = require("../tools/builder"); async function fileExists(filePath) { - const stats = await lstat(filePath); - return stats.fileExists(); + try { + await access(filePath, F_OK); + return true; + } catch { + return false; + } } describe("builder (tool)", () => { jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000; const profiles = ["w3c", "geonovum"]; + const rootDir = path.join(__dirname, ".."); beforeAll(async () => { await Promise.all( @@ -20,16 +28,20 @@ describe("builder (tool)", () => { ); }); + afterAll(() => { + execSync("git restore builds", { cwd: rootDir }); + }); + for (const profile of profiles) { - const profileFile = path.join(__dirname, `../builds/respec-${profile}.js`); - const mapFile = path.join(__dirname, `../builds/respec-${profile}.js.map`); + const profileFile = path.join(rootDir, `builds/respec-${profile}.js`); + const mapFile = path.join(rootDir, `builds/respec-${profile}.js.map`); it(`builds the "${profile}" profile and sourcemap`, async () => { - expect(await fileExists(profileFile)).to.equal(true); - expect(await fileExists(mapFile)).to.equal(true); + await expectAsync(fileExists(profileFile)).toBeResolvedTo(true); + await expectAsync(fileExists(mapFile)).toBeResolvedTo(true); }); it(`includes sourcemap link for "${profile}"`, async () => { const source = await readFile(profileFile, "utf-8"); - expect(source.includes(`${profile}.js.map`)).to.equal(true); + expect(source).toContain(`${profile}.js.map`); }); } }); From a4e5709feccec43af6c8b2a900012f61dd10db8c Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Mon, 29 Mar 2021 15:00:38 +0530 Subject: [PATCH 02/19] refactor(tools/dev-server): add promisified KarmaServer (#3410) --- tools/dev-server.js | 91 +++++++++++++++++++++++++++++---------------- 1 file changed, 59 insertions(+), 32 deletions(-) diff --git a/tools/dev-server.js b/tools/dev-server.js index 724002a700..1082eb9dd0 100644 --- a/tools/dev-server.js +++ b/tools/dev-server.js @@ -13,34 +13,66 @@ const { Builder } = require("./builder"); const KARMA_PORT = 9876; const SERVE_PORT = 5000; +class KarmaServer { + /** + * @param {string} configFile + * @param {string} [browser] + */ + constructor(configFile, browser, grep = "") { + const browsers = browser ? [browser] : []; + this._karmaConfig = karma.config.parseConfig(configFile, { + browsers, + autoWatch: false, + port: KARMA_PORT, + logLevel: karma.constants.LOG_INFO, + client: { + args: ["--grep", grep], + }, + mochaReporter: { ignoreSkipped: true }, + }); + this._isActive = null; + } + + start() { + this.karmaServer = new karma.Server(this._karmaConfig); + this.karmaServer.start(); + return new Promise(resolve => + this.karmaServer.once("browsers_ready", resolve) + ); + } + + stop() { + return new Promise(resolve => + karma.stopper.stop(this._karmaConfig, resolve) + ); + } + + async run() { + if (this._isActive) return; + this._isActive = true; + karma.runner.run(this._karmaConfig, () => {}); + await new Promise(resolve => + this.karmaServer.once("run_complete", resolve) + ); + this._isActive = false; + } +} + sade("./tools/dev-server.js", true) .option("-p, --profile", "Name of profile to build.", "w3c") .option("-i, --interactive", "Run in interactive mode.", false) - .option( - "--browser", - 'Browser for Karma unit tests (e.g., "Chrome"). Multiple allowed.' - ) + .option("--browser", 'Browser for Karma unit tests (e.g., "Chrome").') .option("--grep", "Run specific tests using karma --grep") .action(opts => run(opts)) .parse(process.argv); -function run(args) { +async function run(args) { let isActive = false; - const karmaConfig = karma.config.parseConfig( + const karmaServer = new KarmaServer( path.join(__dirname, "../karma.conf.js"), - { - browsers: - typeof args.browser === "string" ? [args.browser] : args.browser, - autoWatch: false, - port: KARMA_PORT, - logLevel: karma.constants.LOG_WARN, - client: { - args: ["--grep", args.grep || ""], - }, - mochaReporter: { ignoreSkipped: true }, - } + args.browser, + args.grep ); - const karmaServer = new karma.Server(karmaConfig); const devServer = createServer((req, res) => serve(req, res, serveConfig)); devServer.on("error", onError); @@ -59,11 +91,9 @@ function run(args) { printWelcomeMessage(args); - karmaServer.start(); + await karmaServer.start(); devServer.listen(SERVE_PORT); - karmaServer.on("browsers_ready", () => - buildAndTest({ profile: args.profile }) - ); + await buildAndTest({ profile: args.profile }); function registerStdinHandler() { // https://stackoverflow.com/a/12506613 @@ -80,11 +110,9 @@ function run(args) { switch (key) { case "\u0003": // ctrl-c (end of text) - case "q": { - return karma.stopper.stop(karmaConfig, code => { - setTimeout(() => process.exit(code), 0); - }); - } + case "q": + await karmaServer.stop(); + return process.exit(0); case "t": return await buildAndTest(); case "T": @@ -105,7 +133,7 @@ function run(args) { if (!preventBuild) { await Builder.build({ name: args.profile, debug: true }); } - karma.runner.run(karmaConfig, () => {}); + await karmaServer.run(); } catch (err) { console.error(colors.error(err.stack)); } finally { @@ -113,11 +141,10 @@ function run(args) { } } - function onError(err) { + async function onError(err) { console.error(colors.error(err.stack)); - karma.stopper.stop(karmaConfig, () => { - process.exit(1); - }); + await karmaServer.stop(); + process.exit(1); } async function onFileChange(_event, file) { From d66c31e9ac1d34e618987645d29cec6ff015fcc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= Date: Mon, 29 Mar 2021 20:36:47 +1100 Subject: [PATCH 03/19] fix(w3c/headers): handle multiple patent policies (#3411) --- src/w3c/headers.js | 39 +++++++++++++++++----- tests/spec/core/simple.html | 3 ++ tests/spec/w3c/headers-spec.js | 61 ++++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 9 deletions(-) diff --git a/src/w3c/headers.js b/src/w3c/headers.js index 2b344cbd9b..fe00e93334 100644 --- a/src/w3c/headers.js +++ b/src/w3c/headers.js @@ -224,6 +224,8 @@ const licenses = new Map([ ], ]); +const patentPolicies = ["PP2017", "PP2020"]; + const baseLogo = Object.freeze({ id: "", alt: "", @@ -526,15 +528,8 @@ export function run(conf) { conf.dashDate = ISODate.format(conf.publishDate); conf.publishISODate = conf.publishDate.toISOString(); conf.shortISODate = ISODate.format(conf.publishDate); - if ( - conf.wgPatentPolicy && - !["PP2017", "PP2020"].includes(conf.wgPatentPolicy) - ) { - const msg = - "Invalid [`wgPatentPolicy`](https://respec.org/docs#wgPatentPolicy) value."; - const hint = 'Please use `"PP2017"` or `"PP2020"`.'; - showError(msg, name, { hint }); - } + validatePatentPolicies(conf); + if (conf.hasOwnProperty("wgPatentURI") && !Array.isArray(conf.wgPatentURI)) { Object.defineProperty(conf, "wgId", { get() { @@ -730,6 +725,32 @@ export function run(conf) { }); } +function validatePatentPolicies(conf) { + if (!conf.hasOwnProperty("wgPatentPolicy")) return; + + const policies = new Set([].concat(conf.wgPatentPolicy)); + if ( + policies.size && + ![...policies].every(policy => patentPolicies.includes(policy)) + ) { + const msg = `Invalid [\`wgPatentPolicy\`](https://respec.org/docs#wgPatentPolicy) value: "${conf.wgPatentPolicy}".`; + const hint = `Please use one of: ${patentPolicies + .map(p => `\`${p}\``) + .join(", ")} .`; + showError(msg, name, { hint }); + } + if (policies.size !== 1) { + const msg = + "When collaborating across multiple groups, they must use the same patent policy."; + const hint = `Please check the patent policies of each group. The patent policies were: ${[ + ...policies, + ].join(", ")}.`; + showError(msg, name, { hint }); + } + // We take the first policy + conf.wgPatentPolicy = [...policies][0]; +} + /** * @param {*} conf * @param {HTMLElement} sotd diff --git a/tests/spec/core/simple.html b/tests/spec/core/simple.html index d1eeb080de..078c5627b5 100644 --- a/tests/spec/core/simple.html +++ b/tests/spec/core/simple.html @@ -12,6 +12,8 @@ wgPublicList: "none", wgPatentURI: "https://XXX", edDraftURI: "https://darobin.github.com/respec", + wgPatentPolicy: "PP2020", + github: "w3c/respec", };
@@ -33,6 +35,7 @@

Some title

Test interface

+    [Exposed=Window]
     interface Test {
       undefined foo();
     };
diff --git a/tests/spec/w3c/headers-spec.js b/tests/spec/w3c/headers-spec.js
index 454ae6d49a..c23808feeb 100644
--- a/tests/spec/w3c/headers-spec.js
+++ b/tests/spec/w3c/headers-spec.js
@@ -1409,6 +1409,67 @@ describe("W3C — Headers", () => {
     });
   });
 
+  describe("wgPatentPolicy", () => {
+    it("supports wgPatentPolicy as string", async () => {
+      const ops = makeStandardOps({
+        wgPatentPolicy: "PP2020",
+      });
+      const doc = await makeRSDoc(ops, simpleSpecURL);
+      expect(doc.respec.errors).toHaveSize(0);
+      const patentPolicyLink = doc.querySelector(
+        "#sotd a[href='https://www.w3.org/Consortium/Patent-Policy/']"
+      );
+      expect(patentPolicyLink).toBeTruthy();
+    });
+
+    it("supports wgPatentPolicy as an array", async () => {
+      const ops = makeStandardOps({
+        wgPatentPolicy: ["PP2020", "PP2020"],
+      });
+      const doc = await makeRSDoc(ops, simpleSpecURL);
+      expect(doc.respec.errors).toHaveSize(0);
+      const patentPolicyLink = doc.querySelector(
+        "#sotd a[href='https://www.w3.org/Consortium/Patent-Policy/']"
+      );
+      expect(patentPolicyLink).toBeTruthy();
+    });
+
+    it("errors when the patent policy is invalid", async () => {
+      const ops = makeStandardOps({
+        wgPatentPolicy: "NOT A Patent Policy",
+      });
+      const doc = await makeRSDoc(ops, simpleSpecURL);
+      expect(doc.respec.errors).toHaveSize(1);
+      const [error] = doc.respec.errors;
+      expect(error.plugin).toBe("w3c/headers");
+      expect(error.message).toContain("Invalid [`wgPatentPolicy`]");
+    });
+
+    it("errors when patent policies don't match", async () => {
+      const ops = makeStandardOps({
+        wgPatentPolicy: ["PP2017", "PP2020"],
+      });
+      const doc = await makeRSDoc(ops, simpleSpecURL);
+      expect(doc.respec.errors).toHaveSize(1);
+      const [error] = doc.respec.errors;
+      expect(error.plugin).toBe("w3c/headers");
+      expect(error.message).toContain("must use the same patent policy");
+    });
+
+    it("errors when some patent policy is invalid", async () => {
+      const ops = makeStandardOps({
+        wgPatentPolicy: ["PP2020", "NOT A Patent Policy", "PP2017"],
+      });
+      const doc = await makeRSDoc(ops, simpleSpecURL);
+      expect(doc.respec.errors).toHaveSize(2);
+      const [error1, error2] = doc.respec.errors;
+      expect(error1.plugin).toBe("w3c/headers");
+      expect(error1.message).toContain("Invalid [`wgPatentPolicy`]");
+      expect(error2.plugin).toBe("w3c/headers");
+      expect(error2.message).toContain("must use the same patent policy");
+    });
+  });
+
   describe("wgId, data-deliverer, and isNote", () => {
     it("derives the wgId from wgPatentURI and adds data-deliverer", async () => {
       const ops = makeStandardOps();

From 0496fa97ff65b4b4fabaa67021c06e1f2f562e5f Mon Sep 17 00:00:00 2001
From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com>
Date: Mon, 29 Mar 2021 15:09:51 +0530
Subject: [PATCH 04/19] v26.4.1

---
 builds/respec-dini.js         | 311 +++++++++++++-----
 builds/respec-dini.js.map     |   2 +-
 builds/respec-geonovum.js     | 360 +++++++++++++--------
 builds/respec-geonovum.js.map |   2 +-
 builds/respec-highlight.js    |   1 +
 builds/respec-w3c.js          | 576 ++++++++++++++++++++++------------
 builds/respec-w3c.js.map      |   2 +-
 builds/respec-worker.js       |   1 -
 package-lock.json             |   2 +-
 package.json                  |   2 +-
 10 files changed, 847 insertions(+), 412 deletions(-)
 create mode 100644 builds/respec-highlight.js

diff --git a/builds/respec-dini.js b/builds/respec-dini.js
index 989d7bf9f6..330c999b8c 100644
--- a/builds/respec-dini.js
+++ b/builds/respec-dini.js
@@ -1,30 +1,140 @@
-window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return ft})),Promise.resolve().then((function(){return Ht})),Promise.resolve().then((function(){return Zt})),Promise.resolve().then((function(){return s})),Promise.resolve().then((function(){return qn})),Promise.resolve().then((function(){return Fn})),Promise.resolve().then((function(){return Un})),Promise.resolve().then((function(){return Vn})),Promise.resolve().then((function(){return Ct})),Promise.resolve().then((function(){return gt})),Promise.resolve().then((function(){return Gn})),Promise.resolve().then((function(){return dr})),Promise.resolve().then((function(){return hr})),Promise.resolve().then((function(){return mr})),Promise.resolve().then((function(){return wr})),Promise.resolve().then((function(){return Eo})),Promise.resolve().then((function(){return Lo})),Promise.resolve().then((function(){return No})),Promise.resolve().then((function(){return Ro})),Promise.resolve().then((function(){return Oo})),Promise.resolve().then((function(){return Bo})),Promise.resolve().then((function(){return Vo})),Promise.resolve().then((function(){return Go})),Promise.resolve().then((function(){return Ur})),Promise.resolve().then((function(){return mi})),Promise.resolve().then((function(){return si})),Promise.resolve().then((function(){return ro})),Promise.resolve().then((function(){return bi})),Promise.resolve().then((function(){return wi})),Promise.resolve().then((function(){return Ci})),Promise.resolve().then((function(){return Li})),Promise.resolve().then((function(){return Ti})),Promise.resolve().then((function(){return Mi})),Promise.resolve().then((function(){return Zi})),Promise.resolve().then((function(){return Vi})),Promise.resolve().then((function(){return Qi})),Promise.resolve().then((function(){return os})),Promise.resolve().then((function(){return us})),Promise.resolve().then((function(){return fs})),Promise.resolve().then((function(){return hs})),Promise.resolve().then((function(){return gs})),Promise.resolve().then((function(){return $s})),Promise.resolve().then((function(){return Ls})),Promise.resolve().then((function(){return pn}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},i=r.lang;var s=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:i,run:function(e){e.l10n=o[i]||o.en}});let a,c;const l=new WeakMap,u=new WeakMap,d=new WeakMap,f=new WeakMap,p=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(c||(c=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(l.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),r()},i=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",i)},o=()=>{t(b(e.result)),r()},i=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",i)});return t.then(t=>{t instanceof IDBCursor&&l.set(t,e)}).catch(()=>{}),p.set(t,e),t}(e);if(f.has(e))return f.get(e);const t=g(e);return t!==e&&(f.set(e,t),p.set(t,e)),t}const w=e=>p.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const i=async function(e,...t){const i=this.transaction(e,o?"readwrite":"readonly");let s=i.store;return r&&(s=s.index(t.shift())),(await Promise.all([s[n](...t),o&&i.done]))[0]};return k.set(t,i),i}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:i}={}){const s=indexedDB.open(e,t),a=b(s);return r&&s.addEventListener("upgradeneeded",e=>{r(b(s.result),e.oldVersion,e.newVersion,b(s.transaction))}),n&&s.addEventListener("blocked",()=>n()),a.then(e=>{i&&e.addEventListener("close",()=>i()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});var _,E=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(_={exports:{}},_.exports),_.exports);const S=/[&<>"']/,C=/[&<>"']/g,A=/[<>"']|&(?!#?\w+;)/,L=/[<>"']|&(?!#?\w+;)/g,T={"&":"&","<":"<",">":">",'"':""","'":"'"},z=e=>T[e];const N=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function R(e){return e.replace(N,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const j=/(^|[^\[])\^/g;const D=/[^\w:]/g,P=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const O={},I=/^[^:]+:\/*[^/]*$/,q=/^([^:]+:)[\s\S]*$/,M=/^([^:]+:\/*[^/]*)[\s\S]*$/;function F(e,t){O[" "+e]||(I.test(e)?O[" "+e]=e+"/":O[" "+e]=B(e,"/",!0));const n=-1===(e=O[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(q,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(M,"$1")+t:e+t}function B(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o(r=(r=r.source||r).replace(j,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(R(n)).replace(D,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!P.test(n)&&(n=F(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:F,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:U}=E,{rtrim:H,splitCells:Z,escape:V,findClosingBracket:Y}=W;function K(e,t,n){const r=t.href,o=t.title?V(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:i}:{type:"image",raw:n,href:r,title:o,text:V(i)}}var G=class{constructor(e){this.options=e||U}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:H(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=H(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:Z(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},i=t[0].match(this.rules.block.item);let s,a,c,l,u,d,f,p,h,m=!1,g=i.length;c=this.rules.block.listItemStart.exec(i[0]);for(let t=0;tc[1].length:l[1].length>=c[0].length||l[1].length>3){i.splice(t,2,i[t]+(!this.options.pedantic&&l[1].length/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=H(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=Y(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),K(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return K(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,i,s=n,a=0;const c="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=c.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(i=o.length,r[3]||r[4])s+=i;else if(!((r[5]||r[6])&&n%3)||(n+i)%3){if(s-=i,!(s>0)){if(s+a-i<=0&&!t.slice(c.lastIndex).match(c)&&(i=Math.min(i,i+s+a)),Math.min(n,i)%2)return{type:"em",raw:e.slice(0,n+r.index+i+1),text:e.slice(1,n+r.index+i)};if(Math.min(n,i)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+i+1),text:e.slice(2,n+r.index+i-1)}}}else a+=i}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=V(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=V(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=V(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=V(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=V(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]:V(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:J,edit:X,merge:Q}=W,ee={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:J,table:J,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ee.def=X(ee.def).replace("label",ee._label).replace("title",ee._title).getRegex(),ee.bullet=/(?:[*+-]|\d{1,9}[.)])/,ee.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ee.item=X(ee.item,"gm").replace(/bull/g,ee.bullet).getRegex(),ee.listItemStart=X(/^( *)(bull) */).replace("bull",ee.bullet).getRegex(),ee.list=X(ee.list).replace(/bull/g,ee.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ee.def.source+")").getRegex(),ee._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee._comment=/|$)/,ee.html=X(ee.html,"i").replace("comment",ee._comment).replace("tag",ee._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ee.paragraph=X(ee._paragraph).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.blockquote=X(ee.blockquote).replace("paragraph",ee.paragraph).getRegex(),ee.normal=Q({},ee),ee.gfm=Q({},ee.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ee.gfm.nptable=X(ee.gfm.nptable).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.gfm.table=X(ee.gfm.table).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.pedantic=Q({},ee.normal,{html:X("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ee._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:J,paragraph:X(ee.normal._paragraph).replace("hr",ee.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ee.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const te={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:J,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:J,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~"};te.punctuation=X(te.punctuation).replace(/punctuation/g,te._punctuation).getRegex(),te.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,te.escapedEmSt=/\\\*|\\_/g,te._comment=X(ee._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),te.emStrong.lDelim=X(te.emStrong.lDelim).replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimAst=X(te.emStrong.rDelimAst,"g").replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimUnd=X(te.emStrong.rDelimUnd,"g").replace(/punct/g,te._punctuation).getRegex(),te._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,te._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,te._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,te.autolink=X(te.autolink).replace("scheme",te._scheme).replace("email",te._email).getRegex(),te._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,te.tag=X(te.tag).replace("comment",te._comment).replace("attribute",te._attribute).getRegex(),te._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,te._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,te._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,te.link=X(te.link).replace("label",te._label).replace("href",te._href).replace("title",te._title).getRegex(),te.reflink=X(te.reflink).replace("label",te._label).getRegex(),te.reflinkSearch=X(te.reflinkSearch,"g").replace("reflink",te.reflink).replace("nolink",te.nolink).getRegex(),te.normal=Q({},te),te.pedantic=Q({},te.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:X(/^!?\[(label)\]\((.*?)\)/).replace("label",te._label).getRegex(),reflink:X(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",te._label).getRegex()}),te.gfm=Q({},te.normal,{escape:X(te.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var le=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||re,this.options.tokenizer=this.options.tokenizer||new G,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:oe.normal,inline:ie.normal};this.options.pedantic?(t.block=oe.pedantic,t.inline=ie.pedantic):this.options.gfm&&(t.block=oe.gfm,this.options.breaks?t.inline=ie.breaks:t.inline=ie.gfm),this.tokenizer.rules=t}static get rules(){return{block:oe,inline:ie}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g,"    "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,i,s;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"paragraph"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),i=r.items.length,o=0;o0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(l));)e.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(l=l.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(l));)l=l.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(l));)l=l.slice(0,s.index)+"++"+l.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(c=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const i=t[t.length-1];i&&"text"===o.type&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,l,c))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,ce))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,ce))){if(o=this.tokenizer.inlineText(e,r,ae))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(c=o.raw.slice(-1)),a=!0,i=t[t.length-1],i&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:ue}=E,{cleanUrl:de,escape:fe}=W;var pe=class{constructor(e){this.options=e||ue}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'
'+(n?e:fe(e,!0))+"
\n":"
"+(n?e:fe(e,!0))+"
\n"}blockquote(e){return"
\n"+e+"
\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"'+e+"\n":""+e+"\n"}hr(){return this.options.xhtml?"
\n":"
\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"}listitem(e){return"
  • "+e+"
  • \n"}checkbox(e){return" "}paragraph(e){return"

    "+e+"

    \n"}table(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"}tablerow(e){return"\n"+e+"\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"}strong(e){return""+e+""}em(e){return""+e+""}codespan(e){return""+e+""}br(){return this.options.xhtml?"
    ":"
    "}del(e){return""+e+""}link(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='",r}image(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r=''+n+'":">",r}text(e){return e}},he=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},me=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:ge}=E,{unescape:be}=W;var we=class e{constructor(e){this.options=e||ge,this.options.renderer=this.options.renderer||new pe,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new he,this.slugger=new me}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,i,s,a,c,l,u,d,f,p,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,f,p);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1{r(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),s--,0===s&&i()}))},0))})),void(0===s&&i())}try{const n=le.lex(e,t);return t.walkTokens&&Ee.walkTokens(n,t.walkTokens),we.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"

    An error occurred:

    "+ke(e.message+"",!0)+"
    ";throw e}}Ee.options=Ee.setOptions=function(e){return ye(Ee.defaults,e),$e(Ee.defaults),Ee},Ee.getDefaults=xe,Ee.defaults=_e,Ee.use=function(e){const t=ye({},e);if(e.renderer){const n=Ee.defaults.renderer||new pe;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let i=e.renderer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.renderer=n}if(e.tokenizer){const n=Ee.defaults.tokenizer||new G;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let i=e.tokenizer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.tokenizer=n}if(e.walkTokens){const n=Ee.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Ee.setOptions(t)},Ee.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Ee.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Ee.walkTokens(n,t);break;case"list":Ee.walkTokens(n.items,t);break;default:n.tokens&&Ee.walkTokens(n.tokens,t)}},Ee.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=ye({},Ee.defaults,t||{}),ve(t);try{const n=le.lexInline(e,t);return t.walkTokens&&Ee.walkTokens(n,t.walkTokens),we.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"

    An error occurred:

    "+ke(e.message+"",!0)+"
    ";throw e}},Ee.Parser=we,Ee.parser=we.parse,Ee.Renderer=pe,Ee.TextRenderer=he,Ee.Lexer=le,Ee.lexer=le.lex,Ee.Tokenizer=G,Ee.Slugger=me,Ee.parse=Ee;var Se=Ee;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ce=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function i(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function s(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function c(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return s(""===n?e[r-1]:n,o)}))}function l(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var i=r[o];if(i[0].test(t))return c(t,i)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?s(r,o):e.hasOwnProperty(o)?s(r,e[o]):l(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&l(o,o,n)===o}}function f(e,t,n){return(n?t+" ":"")+(1===t?f.singular(e):f.plural(e))}return f.plural=u(o,r,e),f.isPlural=d(o,r,e),f.singular=u(r,o,t),f.isSingular=d(r,o,t),f.addPluralRule=function(t,n){e.push([i(t),n])},f.addSingularRule=function(e,n){t.push([i(e),n])},f.addUncountableRule=function(e){"string"!=typeof e?(f.addPluralRule(e,"$0"),f.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},f.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return f.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return f.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return f.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(f.addUncountableRule),f}))})),Ae=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=i.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},i;function i(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(s,this)}function s(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,i){for(var s=("selectedIndex"in t),a=s;r>>0;ns;)--c;l=a+r-c;var w=Array(l),y=u[c];for(--n;y;){for(var v=y.newi,k=y.oldi;v"+e+"",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=I(S),n=I("div");return n.innerHTML=''+e+"",O(t,n.firstChild.childNodes),t}:A)(e)});function O(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function I(e){return e===S?E.createDocumentFragment():E.createElementNS("http://www.w3.org/1999/xhtml",e)}var q,M,F,B,W,U,H,Z,V,Y=(M="appendChild",F="cloneNode",B="createTextNode",U=(W="importNode")in(q=e),(H=q.createDocumentFragment())[M](q[B]("g")),H[M](q[B]("")),(U?q[W](H,!0):H[F](!0)).childNodes.length<2?function e(t,n){for(var r=t[F](),o=t.childNodes||[],i=o.length,s=0;n&&s

    ',Z.content.childNodes[0].getAttribute(V)==G)||(G="_dt: "+G.slice(1,-1)+";",J=!0)}catch(u){}var X="\x3c!--"+G+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",ie="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",se=new RegExp(oe+re+ie+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+ie+"*)(["+te+"]*/>)","g"),ce=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+X+"\\2","gi");function le(e,t,n,r){return"<"+t+n.replace(ce,ue)+r}function ue(e,t,n){return t+(n||'"')+G+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+">"}var fe=J?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function pe(t,n,r,o){for(var i=t.childNodes,s=i.length,a=0;a{e.remove()})}function Oe(e=[],t=(e=>e),n=i){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(Re.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=Re.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function Ie(e){return e.trim().replace(/\s+/g," ")}function qe(e,t=i){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function Me(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){nt(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}function Fe(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Te`${e}, `);return Te`${r}${n[n.length-1]}`}function Be(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function We(e){const t=new Set,n="ltNodefault"in e.dataset?"":Ie(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>Ie(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(Ie(e)))}return[...t]}function Ue(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function He(e,t){const n=t.closest(".informative, .note, .issue, .example, .ednote, .practice, .introductory");let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function Ze(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function Ve(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function Ye(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class Ke extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function Ge(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>Ue(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),Je(t),t}function Je(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...Xe(t)])e.remove()}function*Xe(e){for(;e.nextNode();)yield e.currentNode}class Qe extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class et extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||Be(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:i,title:s,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:i,title:s,details:a,stack:n}}}function tt(e,t,n={}){const r={...n,isWarning:!1};it("error",new et(e,t,r))}function nt(e,t,n={}){const r={...n,isWarning:!0};it("warn",new et(e,t,r))}const rt="core/pubsubhub",ot=new Map;function it(e,...t){if(!ot.has(e))return;if(Array.from(ot.get(e)).forEach(e=>{try{e(...t)}catch(t){tt(`Error when calling function ${e.name}.`,rt,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function st(e,t,n={once:!1}){return n.once?st(e,(function n(...r){!function({topic:e,cb:t}){const n=ot.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(ot.has(e)?ot.get(e).add(t):ot.set(e,new Set([t])),{topic:e,cb:t})}n(rt,{sub:st});const at=["githubToken","githubUser"];class ct{constructor(){this._respecDonePromise=new Promise(e=>{st("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],st("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),st("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}}const lt="core/post-process";const ut="core/pre-process";const dt="core/base-runner";var ft=Object.freeze({__proto__:null,name:dt,runAll:async function(e){!function(){const e=new ct;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(nt("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),it("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),st("amend-user-config",n),st("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of at)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),it("amend-user-config",r)}(respecConfig),performance.mark(dt+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||tt("Every item in `preProcess` must be a JS function.",ut),t}).map(async t=>{try{return await t(e,document)}catch(e){tt(`Function ${t.name} threw an error during \`preProcess\`.`,ut,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const i=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(i),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},it("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||tt("Every item in `postProcess` must be a JS function.",lt),t}).map(async t=>{try{return await t(e,document)}catch(e){tt(`Function ${t.name} threw an error during \`postProcess\`.`,lt,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),it("end-all"),Pe(document),performance.mark(dt+"-end"),performance.measure(dt,dt+"-start",dt+"-end")}});async function pt(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-dini.js",document.baseURI).href));return await t.text()}async function ht(e){return pt("assets/"+e)}function mt(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var gt=Object.freeze({__proto__:null,name:"core/reindent",reindent:mt,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=mt(e.innerHTML)}});const bt=/>/gm,wt=/&/gm;class yt extends ze.Renderer{code(e,t,n){const{language:r,...o}=yt.parseInfoString(t);if(/(^webidl$)/i.test(r))return`
    ${e}
    `;const i=super.code(e,r,n),{example:s,illegalExample:a}=o;if(!s&&!a)return i;const c=s||a,l=`${r} ${s?"example":"illegal-example"}`;return i.replace("
    ",`
    `)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`${n}`}return super.heading(e,t,n,r)}}function vt(e){const t=mt(e).replace(bt,">").replace(wt,"&");return ze(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new yt})}function kt(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=vt(e.innerHTML)}class xt{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function $t(e,t){return function e(n){const r=new xt(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function _t(e){const t=$t(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const Et=(St="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll(St);return t.forEach(kt),Array.from(t)});var St;var Ct=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:vt,restructure:_t,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of Et(document.body))_t(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=Ye(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),kt(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const i=$t(o,document);o.append(r,i),document.body.replaceWith(o)}});function At(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!async function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Ts}))).default}catch{return ht("ui.css")}}(),e.classList.add("removeOnSave"),document.head.appendChild(e)}();const Lt=Te``,Tt=Te``,Tt=Te``;let Nt,Rt;window.addEventListener("load",()=>qt(Tt));const jt=[],Dt=[],Pt={};st("start-all",()=>document.body.prepend(Lt),{once:!0}),st("end-all",()=>document.body.prepend(Lt),{once:!0});const Ot=Te``;function It(){Tt.classList.toggle("respec-hidden"),Tt.classList.toggle("respec-visible"),Tt.hidden=!Tt.hidden}function qt(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}Lt.appendChild(Ot),Ot.addEventListener("click",e=>{e.stopPropagation(),Ot.setAttribute("aria-expanded",String(Tt.hidden)),It(),Tt.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{Tt.hidden||It()}),Lt.appendChild(Tt),Tt.addEventListener("keydown",e=>{"Escape"!==e.key||Tt.hidden||(Ot.setAttribute("aria-expanded",String(Tt.hidden)),It(),Ot.focus())});const Mt=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function Ft(e,t,n,r){t.push(e),Pt.hasOwnProperty(n)||(Pt[n]=function(e,t,n){const r=Te``;function Ot(){Lt.classList.toggle("respec-hidden"),Lt.classList.toggle("respec-visible"),Lt.hidden=!Lt.hidden}function It(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}At.appendChild(Pt),Pt.addEventListener("click",e=>{e.stopPropagation(),Pt.setAttribute("aria-expanded",String(Lt.hidden)),Ot(),Lt.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{Lt.hidden||Ot()}),At.appendChild(Lt),Lt.addEventListener("keydown",e=>{"Escape"!==e.key||Lt.hidden||(Pt.setAttribute("aria-expanded",String(Lt.hidden)),Ot(),Pt.focus())});const qt=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function Mt(e,t,n,r){t.push(e),jt.hasOwnProperty(n)||(jt[n]=function(e,t,n){const r=Te``;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Te`
      `;for(const e of t){const t=document.createRange().createContextualFragment(Wt(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}Bt.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return At(r,o),r}(n,t,r),Lt.appendChild(Pt[n]));const o=Pt[n];o.textContent=t.length;const i=1===t.length?Ne.singular(r):r;At(o,new Map([["label",`${t.length} ${i}`]]))}At(Ot,Mt);const Bt={show(){try{Lt.hidden=!1}catch(e){console.error(e)}},hide(){Lt.hidden=!0},enable(){Ot.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),i=Te``;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Te`
        `;for(const e of t){const t=document.createRange().createContextualFragment(Bt(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}Ft.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return Ct(r,o),r}(n,t,r),At.appendChild(jt[n]));const o=jt[n];o.textContent=t.length;const i=1===t.length?Re.singular(r):r;Ct(o,new Map([["label",`${t.length} ${i}`]]))}Ct(Pt,qt);const Ft={show(){try{At.hidden=!1}catch(e){console.error(e)}},hide(){At.hidden=!0},enable(){Pt.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),i=Te``,s=Te`
      1. ${i}
      2. `;return s.addEventListener("click",t),Tt.appendChild(s),i},error(e){Ft(e,jt,"error","ReSpec Errors")},warning(e){Ft(e,Dt,"warning","ReSpec Warnings")},closeModal(e){Rt&&(Rt.classList.remove("respec-show-overlay"),Rt.classList.add("respec-hide-overlay"),Rt.addEventListener("transitionend",()=>{Rt.remove(),Rt=null})),e&&e.setAttribute("aria-expanded","false"),Nt&&(Nt.remove(),Nt=null,Ot.focus())},freshModal(e,t,n){Nt&&Nt.remove(),Rt&&Rt.remove(),Rt=Te`
        `;const r=n.id+"-modal",o=r+"-heading";Nt=Te`
        `,s=Te`
      3. ${i}
      4. `;return s.addEventListener("click",t),Lt.appendChild(s),i},error(e){Mt(e,zt,"error","ReSpec Errors")},warning(e){Mt(e,Dt,"warning","ReSpec Warnings")},closeModal(e){Rt&&(Rt.classList.remove("respec-show-overlay"),Rt.classList.add("respec-hide-overlay"),Rt.addEventListener("transitionend",()=>{Rt.remove(),Rt=null})),e&&e.setAttribute("aria-expanded","false"),Nt&&(Nt.remove(),Nt=null,Pt.focus())},freshModal(e,t,n){Nt&&Nt.remove(),Rt&&Rt.remove(),Rt=Te`
        `;const r=n.id+"-modal",o=r+"-heading";Nt=Te``;const i=new Map([["labelledby",o]]);At(Nt,i),document.body.append(Rt,Nt),Rt.addEventListener("click",()=>this.closeModal(n)),Rt.classList.toggle("respec-show-overlay"),Nt.hidden=!1,qt(Nt)}};function Wt(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${Oe(e.elements.map(Ut))}.`:"",o=e.details?`\n\n
        \n${e.details}\n
        \n`:"";return vt(`${t}${e.message}${n}${r}${o}`)}function Ut(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&Bt.closeModal()}),window.respecUI=Bt,st("error",e=>Bt.error(e)),st("warn",e=>Bt.warning(e));var Ht=Object.freeze({__proto__:null,name:"core/ui",ui:Bt});var Zt=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const Vt=new WeakMap;class Yt{constructor(e,t){Vt.set(this,{name:e,lintingFunction:t})}get name(){return Vt.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return Vt.get(this).lintingFunction(e,t)}}const Kt="check-charset",Gt={en:{description:"Document must only contain one `` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `` section - `` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `` 标签",howToFix:'将此行添加到文档的 `` 部分—— `` 或将 charset 设置为 utf-8(如果尚未设置)。'}},Jt=i in Gt?i:"en";const Xt=new Yt(Kt,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:Kt,occurrences:n.length,...Gt[Jt]}})),Qt="check-internal-slots",en={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},tn=i in en?i:"en";const nn=new Yt(Qt,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:Qt,offendingElements:n,occurrences:n.length,...en[tn]}})),rn="check-punctuation",on=[".",":","!","?"],sn={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${on.map(e=>`"${e}"`).join(", ")}.`}},an=i in sn?i:"en";const cn=new Yt(rn,(function(e,t){const n=new RegExp(`[${on.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:rn,offendingElements:r,occurrences:r.length,...sn[an]}})),ln="core/linter",un=new WeakMap;const dn=new class{constructor(){un.set(this,{rules:new Set})}get rules(){return un.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...un.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...fn,...t},{description:r,help:o,howToFix:i,name:s,occurrences:a,offendingElements:c}=n,l=c.length?r:`${r} (Count: ${a})`;nt(l,`${ln}/${s}`,{hint:`${i} ${o}`,elements:c})}(n.lint(e,t)));await n}},fn={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var pn=Object.freeze({__proto__:null,name:ln,default:dn,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await dn.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const hn="local-refs-exist",mn={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},gn=i in mn?i:"en";const bn=new Yt(hn,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(wn);if(n.length)return{name:hn,offendingElements:n,occurrences:n.length,...mn[gn]}}));function wn(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const yn="no-headingless-sections",vn={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `
        `.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `
        `.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `
        `。"}},kn=i in vn?i:"en",xn=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const $n=new Yt(yn,(function(e,t){const n=[...t.querySelectorAll("section")].filter(xn);if(n.length)return{name:yn,offendingElements:n,occurrences:n.length,...vn[kn]}})),_n="no-http-props",En={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},Sn=i in En?i:"en";const Cn=new Yt(_n,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:_n,occurrences:n.length,...En[Sn]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),An="no-unused-vars",Ln={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the ``.",help:"See developer console."}},Tn=i in Ln?i:"en";const zn=new Yt(An,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=Ie(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:An,offendingElements:n,occurrences:n.length,...Ln[Tn]}})),Nn="privsec-section",Rn={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},jn=i in Rn?i:"en";const Dn=new Yt(Nn,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Nn,occurrences:1,...Rn[jn]}}));dn.register(Cn,$n,zn,cn,bn,nn,Xt,Dn);const Pn={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0};dn.register(Dn);const On=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}],["cc-by-sa",{name:"Creative Commons Attribution-ShareAlike 4.0 International Public License",short:"CC-BY-SA",url:"https://creativecommons.org/licenses/by-sa/4.0/legalcode"}]]),In={format:"markdown",isED:!1,isNoTrack:!0,isPR:!1,lint:{"privsec-section":!0,"wpt-tests-exist":!1},logos:[],prependW3C:!1,doJsonLd:!1,license:"cc-by",shortName:"X",showPreviousVersion:!1};var qn=Object.freeze({__proto__:null,name:"dini/defaults",run:function(e){const t=!1!==e.lint&&{...Pn.lint,...In.lint,...e.lint};Object.assign(e,{...Pn,...In,...e,lint:t}),Object.assign(e,function(e){return{licenseInfo:On.get(e.license)}}(e))}});const Mn=async function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=await async function(){try{return(await Promise.resolve().then((function(){return zs}))).default}catch{return ht("respec.css")}}(),document.head.appendChild(e),e}();var Fn=Object.freeze({__proto__:null,name:"core/style",run:async function(e){e.noReSpecCSS&&(await Mn).remove()}});const Bn="dini/style";const Wn=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/base.css",as:"style"}],t=document.createDocumentFragment();for(const n of e.map(De))t.appendChild(n);return t}();Wn.appendChild(function(){const e=document.createElement("link");return e.rel="stylesheet",e.href="https://www.w3.org/StyleSheets/TR/2016/base.css",e.classList.add("removeOnSave"),e}()),document.head.querySelector("meta[name=viewport]")||Wn.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(Wn);var Un=Object.freeze({__proto__:null,name:Bn,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'base'.";e.specStatus="base",nt(t,Bn)}let t="";switch(e.specStatus.toUpperCase()){case"UNOFFICIAL":t="W3C-UD";break;case"BASE":t="base.css"}e.noToc||st("end-all",()=>{!function(e,t){const n=e.createElement("script");location.hash&&n.addEventListener("load",()=>{window.location.href=location.hash},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,"2016")},{once:!0});const n="https://www.w3.org/StyleSheets/TR/2016/"+t;var r;!function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,n),st("beforesave",(r=n,e=>{const t=e.querySelector(`head link[href="${r}"]`);e.querySelector("head").append(t)}))}});const Hn="core/data-include";function Zn(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=Me(e,r.dataset.oninclude,n),i="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=vt(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&_t(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:i}),i||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var Vn=Object.freeze({__proto__:null,name:Hn,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);Zn(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),tt(r,Hn,{elements:[e]})}});await Promise.all(t)}});const Yn="core/title",Kn=qe({en:{default_title:"No Title"},de:{default_title:"Kein Titel"},zh:{default_title:"无标题"}});var Gn=Object.freeze({__proto__:null,name:Yn,run:function(e){const t=document.querySelector("h1#title")||Te`

        `;if(t.isConnected&&""===t.textContent.trim()){tt('The document is missing a title, so using a default title. To fix this, please give your document a ``. If you need special markup in the document\'s title, please use a `<h1 id="title">`.',Yn,{title:"Document is missing a title",elements:[t]})}t.id||(t.id="title"),t.classList.add("title"),function(e,t){t.isConnected||(t.textContent=document.title||""+Kn.default_title);let n=Ie(t.textContent);if(e.isPreview&&e.prNumber){const r=e.prUrl||`${e.github.repoURL}pull/${e.prNumber}`,{childNodes:o}=Te` + </div>`;const i=new Map([["labelledby",o]]);Ct(Nt,i),document.body.append(Rt,Nt),Rt.addEventListener("click",()=>this.closeModal(n)),Rt.classList.toggle("respec-show-overlay"),Nt.hidden=!1,It(Nt)}};function Bt(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${Oe(e.elements.map(Wt))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return yt(`${t}${e.message}${n}${r}${o}`)}function Wt(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&Ft.closeModal()}),window.respecUI=Ft,st("error",e=>Ft.error(e)),st("warn",e=>Ft.warning(e));var Ut=Object.freeze({__proto__:null,name:"core/ui",ui:Ft});var Ht=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const Zt=new WeakMap;class Vt{constructor(e,t){Zt.set(this,{name:e,lintingFunction:t})}get name(){return Zt.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return Zt.get(this).lintingFunction(e,t)}}const Yt="check-charset",Kt={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},Gt=i in Kt?i:"en";const Jt=new Vt(Yt,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:Yt,occurrences:n.length,...Kt[Gt]}})),Xt="check-internal-slots",Qt={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},en=i in Qt?i:"en";const tn=new Vt(Xt,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:Xt,offendingElements:n,occurrences:n.length,...Qt[en]}})),nn="check-punctuation",rn=[".",":","!","?"],on={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${rn.map(e=>`"${e}"`).join(", ")}.`}},sn=i in on?i:"en";const an=new Vt(nn,(function(e,t){const n=new RegExp(`[${rn.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:nn,offendingElements:r,occurrences:r.length,...on[sn]}})),ln="core/linter",cn=new WeakMap;const un=new class{constructor(){cn.set(this,{rules:new Set})}get rules(){return cn.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...cn.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...dn,...t},{description:r,help:o,howToFix:i,name:s,occurrences:a,offendingElements:l}=n,c=l.length?r:`${r} (Count: ${a})`;nt(c,`${ln}/${s}`,{hint:`${i} ${o}`,elements:l})}(n.lint(e,t)));await n}},dn={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var fn=Object.freeze({__proto__:null,name:ln,default:un,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await un.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const pn="local-refs-exist",hn={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},mn=i in hn?i:"en";const gn=new Vt(pn,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(bn);if(n.length)return{name:pn,offendingElements:n,occurrences:n.length,...hn[mn]}}));function bn(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const wn="no-headingless-sections",yn={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},vn=i in yn?i:"en",kn=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const xn=new Vt(wn,(function(e,t){const n=[...t.querySelectorAll("section")].filter(kn);if(n.length)return{name:wn,offendingElements:n,occurrences:n.length,...yn[vn]}})),$n="no-http-props",_n={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},Sn=i in _n?i:"en";const En=new Vt($n,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:$n,occurrences:n.length,..._n[Sn]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),Cn="no-unused-vars",An={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Ln=i in An?i:"en";const Tn=new Vt(Cn,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=Ie(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:Cn,offendingElements:n,occurrences:n.length,...An[Ln]}})),Nn="privsec-section",Rn={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},zn=i in Rn?i:"en";const Dn=new Vt(Nn,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Nn,occurrences:1,...Rn[zn]}}));un.register(En,xn,Tn,an,gn,tn,Jt,Dn);const jn={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0};un.register(Dn);const Pn=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}],["cc-by-sa",{name:"Creative Commons Attribution-ShareAlike 4.0 International Public License",short:"CC-BY-SA",url:"https://creativecommons.org/licenses/by-sa/4.0/legalcode"}]]),On={format:"markdown",isED:!1,isNoTrack:!0,isPR:!1,lint:{"privsec-section":!0,"wpt-tests-exist":!1},logos:[],prependW3C:!1,doJsonLd:!1,license:"cc-by",shortName:"X",showPreviousVersion:!1};var In=Object.freeze({__proto__:null,name:"dini/defaults",run:function(e){const t=!1!==e.lint&&{...jn.lint,...On.lint,...e.lint};Object.assign(e,{...jn,...On,...e,lint:t}),Object.assign(e,function(e){return{licenseInfo:Pn.get(e.license)}}(e))}});var qn=String.raw`@keyframes pop{ +0%{transform:scale(1,1)} +25%{transform:scale(1.25,1.25);opacity:.75} +100%{transform:scale(1,1)} +} +.hljs{background:0 0!important} +a abbr,h1 abbr,h2 abbr,h3 abbr,h4 abbr,h5 abbr,h6 abbr{border:none} +dfn{font-weight:700} +a.internalDFN{color:inherit;border-bottom:1px solid #99c;text-decoration:none} +a.externalDFN{color:inherit;border-bottom:1px dotted #ccc;text-decoration:none} +a.bibref{text-decoration:none} +.respec-offending-element:target{animation:pop .25s ease-in-out 0s 1} +.respec-offending-element,a[href].respec-offending-element{text-decoration:red wavy underline} +@supports not (text-decoration:red wavy underline){ +.respec-offending-element:not(pre){display:inline-block} +.respec-offending-element{background:url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=) bottom repeat-x} +} +#references :target{background:#eaf3ff;animation:pop .4s ease-in-out 0s 1} +cite .bibref{font-style:normal} +code{color:#c63501} +th code{color:inherit} +a[href].orcid{padding-left:4px;padding-right:4px} +a[href].orcid>svg{margin-bottom:-2px} +.toc a,.tof a{text-decoration:none} +a .figno,a .secno{color:#000} +ol.tof,ul.tof{list-style:none outside none} +.caption{margin-top:.5em;font-style:italic} +table.simple{border-spacing:0;border-collapse:collapse;border-bottom:3px solid #005a9c} +.simple th{background:#005a9c;color:#fff;padding:3px 5px;text-align:left} +.simple th a{color:#fff;padding:3px 5px;text-align:left} +.simple th[scope=row]{background:inherit;color:inherit;border-top:1px solid #ddd} +.simple td{padding:3px 10px;border-top:1px solid #ddd} +.simple tr:nth-child(even){background:#f0f6ff} +.section dd>p:first-child{margin-top:0} +.section dd>p:last-child{margin-bottom:0} +.section dd{margin-bottom:1em} +.section dl.attrs dd,.section dl.eldef dd{margin-bottom:0} +#issue-summary>ul{column-count:2} +#issue-summary li{list-style:none;display:inline-block} +details.respec-tests-details{margin-left:1em;display:inline-block;vertical-align:top} +details.respec-tests-details>*{padding-right:2em} +details.respec-tests-details[open]{z-index:999999;position:absolute;border:thin solid #cad3e2;border-radius:.3em;background-color:#fff;padding-bottom:.5em} +details.respec-tests-details[open]>summary{border-bottom:thin solid #cad3e2;padding-left:1em;margin-bottom:1em;line-height:2em} +details.respec-tests-details>ul{width:100%;margin-top:-.3em} +details.respec-tests-details>li{padding-left:1em} +a[href].self-link:hover{opacity:1;text-decoration:none;background-color:transparent} +h2,h3,h4,h5,h6{position:relative} +aside.example .marker>a.self-link{color:inherit} +h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{border:none;color:inherit;font-size:83%;height:2em;left:-1.6em;opacity:.5;position:absolute;text-align:center;text-decoration:none;top:0;transition:opacity .2s;width:2em} +h2>a.self-link::before,h3>a.self-link::before,h4>a.self-link::before,h5>a.self-link::before,h6>a.self-link::before{content:"§";display:block} +@media (max-width:767px){ +dd{margin-left:0} +h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left:auto;top:auto} +} +@media print{ +.removeOnSave{display:none} +}`;const Mn=function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=qn,document.head.appendChild(e),e}();var Fn=Object.freeze({__proto__:null,name:"core/style",run:function(e){e.noReSpecCSS&&Mn.remove()}});const Bn="dini/style";const Wn=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/base.css",as:"style"}],t=document.createDocumentFragment();for(const n of e.map(je))t.appendChild(n);return t}();Wn.appendChild(function(){const e=document.createElement("link");return e.rel="stylesheet",e.href="https://www.w3.org/StyleSheets/TR/2016/base.css",e.classList.add("removeOnSave"),e}()),document.head.querySelector("meta[name=viewport]")||Wn.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(Wn);var Un=Object.freeze({__proto__:null,name:Bn,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'base'.";e.specStatus="base",nt(t,Bn)}let t="";switch(e.specStatus.toUpperCase()){case"UNOFFICIAL":t="W3C-UD";break;case"BASE":t="base.css"}e.noToc||st("end-all",()=>{!function(e,t){const n=e.createElement("script");location.hash&&n.addEventListener("load",()=>{window.location.href=location.hash},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,"2016")},{once:!0});const n="https://www.w3.org/StyleSheets/TR/2016/"+t;var r;!function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,n),st("beforesave",(r=n,e=>{const t=e.querySelector(`head link[href="${r}"]`);e.querySelector("head").append(t)}))}});const Hn="core/data-include";function Zn(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=Me(e,r.dataset.oninclude,n),i="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=yt(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&$t(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:i}),i||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var Vn=Object.freeze({__proto__:null,name:Hn,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);Zn(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),tt(r,Hn,{elements:[e]})}});await Promise.all(t)}});const Yn="core/title",Kn=qe({en:{default_title:"No Title"},de:{default_title:"Kein Titel"},zh:{default_title:"无标题"}});var Gn=Object.freeze({__proto__:null,name:Yn,run:function(e){const t=document.querySelector("h1#title")||Te`<h1 id="title"></h1>`;if(t.isConnected&&""===t.textContent.trim()){tt('The document is missing a title, so using a default title. To fix this, please give your document a `<title>`. If you need special markup in the document\'s title, please use a `<h1 id="title">`.',Yn,{title:"Document is missing a title",elements:[t]})}t.id||(t.id="title"),t.classList.add("title"),function(e,t){t.isConnected||(t.textContent=document.title||""+Kn.default_title);let n=Ie(t.textContent);if(e.isPreview&&e.prNumber){const r=e.prUrl||`${e.github.repoURL}pull/${e.prNumber}`,{childNodes:o}=Te` Preview of PR <a href="${r}">#${e.prNumber}</a>: `;t.prepend(...o),n=`Preview of PR #${e.prNumber}: ${n}`}document.title=n,e.title=n}(e,t),document.body.prepend(t)}});function Jn(e){if(!e.key){const t="Found a link without `key` attribute in the configuration. See dev console.";return nt(t,"core/templates/show-link"),void console.warn(t,e)}return Te` <dt class="${e.class?e.class:null}">${e.key}</dt> @@ -58,17 +168,17 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </svg>`;function rr(e=[]){const t=er[tr];return e.map((function(e){const r=[e.name],o=[e.company],i=e.w3cid?parseInt(e.w3cid,10):null,s=Te`<dd class="p-author h-card vcard" data-editor-id="${i}" - ></dd>`,a=document.createDocumentFragment(),c=[];e.mailto?c.push(Te`<a + ></dd>`,a=document.createDocumentFragment(),l=[];e.mailto?l.push(Te`<a class="ed_mailto u-email email p-name" href="${"mailto:"+e.mailto}" >${r}</a - >`):e.url?c.push(Te`<a class="u-url url p-name fn" href="${e.url}">${r}</a>`):c.push(Te`<span class="p-name fn">${r}</span>`);e.orcid&&c.push(Te`<a class="p-name orcid" href="${e.orcid}" + >`):e.url?l.push(Te`<a class="u-url url p-name fn" href="${e.url}">${r}</a>`):l.push(Te`<span class="p-name fn">${r}</span>`);e.orcid&&l.push(Te`<a class="p-name orcid" href="${e.orcid}" >${nr.cloneNode(!0)} - </a>`);e.company&&(e.companyURL?c.push(Te` + </a>`);e.company&&(e.companyURL?l.push(Te` (<a class="p-org org h-org h-card" href="${e.companyURL}" >${o}</a >) - `):c.push(Te` (${o}) `));e.note&&c.push(document.createTextNode(` (${e.note})`));if(e.extras){const t=e.extras.filter(e=>e.name&&e.name.trim()).map(n);for(const e of t)c.push(document.createTextNode(", "),e)}if(e.retiredDate){const n=new Date(e.retiredDate),r="Invalid Date"!==n.toString(),o=document.createElement("time");if(o.textContent=r?function(e=new Date,t=document.documentElement.lang||"en"){e instanceof Date||(e=new Date(e));const n=[t,"en"];return`${e.toLocaleString(n,{day:"2-digit",timeZone:"UTC"})} ${e.toLocaleString(n,{month:"long",timeZone:"UTC"})} ${e.toLocaleString(n,{year:"numeric",timeZone:"UTC"})}`}(n):"Invalid Date",!r){tt("The date is invalid. The expected format is YYYY-MM-DD.","core/templates/show-people",{title:"Invalid date",elements:[o]})}o.dateTime=(l=n,je.format(l)),c.push(Te` - ${t.until(o)} `)}var l;return Te.bind(a)`${c}`,s.appendChild(a),s}));function n(e){const t=Te`<span class="${e.class||null}"></span>`;let n=t;return e.href&&(n=Te`<a href="${e.href}"></a>`,t.appendChild(n)),n.textContent=e.name,t}}const or="dini/templates/headers",ir="https://creativecommons.org/licenses/by/4.0/legalcode",sr=qe({en:{author:"Author:",authors:"Authors:",editor:"Editor:",editors:"Editors:",former_editor:"Former editor:",former_editors:"Former editors:",latest_editors_draft:"Latest editor's draft:",latest_published_version:"Latest published version:",this_version:"This version:"},ko:{author:"저자:",authors:"저자:",editor:"편집자:",editors:"편집자:",former_editor:"이전 편집자:",former_editors:"이전 편집자:",latest_editors_draft:"최신 편집 초안:",latest_published_version:"최신 버전:",this_version:"현재 버전:"},zh:{author:"作者:",authors:"作者:",editor:"编辑:",editors:"编辑:",former_editor:"原编辑:",former_editors:"原编辑:",latest_editors_draft:"最新编辑草稿:",latest_published_version:"最新发布版本:",this_version:"本版本:"},ja:{author:"著者:",authors:"著者:",editor:"編者:",editors:"編者:",former_editor:"以前の版の編者:",former_editors:"以前の版の編者:",latest_editors_draft:"最新の編集用草案:",latest_published_version:"最新バージョン:",this_version:"このバージョン:"},nl:{author:"Auteur:",authors:"Auteurs:",editor:"Redacteur:",editors:"Redacteurs:",latest_editors_draft:"Laatste werkversie:",latest_published_version:"Laatst gepubliceerde versie:",this_version:"Deze versie:"},es:{author:"Autor:",authors:"Autores:",editor:"Editor:",editors:"Editores:",latest_editors_draft:"Borrador de editor mas reciente:",latest_published_version:"Versión publicada mas reciente:",this_version:"Ésta versión:"},de:{author:"Autor/in:",authors:"Autor/innen:",editor:"Redaktion:",editors:"Redaktion:",former_editor:"Frühere Mitwirkende:",former_editors:"Frühere Mitwirkende:",latest_editors_draft:"Letzter Entwurf:",latest_published_version:"Letzte publizierte Fassung:",this_version:"Diese Fassung:"}});var ar=e=>Te`<div class="head"> + `):l.push(Te` (${o}) `));e.note&&l.push(document.createTextNode(` (${e.note})`));if(e.extras){const t=e.extras.filter(e=>e.name&&e.name.trim()).map(n);for(const e of t)l.push(document.createTextNode(", "),e)}if(e.retiredDate){const n=new Date(e.retiredDate),r="Invalid Date"!==n.toString(),o=document.createElement("time");if(o.textContent=r?function(e=new Date,t=document.documentElement.lang||"en"){e instanceof Date||(e=new Date(e));const n=[t,"en"];return`${e.toLocaleString(n,{day:"2-digit",timeZone:"UTC"})} ${e.toLocaleString(n,{month:"long",timeZone:"UTC"})} ${e.toLocaleString(n,{year:"numeric",timeZone:"UTC"})}`}(n):"Invalid Date",!r){tt("The date is invalid. The expected format is YYYY-MM-DD.","core/templates/show-people",{title:"Invalid date",elements:[o]})}o.dateTime=(c=n,De.format(c)),l.push(Te` - ${t.until(o)} `)}var c;return Te.bind(a)`${l}`,s.appendChild(a),s}));function n(e){const t=Te`<span class="${e.class||null}"></span>`;let n=t;return e.href&&(n=Te`<a href="${e.href}"></a>`,t.appendChild(n)),n.textContent=e.name,t}}const or="dini/templates/headers",ir="https://creativecommons.org/licenses/by/4.0/legalcode",sr=qe({en:{author:"Author:",authors:"Authors:",editor:"Editor:",editors:"Editors:",former_editor:"Former editor:",former_editors:"Former editors:",latest_editors_draft:"Latest editor's draft:",latest_published_version:"Latest published version:",this_version:"This version:"},ko:{author:"저자:",authors:"저자:",editor:"편집자:",editors:"편집자:",former_editor:"이전 편집자:",former_editors:"이전 편집자:",latest_editors_draft:"최신 편집 초안:",latest_published_version:"최신 버전:",this_version:"현재 버전:"},zh:{author:"作者:",authors:"作者:",editor:"编辑:",editors:"编辑:",former_editor:"原编辑:",former_editors:"原编辑:",latest_editors_draft:"最新编辑草稿:",latest_published_version:"最新发布版本:",this_version:"本版本:"},ja:{author:"著者:",authors:"著者:",editor:"編者:",editors:"編者:",former_editor:"以前の版の編者:",former_editors:"以前の版の編者:",latest_editors_draft:"最新の編集用草案:",latest_published_version:"最新バージョン:",this_version:"このバージョン:"},nl:{author:"Auteur:",authors:"Auteurs:",editor:"Redacteur:",editors:"Redacteurs:",latest_editors_draft:"Laatste werkversie:",latest_published_version:"Laatst gepubliceerde versie:",this_version:"Deze versie:"},es:{author:"Autor:",authors:"Autores:",editor:"Editor:",editors:"Editores:",latest_editors_draft:"Borrador de editor mas reciente:",latest_published_version:"Versión publicada mas reciente:",this_version:"Ésta versión:"},de:{author:"Autor/in:",authors:"Autor/innen:",editor:"Redaktion:",editors:"Redaktion:",former_editor:"Frühere Mitwirkende:",former_editors:"Frühere Mitwirkende:",latest_editors_draft:"Letzter Entwurf:",latest_published_version:"Letzte publizierte Fassung:",this_version:"Diese Fassung:"}});var ar=e=>Te`<div class="head"> ${e.logos.map(Qn)} ${document.querySelector("h1#title")} ${function(e){let t=document.querySelector("h2#subtitle");return t&&t.parentElement?(t.remove(),e.subtitle=t.textContent.trim()):e.subtitle&&(t=document.createElement("h2"),t.textContent=e.subtitle,t.id="subtitle"),t&&t.classList.add("subtitle"),t}(e)} <h2> @@ -97,7 +207,7 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e ${n="Creative Commons Attribution 4.0 International Public License",r=ir,o="subfoot",Te`<a rel="license" href="${r}" class="${o}">${n}</a>`}. </p>`;var n,r,o}(e)} <hr /> - </div>`;const cr="dini/headers",lr=new Intl.DateTimeFormat(["de-DE"],{timeZone:"UTC",year:"numeric",month:"long",day:"2-digit"}),ur={unofficial:"Entwurf vom",base:"Spezifikation vom"};var dr=Object.freeze({__proto__:null,name:cr,run:function(e){if(e.isUnofficial="unofficial"===e.specStatus,e.isBasic="base"===e.specStatus,!e.specStatus){tt("Missing required configuration: `specStatus`",cr)}e.title=document.title||"Kein Titel",e.subtitle||(e.subtitle=""),e.publishDate=function(e,t,n=new Date){const r=e[t]?new Date(e[t]):new Date(n);if(Number.isFinite(r.valueOf())){const e=je.format(r);return new Date(e)}return tt(`[\`${t}\`](https://github.com/w3c/respec/wiki/${t}) is not a valid date: "${e[t]}". Expected format 'YYYY-MM-DD'.`,cr),new Date(je.format(new Date))}(e,"publishDate",document.lastModified),e.publishYear=e.publishDate.getUTCFullYear(),e.publishHumanDate=lr.format(e.publishDate);const t=function(e){if(!e.name){tt("All authors and editors must have a name.",cr)}if(e.orcid)try{e.orcid=function(e){const t=new URL(e,"https://orcid.org/");if("https://orcid.org"!==t.origin)throw new Error(`The origin should be "https://orcid.org", not "${t.origin}".`);const n=t.pathname.slice(1).replace(/\/$/,"");if(!/^\d{4}-\d{4}-\d{4}-\d{3}(\d|X)$/.test(n))throw new Error(`ORCIDs have the format "1234-1234-1234-1234", not "${n}"`);const r=n[n.length-1],o=(12-n.split("").slice(0,-1).filter(e=>/\d/.test(e)).map(Number).reduce((e,t)=>2*(e+t),0)%11)%11,i=10===o?"X":String(o);if(r!==i)throw new Error(`"${n}" has an invalid checksum.`);return t.href}(e.orcid)}catch(t){tt(`"${e.orcid}" is not an ORCID. ${t.message}`,cr),delete e.orcid}};if(e.formerEditors||(e.formerEditors=[]),e.editors){e.editors.forEach(t);for(let t=0;t<e.editors.length;t++){const n=e.editors[t];"retiredDate"in n&&(e.formerEditors.push(n),e.editors.splice(t--,1))}}if(!e.editors||0===e.editors.length){tt("At least one editor is required",cr)}e.formerEditors.length&&e.formerEditors.forEach(t),e.authors&&e.authors.forEach(t),e.multipleEditors=e.editors&&e.editors.length>1,e.multipleFormerEditors=e.formerEditors.length>1,e.multipleAuthors=e.authors&&e.authors.length>1,(e.alternateFormats||[]).forEach(e=>{if(!e.uri||!e.label){tt("All alternate formats must have a uri and a label.",cr)}}),e.copyrightStart&&e.copyrightStart==e.publishYear&&(e.copyrightStart=""),e.textStatus=ur[e.specStatus],e.dashDate=je.format(e.publishDate),e.publishISODate=e.publishDate.toISOString();const n=ar(e);document.body.prepend(n),document.body.classList.add("h-entry"),it("amend-user-config",{publishISODate:e.publishISODate,generatedSubtitle:`${e.longStatus} ${e.publishHumanDate}`})}});const fr="dini/abstract",pr=qe({en:{abstract:"Abstract"},ko:{abstract:"요약"},zh:{abstract:"摘要"},ja:{abstract:"要約"},nl:{abstract:"Samenvatting"},es:{abstract:"Resumen"},de:{abstract:"Zusammenfassung"}});var hr=Object.freeze({__proto__:null,name:fr,run:async function(){const e=document.getElementById("abstract");if(!e){return void tt('Document must have one element with `id="abstract"',fr)}e.classList.add("introductory");let t=document.querySelector("#abstract>h2");t||(t=document.createElement("h2"),t.textContent=pr.abstract,e.prepend(t))}});var mr=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=Me(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const gr="core/dfn-abbr";function br(e){const t=(n=e).dataset.abbr?n.dataset.abbr:n.textContent.match(/\b([a-z])/gi).join("").toUpperCase();var n;const r=e.textContent.replace(/\s\s+/g," ").trim();e.insertAdjacentHTML("afterend",` (<abbr title="${r}">${t}</abbr>)`);const o=e.dataset.lt||"";e.dataset.lt=o.split("|").filter(e=>e.trim()).concat(t).join("|")}var wr=Object.freeze({__proto__:null,name:gr,run:function(){const e=document.querySelectorAll("[data-abbr]");for(const t of e){const{localName:e}=t;switch(e){case"dfn":br(t);break;default:tt(`\`data-abbr\` attribute not supported on \`${e}\` elements.`,gr,{elements:[t],title:"Error: unsupported."})}}}});const yr=/^[a-z]+(\s+[a-z]+)+$/,vr=/\B"([^"]*)"\B/,kr=/(\w+)\((.*)\)$/,xr=/^\[\[(\w+)\]\]$/,$r=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,_r=/^(\w+)\["([\w- ]*)"\]$/,Er=/\.?(\w+\(.*\)$)/;function Sr(e){const{identifier:t,renderParent:n}=e;if(n)return Te`<a data-xref-type="_IDL_" data-link-type="idl" + </div>`;const lr="dini/headers",cr=new Intl.DateTimeFormat(["de-DE"],{timeZone:"UTC",year:"numeric",month:"long",day:"2-digit"}),ur={unofficial:"Entwurf vom",base:"Spezifikation vom"};var dr=Object.freeze({__proto__:null,name:lr,run:function(e){if(e.isUnofficial="unofficial"===e.specStatus,e.isBasic="base"===e.specStatus,!e.specStatus){tt("Missing required configuration: `specStatus`",lr)}e.title=document.title||"Kein Titel",e.subtitle||(e.subtitle=""),e.publishDate=function(e,t,n=new Date){const r=e[t]?new Date(e[t]):new Date(n);if(Number.isFinite(r.valueOf())){const e=De.format(r);return new Date(e)}return tt(`[\`${t}\`](https://github.com/w3c/respec/wiki/${t}) is not a valid date: "${e[t]}". Expected format 'YYYY-MM-DD'.`,lr),new Date(De.format(new Date))}(e,"publishDate",document.lastModified),e.publishYear=e.publishDate.getUTCFullYear(),e.publishHumanDate=cr.format(e.publishDate);const t=function(e){if(!e.name){tt("All authors and editors must have a name.",lr)}if(e.orcid)try{e.orcid=function(e){const t=new URL(e,"https://orcid.org/");if("https://orcid.org"!==t.origin)throw new Error(`The origin should be "https://orcid.org", not "${t.origin}".`);const n=t.pathname.slice(1).replace(/\/$/,"");if(!/^\d{4}-\d{4}-\d{4}-\d{3}(\d|X)$/.test(n))throw new Error(`ORCIDs have the format "1234-1234-1234-1234", not "${n}"`);const r=n[n.length-1],o=(12-n.split("").slice(0,-1).filter(e=>/\d/.test(e)).map(Number).reduce((e,t)=>2*(e+t),0)%11)%11,i=10===o?"X":String(o);if(r!==i)throw new Error(`"${n}" has an invalid checksum.`);return t.href}(e.orcid)}catch(t){tt(`"${e.orcid}" is not an ORCID. ${t.message}`,lr),delete e.orcid}};if(e.formerEditors||(e.formerEditors=[]),e.editors){e.editors.forEach(t);for(let t=0;t<e.editors.length;t++){const n=e.editors[t];"retiredDate"in n&&(e.formerEditors.push(n),e.editors.splice(t--,1))}}if(!e.editors||0===e.editors.length){tt("At least one editor is required",lr)}e.formerEditors.length&&e.formerEditors.forEach(t),e.authors&&e.authors.forEach(t),e.multipleEditors=e.editors&&e.editors.length>1,e.multipleFormerEditors=e.formerEditors.length>1,e.multipleAuthors=e.authors&&e.authors.length>1,(e.alternateFormats||[]).forEach(e=>{if(!e.uri||!e.label){tt("All alternate formats must have a uri and a label.",lr)}}),e.copyrightStart&&e.copyrightStart==e.publishYear&&(e.copyrightStart=""),e.textStatus=ur[e.specStatus],e.dashDate=De.format(e.publishDate),e.publishISODate=e.publishDate.toISOString();const n=ar(e);document.body.prepend(n),document.body.classList.add("h-entry"),it("amend-user-config",{publishISODate:e.publishISODate,generatedSubtitle:`${e.longStatus} ${e.publishHumanDate}`})}});const fr="dini/abstract",pr=qe({en:{abstract:"Abstract"},ko:{abstract:"요약"},zh:{abstract:"摘要"},ja:{abstract:"要約"},nl:{abstract:"Samenvatting"},es:{abstract:"Resumen"},de:{abstract:"Zusammenfassung"}});var hr=Object.freeze({__proto__:null,name:fr,run:async function(){const e=document.getElementById("abstract");if(!e){return void tt('Document must have one element with `id="abstract"',fr)}e.classList.add("introductory");let t=document.querySelector("#abstract>h2");t||(t=document.createElement("h2"),t.textContent=pr.abstract,e.prepend(t))}});var mr=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=Me(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const gr="core/dfn-abbr";function br(e){const t=(n=e).dataset.abbr?n.dataset.abbr:n.textContent.match(/\b([a-z])/gi).join("").toUpperCase();var n;const r=e.textContent.replace(/\s\s+/g," ").trim();e.insertAdjacentHTML("afterend",` (<abbr title="${r}">${t}</abbr>)`);const o=e.dataset.lt||"";e.dataset.lt=o.split("|").filter(e=>e.trim()).concat(t).join("|")}var wr=Object.freeze({__proto__:null,name:gr,run:function(){const e=document.querySelectorAll("[data-abbr]");for(const t of e){const{localName:e}=t;switch(e){case"dfn":br(t);break;default:tt(`\`data-abbr\` attribute not supported on \`${e}\` elements.`,gr,{elements:[t],title:"Error: unsupported."})}}}});const yr=/^[a-z]+(\s+[a-z]+)+$/,vr=/\B"([^"]*)"\B/,kr=/(\w+)\((.*)\)$/,xr=/^\[\[(\w+)\]\]$/,$r=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,_r=/^(\w+)\["([\w- ]*)"\]$/,Sr=/\.?(\w+\(.*\)$)/;function Er(e){const{identifier:t,renderParent:n}=e;if(n)return Te`<a data-xref-type="_IDL_" data-link-type="idl" ><code>${t}</code></a >`}function Cr(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Te`${n&&r?".":""}<a data-xref-type="attribute" @@ -111,12 +221,12 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e data-link-for="${o}" data-xref-for="${o}" ><code>${n}</code></a - >`}function Lr(e){const{args:t,identifier:n,type:r,parent:o,renderParent:i}=e,{identifier:s}=o||{},a=Fe(t,e=>Te`<var>${e}</var>`),c=`${n}(${t.join(", ")})`;return Te`${o&&i?".":""}<a + >`}function Lr(e){const{args:t,identifier:n,type:r,parent:o,renderParent:i}=e,{identifier:s}=o||{},a=Fe(t,e=>Te`<var>${e}</var>`),l=`${n}(${t.join(", ")})`;return Te`${o&&i?".":""}<a data-link-type="idl" data-xref-type="${r}" data-link-for="${s}" data-xref-for="${s}" - data-lt="${c}" + data-lt="${l}" ><code>${n}</code></a ><code>(${a})</code>`}function Tr(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Te`"<a data-link-type="idl" @@ -125,117 +235,113 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e data-xref-for="${o}" data-lt="${n?null:"the-empty-string"}" ><code>${n}</code></a - >"`}function zr(e){const{identifier:t}=e;return Te`"<a + >"`}function Nr(e){const{identifier:t}=e;return Te`"<a data-link-type="idl" data-cite="WebIDL" data-xref-type="exception" ><code>${t}</code></a - >"`}function Nr(e){const{identifier:t}=e;return Te`<a + >"`}function Rr(e){const{identifier:t}=e;return Te`<a data-link-type="idl" data-cite="WebIDL" data-xref-type="interface" ><code>${t}</code></a - >`}function Rr(e){let t;try{t=function(e){const[t,n]=e.split(Er),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),i=[];for(;r.length;){const t=r.pop();if(kr.test(t)){const[,e,n]=t.match(kr),r=n.split(/,\s*/).filter(e=>e);i.push({type:"method",identifier:e,args:r,renderParent:o})}else if(_r.test(t)){const[,e,n]=t.match(_r);i.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(vr.test(t)){const[,e]=t.match(vr);o?i.push({type:"exception",identifier:e}):i.push({type:"enum",enumValue:e,renderParent:o})}else if(xr.test(t)){const[,e]=t.match(xr);i.push({type:"internal-slot",identifier:e,renderParent:o})}else if($r.test(t)&&r.length){const[,e]=t.match($r);i.push({type:"attribute",identifier:e,renderParent:o})}else if(yr.test(t))i.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!$r.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);i.push({type:"base",identifier:t,renderParent:o})}}return i.forEach((e,t,n)=>{e.parent=n[t+1]||null}),i.reverse()}(e)}catch(t){const n=Te`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return tt(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Te(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=Sr(e);t&&r.push(t);break}case"attribute":r.push(Ar(e));break;case"internal-slot":r.push(Cr(e));break;case"method":r.push(Lr(e));break;case"enum":r.push(Tr(e));break;case"exception":r.push(zr(e));break;case"idl-primitive":r.push(Nr(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const jr=new Set(["alias","reference"]),Dr=async function(){return await Le.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const Pr={get ready(){return Dr},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!jr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!jr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...jr].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!jr.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...jr],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},Or={},Ir=new URL("https://specref.herokuapp.com/bibrefs?refs="),qr=De({hint:"dns-prefetch",href:Ir.origin});let Mr;document.head.appendChild(qr);const Fr=new Promise(e=>{Mr=e});async function Br(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(Ir.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await Pr.addAll(o)}catch(e){console.error(e)}return o}async function Wr(e){const t=await Fr;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await Wr(n.aliasOf):n}var Ur=Object.freeze({__proto__:null,biblio:Or,name:"core/biblio",updateFromNetwork:Br,resolveRef:Wr,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=Or;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await Pr.ready;const n=e.map(async e=>({id:e,data:await Pr.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{Or[e.id]=e.data});const i=o.noData.map(e=>e.id);if(i.length){const e=await Br(i,{forceUpdate:!0});Object.assign(Or,e)}Object.assign(Or,this.conf.localBiblio),(()=>{Mr(this.conf.biblio)})()}},wireReference:to,stringifyReference:no});const Hr="core/render-biblio",Zr=qe({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),Vr=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),Yr=Object.freeze({authors:[],date:"",href:"",publisher:"",status:"",title:"",etAl:!1}),Kr=(Gr=".",e=>{const t=e.trim();return!t||t.endsWith(Gr)?t:t+Gr});var Gr;function Jr(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(Xr)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),i=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),s=Te`<section> + >`}function zr(e){let t;try{t=function(e){const[t,n]=e.split(Sr),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),i=[];for(;r.length;){const t=r.pop();if(kr.test(t)){const[,e,n]=t.match(kr),r=n.split(/,\s*/).filter(e=>e);i.push({type:"method",identifier:e,args:r,renderParent:o})}else if(_r.test(t)){const[,e,n]=t.match(_r);i.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(vr.test(t)){const[,e]=t.match(vr);o?i.push({type:"exception",identifier:e}):i.push({type:"enum",enumValue:e,renderParent:o})}else if(xr.test(t)){const[,e]=t.match(xr);i.push({type:"internal-slot",identifier:e,renderParent:o})}else if($r.test(t)&&r.length){const[,e]=t.match($r);i.push({type:"attribute",identifier:e,renderParent:o})}else if(yr.test(t))i.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!$r.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);i.push({type:"base",identifier:t,renderParent:o})}}return i.forEach((e,t,n)=>{e.parent=n[t+1]||null}),i.reverse()}(e)}catch(t){const n=Te`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return tt(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Te(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=Er(e);t&&r.push(t);break}case"attribute":r.push(Ar(e));break;case"internal-slot":r.push(Cr(e));break;case"method":r.push(Lr(e));break;case"enum":r.push(Tr(e));break;case"exception":r.push(Nr(e));break;case"idl-primitive":r.push(Rr(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const Dr=new Set(["alias","reference"]),jr=async function(){return await Le.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const Pr={get ready(){return jr},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!Dr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!Dr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...Dr].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!Dr.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...Dr],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},Or={},Ir=new URL("https://api.specref.org/bibrefs?refs="),qr=je({hint:"dns-prefetch",href:Ir.origin});let Mr;document.head.appendChild(qr);const Fr=new Promise(e=>{Mr=e});async function Br(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(Ir.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await Pr.addAll(o)}catch(e){console.error(e)}return o}async function Wr(e){const t=await Fr;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await Wr(n.aliasOf):n}var Ur=Object.freeze({__proto__:null,biblio:Or,name:"core/biblio",updateFromNetwork:Br,resolveRef:Wr,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=Or;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await Pr.ready;const n=e.map(async e=>({id:e,data:await Pr.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{Or[e.id]=e.data});const i=o.noData.map(e=>e.id);if(i.length){const e=await Br(i,{forceUpdate:!0});Object.assign(Or,e)}Object.assign(Or,this.conf.localBiblio),(()=>{Mr(this.conf.biblio)})()}}});const Hr="core/render-biblio",Zr=qe({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),Vr=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),Yr=(Kr=".",e=>{const t=e.trim();return!t||t.endsWith(Kr)?t:t+Kr});var Kr;function Gr(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(Jr)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),i=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),s=Te`<section> <h3>${t}</h3> - <dl class="bibliography">${i.map(eo)}</dl> - </section>`;Be(s,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());tt(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,Hr),console.warn("Bad references: ",t)})}(r),s}function Xr(e){let t=Or[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;tt(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,Hr)}else n=t.aliasOf,t=Or[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function Qr(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Te`<cite + <dl class="bibliography">${i.map(Qr)}</dl> + </section>`;Be(s,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());tt(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,Hr),console.warn("Bad references: ",t)})}(r),s}function Jr(e){let t=Or[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;tt(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,Hr)}else n=t.aliasOf,t=Or[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function Xr(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Te`<cite ><a class="bibref" href="${r}" data-link-type="biblio">${t||n}</a></cite - >`;return t?o:Te`[${o}]`}function eo({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Te` + >`;return t?o:Te`[${o}]`}function Qr({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Te` <dt id="${n}">[${e}]</dt> - <dd>${{html:no(t)}}</dd> + <dd>${{html:eo(t)}}</dd> `:Te` <dt id="${n}">[${e}]</dt> <dd><em class="respec-offending-element">Reference not found.</em></dd> - `}function to(e,t="_blank"){if("object"!=typeof e)throw new TypeError("Only modern object references are allowed");const n=Object.assign({},Yr,e),r=n.authors.join("; ")+(n.etAl?" et al":""),o=Vr.get(n.status)||n.status;return Te.wire(n)` - <cite> - <a - href="${n.href}" - target="${t}" - rel="noopener noreferrer"> - ${n.title.trim()}</a>. - </cite> - <span class="authors"> - ${Kr(r)} - </span> - <span class="publisher"> - ${Kr(n.publisher)} - </span> - <span class="pubDate"> - ${Kr(n.date)} - </span> - <span class="pubStatus"> - ${Kr(o)} - </span> - `}function no(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${Kr(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(Vr.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var ro=Object.freeze({__proto__:null,name:Hr,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Te`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Te`<h2>${Zr.references}</h2>`),r.classList.add("appendix"),n.length){const e=Jr(n,Zr.norm_references);r.appendChild(e)}if(t.length){const e=Jr(t,Zr.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:Qr,wireReference:to,stringifyReference:no});const oo="core/inlines",io={},so=qe({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),ao=/(?:`[^`]+`)(?!`)/,co=/(?:{{[^}]+}})/,lo=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,uo=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,fo=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,po=/(?:\[=[^=]+=\])/,ho=/(?:\[\^[^^]+\^\])/;function mo(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[i,s,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Te`<code + `}function eo(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${Yr(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(Vr.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var to=Object.freeze({__proto__:null,name:Hr,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Te`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Te`<h2>${Zr.references}</h2>`),r.classList.add("appendix"),n.length){const e=Gr(n,Zr.norm_references);r.appendChild(e)}if(t.length){const e=Gr(t,Zr.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:Xr});const no="core/inlines",ro={},oo=qe({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),io=/(?:`[^`]+`)(?!`)/,so=/(?:{{[^}]+}})/,ao=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,lo=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,co=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,uo=/(?:\[=[^=]+=\])/,fo=/(?:\[\^[^^]+\^\])/;function po(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[i,s,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Te`<code ><a data-xref-type="${i}" data-xref-for="${s}" >${a}</a ></code - >`}function go(e){const t=Ie(e),n=Te`<em class="rfc2119">${t}</em>`;return io[t]=!0,n}function bo(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Te`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Te`<a href="${t}"></a>`;const n=Te`<span>${e}</span>`;return tt(`Wasn't able to expand ${e} as it didn't match any id in the document.`,oo,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function wo(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):Rr(Ie(t))}function yo(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,i]=r.split("|").map(Ie),{type:s,illegal:a}=He(o,t.parentNode),c=Qr(o,i),l=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(l)){const e=c.childNodes[1]||c;nt("Normative references in informative sections are not allowed. ",oo,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==s||a?n.normativeReferences.add(l):n.informativeReferences.add(l),c.childNodes[1]?c.childNodes:[c]}function vo(e,t,n){return"ABBR"===t.parentElement.tagName?e:Te`<abbr title="${n.get(e)}">${e}</abbr>`}function ko(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Te`<var data-type="${r}">${n}</var>`}function xo(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,i]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],s=_o(i),a=n?Ie(n):null;return Te`<a + >`}function ho(e){const t=Ie(e),n=Te`<em class="rfc2119">${t}</em>`;return ro[t]=!0,n}function mo(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Te`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Te`<a href="${t}"></a>`;const n=Te`<span>${e}</span>`;return tt(`Wasn't able to expand ${e} as it didn't match any id in the document.`,no,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function go(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):zr(Ie(t))}function bo(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,i]=r.split("|").map(Ie),{type:s,illegal:a}=He(o,t.parentNode),l=Xr(o,i),c=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(c)){const e=l.childNodes[1]||l;nt("Normative references in informative sections are not allowed. ",no,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==s||a?n.normativeReferences.add(c):n.informativeReferences.add(c),l.childNodes[1]?l.childNodes:[l]}function wo(e,t,n){return"ABBR"===t.parentElement.tagName?e:Te`<abbr title="${n.get(e)}">${e}</abbr>`}function yo(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Te`<var data-type="${r}">${n}</var>`}function vo(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,i]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],s=xo(i),a=n?Ie(n):null;return Te`<a data-link-type="dfn" data-link-for="${a}" data-xref-for="${a}" data-lt="${o}" >${s}</a - >`}function $o(e){const t=e.slice(1,-1);return Te`<code>${t}</code>`}function _o(e){return ao.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?$o(e):_o(e)):document.createTextNode(e)}var Eo=Object.freeze({__proto__:null,name:oo,rfc2119Usage:io,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new Ke,e.informativeReferences=new Ke,e.respecRFC2119||(e.respecRFC2119=io);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,i=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),i=[];let s;for(;s=o.nextNode();)i.push(s);return i}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),s=so.rfc2119Keywords(),a=new RegExp(`(${[s.source,co.source,lo.source,uo.source,fo.source,po.source,ao.source,ho.source,...o?[o]:[]].join("|")})`);for(const n of i){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let i=!0;for(const a of r)if(i=!i,i)if(a.startsWith("{{")){const e=wo(a);o.append(e)}else if(a.startsWith("[[[")){const e=bo(a);o.append(e)}else if(a.startsWith("[[")){const t=yo(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=ko(a);o.append(e)}else if(a.startsWith("[=")){const e=xo(a);o.append(e)}else if(a.startsWith("`")){const e=$o(a);o.append(e)}else if(a.startsWith("[^")){const e=mo(a);o.append(e)}else if(t.has(a)){const e=vo(a,n,t);o.append(e)}else{if(!s.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=go(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const So="dini/conformance",Co=qe({en:{conformance:"Conformance",normativity:"As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.",keywordInterpretation:(e,t)=>Te`<p> + >`}function ko(e){const t=e.slice(1,-1);return Te`<code>${t}</code>`}function xo(e){return io.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?ko(e):xo(e)):document.createTextNode(e)}var $o=Object.freeze({__proto__:null,name:no,rfc2119Usage:ro,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new Ke,e.informativeReferences=new Ke,e.respecRFC2119||(e.respecRFC2119=ro);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,i=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),i=[];let s;for(;s=o.nextNode();)i.push(s);return i}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),s=oo.rfc2119Keywords(),a=new RegExp(`(${[s.source,so.source,ao.source,lo.source,co.source,uo.source,io.source,fo.source,...o?[o]:[]].join("|")})`);for(const n of i){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let i=!0;for(const a of r)if(i=!i,i)if(a.startsWith("{{")){const e=go(a);o.append(e)}else if(a.startsWith("[[[")){const e=mo(a);o.append(e)}else if(a.startsWith("[[")){const t=bo(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=yo(a);o.append(e)}else if(a.startsWith("[=")){const e=vo(a);o.append(e)}else if(a.startsWith("`")){const e=ko(a);o.append(e)}else if(a.startsWith("[^")){const e=po(a);o.append(e)}else if(t.has(a)){const e=wo(a,n,t);o.append(e)}else{if(!s.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=ho(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const _o="dini/conformance",So=qe({en:{conformance:"Conformance",normativity:"As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.",keywordInterpretation:(e,t)=>Te`<p> The key word${t?"s":""} ${e} in this document ${t?"are":"is"} to be interpreted as described in <a href="https://datatracker.ietf.org/doc/html/bcp14">BCP 14</a> - ${Qr("RFC2119")} ${Qr("RFC8174")} + ${Xr("RFC2119")} ${Xr("RFC8174")} when, and only when, they appear in all capitals, as shown here. </p>`},de:{conformance:"Anforderungen",normativity:"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument nicht normativ. Alle anderen Angaben sind normativ.",keywordInterpretation:(e,t)=>Te`<p> ${t?"Die Schlüsselwörter":"Das Schlüsselwort"} ${e} in diesem Dokument ${t?"sind":"ist"} gemäß <a href="https://datatracker.ietf.org/doc/html/bcp14">BCP 14</a> - ${Qr("RFC2119")} ${Qr("RFC8174")} + ${Xr("RFC2119")} ${Xr("RFC8174")} und unter Berücksichtigung von <a href="https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst" >2119de</a > zu interpretieren, wenn und nur wenn ${t?"sie":"es"} wie hier gezeigt durchgehend groß geschrieben wurde${t?"n":""}. - </p>`}});function Ao(e,t){const n=[...Object.keys(io)];n.length&&(t.normativeReferences.add("RFC2119"),t.normativeReferences.add("RFC8174"));const r=function(e,t=(e=>e)){const n=e.map(t);switch(n.length){case 0:case 1:return n[0];case 2:return Te`${n[0]}${Re.x_and_y}${n[1]}`;default:{const e=Fe(n.slice(0,-1));return Te`${e}${Re.x_y_and_z}${n[n.length-1]}`}}}(n.sort(),e=>Te`<em class="rfc2119">${e}</em>`),o=n.length>1,i=Te` - <h2>${Co.conformance}</h2> - <p>${Co.normativity}</p> - ${n.length?Co.keywordInterpretation(r,o):null} - `;e.prepend(...i.childNodes)}var Lo=Object.freeze({__proto__:null,name:So,run:function(e){const t=document.querySelector("section#conformance");if(t&&!t.classList.contains("override")&&Ao(t,e),!t&&Object.keys(io).length){nt("Document uses RFC2119 keywords but lacks a conformance section.",So,{hint:'Please add a `<section id="conformance">`.'})}}});const To=new Qe;function zo(e,t){for(const n of t)To.has(n)||To.set(n,new Set),To.get(n).add(e)}var No=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=We(e);zo(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===Ie(e.textContent)||(e.dataset.lt=t.join("|"))})}});var Ro=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=Ie(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=Ie(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=Ie(n).toLowerCase(),o=Ne.isSingular(r)?Ne.plural(r):Ne.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),zo(e,n)}})}});const jo=qe({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}}),Do=async function(){try{return(await Promise.resolve().then((function(){return Ns}))).default}catch{return ht("examples.css")}}();function Po(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Te`<span class="example-title">: ${n.title}</span>`:"";return Te`<div class="marker"> - <a class="self-link">${jo.example}<bdi>${r}</bdi></a + </p>`}});function Eo(e,t){const n=[...Object.keys(ro)];n.length&&(t.normativeReferences.add("RFC2119"),t.normativeReferences.add("RFC8174"));const r=function(e,t=(e=>e)){const n=e.map(t);switch(n.length){case 0:case 1:return n[0];case 2:return Te`${n[0]}${ze.x_and_y}${n[1]}`;default:{const e=Fe(n.slice(0,-1));return Te`${e}${ze.x_y_and_z}${n[n.length-1]}`}}}(n.sort(),e=>Te`<em class="rfc2119">${e}</em>`),o=n.length>1,i=Te` + <h2>${So.conformance}</h2> + <p>${So.normativity}</p> + ${n.length?So.keywordInterpretation(r,o):null} + `;e.prepend(...i.childNodes)}var Co=Object.freeze({__proto__:null,name:_o,run:function(e){const t=document.querySelector("section#conformance");if(t&&!t.classList.contains("override")&&Eo(t,e),!t&&Object.keys(ro).length){nt("Document uses RFC2119 keywords but lacks a conformance section.",_o,{hint:'Please add a `<section id="conformance">`.'})}}});const Ao=new Qe;function Lo(e,t){for(const n of t)Ao.has(n)||Ao.set(n,new Set),Ao.get(n).add(e)}var To=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=We(e);Lo(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===Ie(e.textContent)||(e.dataset.lt=t.join("|"))})}});var No=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=Ie(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=Ie(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=Ie(n).toLowerCase(),o=Re.isSingular(r)?Re.plural(r):Re.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),Lo(e,n)}})}});var Ro=String.raw`span.example-title{text-transform:none} +aside.example,div.example,div.illegal-example{padding:.5em;margin:1em 0;position:relative;clear:both} +div.illegal-example{color:red} +div.illegal-example p{color:#000} +aside.example,div.example{padding:.5em;border-left-width:.5em;border-left-style:solid;border-color:#e0cb52;background:#fcfaee} +aside.example div.example{border-left-width:.1em;border-color:#999;background:#fff} +aside.example div.example span.example-title{color:#999} +.example pre{background-color:rgba(0,0,0,.03)}`;const zo=qe({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}});function Do(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Te`<span class="example-title">: ${n.title}</span>`:"";return Te`<div class="marker"> + <a class="self-link">${zo.example}<bdi>${r}</bdi></a >${o} - </div>`}var Oo=Object.freeze({__proto__:null,name:"core/examples",run:async function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;const t=await Do;document.head.insertBefore(Te`<style> - ${t} - </style>`,document.querySelector("link"));let n=0;e.forEach(e=>{const t=e.classList.contains("illegal-example"),r={number:n,illegal:t},{title:o}=e;if("aside"===e.localName){++n;const t=Po(e,n,r);e.prepend(t),o?Be(e,"example-"+n,o):Be(e,"example",String(n));const{id:i}=e;t.querySelector("a.self-link").href="#"+i,it("example",r)}else{const t=!!e.closest("aside");t||++n,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const i=e.id?e.id:null;i&&e.removeAttribute("id");const s=Po(e,t?0:n,r),a=Te`<div class="example" id="${i}"> + </div>`}var jo=Object.freeze({__proto__:null,name:"core/examples",run:function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;document.head.insertBefore(Te`<style> + ${Ro} + </style>`,document.querySelector("link"));let t=0;e.forEach(e=>{const n=e.classList.contains("illegal-example"),r={number:t,illegal:n},{title:o}=e;if("aside"===e.localName){++t;const n=Do(e,t,r);e.prepend(n),o?Be(e,"example-"+t,o):Be(e,"example",String(t));const{id:i}=e;n.querySelector("a.self-link").href="#"+i,it("example",r)}else{const n=!!e.closest("aside");n||++t,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const i=e.id?e.id:null;i&&e.removeAttribute("id");const s=Do(e,n?0:t,r),a=Te`<div class="example" id="${i}"> ${s} ${e.cloneNode(!0)} - </div>`;o&&Be(a,"example-"+n,o),Be(a,"example",String(n));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),t||it("example",r)}})}});const Io="core/issues-notes",qo=async function(){try{return(await Promise.resolve().then((function(){return Rs}))).default}catch{return ht("issues-notes.css")}}();const Mo=qe({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function Fo(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:i,displayType:s,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),i=t?"issue":n?"warning":r?"ednote":"note",s=t?o?Mo.feature_at_risk:Mo.issue:n?Mo.warning:r?Mo.editors_note:Mo.note;return{type:i,displayType:s,isFeatureAtRisk:o}}(e),c="issue"===i,l="span"===e.localName,{number:u}=e.dataset,d={type:i,inline:l,title:e.title,number:r(e)};if(!l){const r=Te`<div class="${a?i+" atrisk":i}" role="${"note"===i?"note":null}"></div>`,l=document.createElement("span"),f=Te`<div role="heading" class="${i+"-title marker"}">${l}</div>`;Be(f,"h",i);let p,h=s;if(e.id?(r.id=e.id,e.removeAttribute("id")):Be(r,"issue-container",d.number?"number-"+d.number:""),c){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Te`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Te`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(l.before(e),e.append(l)),l.classList.add("issue-number"),p=t.get(u),!p){nt(`Failed to fetch issue number ${u}.`,Io)}p&&!d.title&&(d.title=p.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Te`<span style="text-transform: none">: ${t.title}</span>`:"";return Te`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(Mo.issue,d,r.id))}if(l.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=p?p.labels:[];p&&"CLOSED"===p.state&&r.classList.add("closed"),f.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const i=(s=n,parseInt(s,16)>8388607.5?"#000":"#fff");var s;return Te`<a + </div>`;o&&Be(a,"example-"+t,o),Be(a,"example",String(t));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),n||it("example",r)}})}});var Po=String.raw`.issue-label{text-transform:initial} +.warning>p:first-child{margin-top:0} +.warning{padding:.5em;border-left-width:.5em;border-left-style:solid} +span.warning{padding:.1em .5em .15em} +.issue.closed span.issue-number{text-decoration:line-through} +.warning{border-color:#f11;border-width:.2em;border-style:solid;background:#fbe9e9} +.warning-title:before{content:"⚠";font-size:1.3em;float:left;padding-right:.3em;margin-top:-.3em} +li.task-list-item{list-style:none} +input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} +.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}`;const Oo="core/issues-notes",Io=qe({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function qo(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:i,displayType:s,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),i=t?"issue":n?"warning":r?"ednote":"note",s=t?o?Io.feature_at_risk:Io.issue:n?Io.warning:r?Io.editors_note:Io.note;return{type:i,displayType:s,isFeatureAtRisk:o}}(e),l="issue"===i,c="span"===e.localName,{number:u}=e.dataset,d={type:i,inline:c,title:e.title,number:r(e)};if(!c){const r=Te`<div class="${a?i+" atrisk":i}" role="${"note"===i?"note":null}"></div>`,c=document.createElement("span"),f=Te`<div role="heading" class="${i+"-title marker"}">${c}</div>`;Be(f,"h",i);let p,h=s;if(e.id?(r.id=e.id,e.removeAttribute("id")):Be(r,"issue-container",d.number?"number-"+d.number:""),l){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Te`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Te`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(c.before(e),e.append(c)),c.classList.add("issue-number"),p=t.get(u),!p){nt(`Failed to fetch issue number ${u}.`,Oo)}p&&!d.title&&(d.title=p.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Te`<span style="text-transform: none">: ${t.title}</span>`:"";return Te`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(Io.issue,d,r.id))}if(c.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=p?p.labels:[];p&&"CLOSED"===p.state&&r.classList.add("closed"),f.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const i=(s=n,parseInt(s,16)>8388607.5?"#000":"#fff");var s;return Te`<a class="respec-gh-label" style="${`background-color: #${n}; color: ${i}`}" href="${o.href}" >${r}</a >`}(e,n)),o=e.map(e=>e.name),i=Oe(o);r.length&&r.unshift(document.createTextNode(" "));if(o.length){return Te`<span class="issue-label" aria-label="${`This issue is labelled as ${i}.`}" >: ${t}${r}</span - >`}return Te`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(i),m.removeAttribute("data-number"),p&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(p.bodyHTML)),r.append(f,m);const g=Ve(f,"section").length+2;f.setAttribute("aria-level",g)}it(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Te`<p>${Mo.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${Mo.issue_summary}</h2>`)}(o)}var Bo=Object.freeze({__proto__:null,name:Io,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return tt(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,Io),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),r=await qo,{head:o}=document;o.insertBefore(Te`<style> - ${r} - </style>`,o.querySelector("link")),Fo(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const Wo="core/best-practices",Uo={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},Ho=qe(Uo),Zo=i in Uo?i:"en";var Vo=Object.freeze({__proto__:null,name:Wo,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=Be(e,"bp"),o=Te`<a class="marker self-link" href="${"#"+r}" - ><bdi lang="${Zo}">${Ho.best_practice}${t+1}</bdi></a - >`;if(n){const t=Te`<li>${o}: ${Ge(e)}</li>`;n.appendChild(t)}const i=e.closest("div");if(!i)return void e.classList.add("advisement");i.classList.add("advisement");const s=Te`${o.cloneNode(!0)}: ${e}`;i.prepend(...s.childNodes)}),e.length)t&&(t.appendChild(Te`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){nt("Using best practices summary (#bp-summary) but no best practices found.",Wo),t.remove()}}});const Yo="core/figures",Ko=qe({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var Go=Object.freeze({__proto__:null,name:Yo,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;Be(e,"fig",r),Ze(t,Te`<span class="fig-title"></span>`),t.prepend(Ko.fig,Te`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{Ue(e,"span").removeAttribute("href")}),Te`<li class="tofline"> + >`}return Te`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(i),m.removeAttribute("data-number"),p&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(p.bodyHTML)),r.append(f,m);const g=Ve(f,"section").length+2;f.setAttribute("aria-level",g)}it(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Te`<p>${Io.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${Io.issue_summary}</h2>`)}(o)}var Mo=Object.freeze({__proto__:null,name:Oo,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return tt(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,Oo),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),{head:r}=document;r.insertBefore(Te`<style> + ${Po} + </style>`,r.querySelector("link")),qo(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const Fo="core/best-practices",Bo={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},Wo=qe(Bo),Uo=i in Bo?i:"en";var Ho=Object.freeze({__proto__:null,name:Fo,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=Be(e,"bp"),o=Te`<a class="marker self-link" href="${"#"+r}" + ><bdi lang="${Uo}">${Wo.best_practice}${t+1}</bdi></a + >`;if(n){const t=Te`<li>${o}: ${Ge(e)}</li>`;n.appendChild(t)}const i=e.closest("div");if(!i)return void e.classList.add("advisement");i.classList.add("advisement");const s=Te`${o.cloneNode(!0)}: ${e}`;i.prepend(...s.childNodes)}),e.length)t&&(t.appendChild(Te`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){nt("Using best practices summary (#bp-summary) but no best practices found.",Fo),t.remove()}}});const Zo="core/figures",Vo=qe({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var Yo=Object.freeze({__proto__:null,name:Zo,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;Be(e,"fig",r),Ze(t,Te`<span class="fig-title"></span>`),t.prepend(Vo.fig,Te`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{Ue(e,"span").removeAttribute("href")}),Te`<li class="tofline"> <a class="tocxref" href="${"#"+e}">${n.childNodes}</a> - </li>`}(t.id,r));else{nt("Found a `<figure>` without a `<figcaption>`.",Yo,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Te`<h2>${Ko.list_of_figures}</h2>`,Te`<ul class="tof"> + </li>`}(t.id,r));else{nt("Found a `<figure>` without a `<figcaption>`.",Zo,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Te`<h2>${Vo.list_of_figures}</h2>`,Te`<ul class="tof"> ${e} - </ul>`))}});const Jo="core/data-cite",Xo="__SPEC__";async function Qo(e){const{key:t,frag:n,path:r}=e;let o="",i="";if(t===Xo)o=document.location.href;else{const e=await Wr(t);if(!e)return null;o=e.href,i=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:i}}function ei(e,t,n){const{href:r,title:o}=t,i=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?Ze(e,t):(t.textContent=o,e.append(t)),i){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){tt("Exporting an linked external definition is not allowed.",Jo,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,i){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function ti(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const ni=ti("#"),ri=ti("/");function oi(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:i}=r?oi(r):{key:Xo,isNormative:!1};return t.cite=i?o:"?"+o,t.citeFrag=n.replace("#",""),oi(e)}const i=r?"#"+r:ni(n),s=o||ri(n).split("#")[0],{type:a}=He(n,e),c="normative"===a,l=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(l)),isNormative:c,frag:i,path:s}}function ii(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var si=Object.freeze({__proto__:null,name:Jo,THIS_SPEC:Xo,toCiteDetails:oi,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(oi).map(async e=>({entry:e,result:await Wr(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await Br(n);r&&Object.assign(Or,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=oi(t),r=await Qo(n);if(r)ei(t,r,n);else{nt(`Couldn't find a match for "${e}"`,Jo,{elements:[t]})}}st("beforesave",ii)}});const ai="core/link-to-dfn",ci=[],li=qe({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function ui(e){const t=new Map,n=[];for(const r of To.get(e)){const{dfnFor:o="",dfnType:i="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(i)){const e=t.get(o).get(i),s="dfn"===e.localName,a="dfn"===r.localName,c=i===(e.dataset.dfnType||"dfn"),l=o===(e.dataset.dfnFor||"");if(s&&a&&c&&l){n.push(r);continue}}const s="idl"in r.dataset||"dfn"!==i?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(s,r),Be(r,"dfn",e)}return{result:t,duplicates:n}}function di(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return We(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function fi(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:i}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==i)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=pi(e)&&pi(t,n);r&&!o||Ze(e,document.createElement("code"))}(e,t),!r}function pi(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function hi(e){e.forEach(e=>{nt(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,ai,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var mi=Object.freeze({__proto__:null,name:ai,possibleExternalLinks:ci,run:async function(e){const t=function(){const e=new Qe;for(const t of To.keys()){const{result:n,duplicates:r}=ui(t);e.set(t,n),r.length>0&&tt(li.duplicateMsg(t),ai,{title:li.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=di(e,t);if(r){fi(e,r,t)||ci.push(e)}else""===e.dataset.cite?n.push(e):ci.push(e)}hi(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=oi(t);r!==Xo&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||hi(ci)}});const gi="core/contrib";var bi=Object.freeze({__proto__:null,name:gi,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void tt("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",gi)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Te(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=Oe(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await async function(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,i;if("caches"in window)try{if(o=await caches.open(r.origin),i=await o.match(n),i&&new Date(i.headers.get("Expires"))>new Date)return i}catch(e){console.error("Failed to use Cache API.",e)}const s=await fetch(n);if(!s.ok&&i)return console.warn("Returning a stale cached response for "+r),i;if(o&&s.ok){const e=s.clone(),r=new Headers(s.headers),i=new Date(Date.now()+t);r.set("Expires",i.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return s}(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return tt("Error loading contributors from GitHub.",gi),console.error(e),null}}}(t,n)}});var wi=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{Ue(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const yi=["h2","h3","h4","h5","h6"],vi=["h1",...yi],ki="core/structure",xi=qe({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function $i(e,t,{prefix:n=""}={}){let r=!1,o=0,i=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const s=Te`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=i,r=!0);let e=a.isIntro?"":r?_i(i-o+1):n+i;const c=e.split(".").length;if(1===c&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(i+=1,a.header.prepend(Te`<bdi class="secno">${e} </bdi>`)),c<=t){const n=a.header.id||a.element.id,r=Si(a.header,n),o=$i(a.subsections,t,{prefix:e});o&&r.append(o),s.append(r)}}return s}function _i(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function Ei(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!yi.includes(o.localName))continue;const i=o.textContent;Be(e,null,i),r.push({element:e,header:o,title:i,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:Ei(e,{tocIntroductory:t})})}return r}function Si(e,t){const n=Te`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=Ue(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{Ue(e,"span").removeAttribute("id")}),Te`<li class="tocline">${n}</li>`}var Ci=Object.freeze({__proto__:null,name:ki,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=vi.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(Ve(e,"section").length+1,6);e.localName!==t&&Ue(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){tt("`data-max-toc` must have a value between 0-6 (inclusive).",ki,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=$i(Ei(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Te`<nav id="toc"></nav>`,n=Te`<h2 class="introductory">${xi.toc}</h2>`;Be(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Te`<p role="navigation" id="back-to-top"> + </ul>`))}});const Ko="core/data-cite",Go="__SPEC__";async function Jo(e){const{key:t,frag:n,path:r}=e;let o="",i="";if(t===Go)o=document.location.href;else{const e=await Wr(t);if(!e)return null;o=e.href,i=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:i}}function Xo(e,t,n){const{href:r,title:o}=t,i=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?Ze(e,t):(t.textContent=o,e.append(t)),i){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){tt("Exporting an linked external definition is not allowed.",Ko,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,i){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function Qo(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const ei=Qo("#"),ti=Qo("/");function ni(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:i}=r?ni(r):{key:Go,isNormative:!1};return t.cite=i?o:"?"+o,t.citeFrag=n.replace("#",""),ni(e)}const i=r?"#"+r:ei(n),s=o||ti(n).split("#")[0],{type:a}=He(n,e),l="normative"===a,c=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(c)),isNormative:l,frag:i,path:s}}function ri(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var oi=Object.freeze({__proto__:null,name:Ko,THIS_SPEC:Go,toCiteDetails:ni,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(ni).map(async e=>({entry:e,result:await Wr(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await Br(n);r&&Object.assign(Or,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=ni(t),r=await Jo(n);if(r)Xo(t,r,n);else{nt(`Couldn't find a match for "${e}"`,Ko,{elements:[t]})}}st("beforesave",ri)}});const ii="core/link-to-dfn",si=[],ai=qe({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function li(e){const t=new Map,n=[];for(const r of Ao.get(e)){const{dfnFor:o="",dfnType:i="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(i)){const e=t.get(o).get(i),s="dfn"===e.localName,a="dfn"===r.localName,l=i===(e.dataset.dfnType||"dfn"),c=o===(e.dataset.dfnFor||"");if(s&&a&&l&&c){n.push(r);continue}}const s="idl"in r.dataset||"dfn"!==i?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(s,r),Be(r,"dfn",e)}return{result:t,duplicates:n}}function ci(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return We(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function ui(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:i}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==i)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=di(e)&&di(t,n);r&&!o||Ze(e,document.createElement("code"))}(e,t),!r}function di(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function fi(e){e.forEach(e=>{nt(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,ii,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var pi=Object.freeze({__proto__:null,name:ii,possibleExternalLinks:si,run:async function(e){const t=function(){const e=new Qe;for(const t of Ao.keys()){const{result:n,duplicates:r}=li(t);e.set(t,n),r.length>0&&tt(ai.duplicateMsg(t),ii,{title:ai.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=ci(e,t);if(r){ui(e,r,t)||si.push(e)}else""===e.dataset.cite?n.push(e):si.push(e)}fi(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=ni(t);r!==Go&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||fi(si)}});const hi="core/contrib";var mi=Object.freeze({__proto__:null,name:hi,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void tt("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",hi)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Te(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=Oe(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await async function(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,i;if("caches"in window)try{if(o=await caches.open(r.origin),i=await o.match(n),i&&new Date(i.headers.get("Expires"))>new Date)return i}catch(e){console.error("Failed to use Cache API.",e)}const s=await fetch(n);if(!s.ok&&i)return console.warn("Returning a stale cached response for "+r),i;if(o&&s.ok){const e=s.clone(),r=new Headers(s.headers),i=new Date(Date.now()+t);r.set("Expires",i.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return s}(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return tt("Error loading contributors from GitHub.",hi),console.error(e),null}}}(t,n)}});var gi=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{Ue(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const bi=["h2","h3","h4","h5","h6"],wi=["h1",...bi],yi="core/structure",vi=qe({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function ki(e,t,{prefix:n=""}={}){let r=!1,o=0,i=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const s=Te`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=i,r=!0);let e=a.isIntro?"":r?xi(i-o+1):n+i;const l=e.split(".").length;if(1===l&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(i+=1,a.header.prepend(Te`<bdi class="secno">${e} </bdi>`)),l<=t){const n=a.header.id||a.element.id,r=_i(a.header,n),o=ki(a.subsections,t,{prefix:e});o&&r.append(o),s.append(r)}}return s}function xi(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function $i(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!bi.includes(o.localName))continue;const i=o.textContent;Be(e,null,i),r.push({element:e,header:o,title:i,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:$i(e,{tocIntroductory:t})})}return r}function _i(e,t){const n=Te`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=Ue(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{Ue(e,"span").removeAttribute("id")}),Te`<li class="tocline">${n}</li>`}var Si=Object.freeze({__proto__:null,name:yi,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=wi.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(Ve(e,"section").length+1,6);e.localName!==t&&Ue(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){tt("`data-max-toc` must have a value between 0-6 (inclusive).",yi,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=ki($i(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Te`<nav id="toc"></nav>`,n=Te`<h2 class="introductory">${vi.toc}</h2>`;Be(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Te`<p role="navigation" id="back-to-top"> <a href="#title"><abbr title="Back to Top">↑</abbr></a> - </p>`;document.body.append(o)}(t)}it("toc")}});const Ai=qe({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var Li=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Te`<p><em>${Ai.informative}</em></p>`)})}});var Ti=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(Be(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Te` + </p>`;document.body.append(o)}(t)}it("toc")}});const Ei=qe({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var Ci=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Te`<p><em>${Ei.informative}</em></p>`)})}});var Ai=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(Be(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Te` <a href="${"#"+t}" class="self-link" aria-label="§"></a> - `)}}});const zi=new Map([["text/html","html"],["application/xml","xml"]]);function Ni(e,t=document){const n=zi.get(e);if(!n){const t=[...zi.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=function(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;Je(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Pe(r);const o=e.createDocumentFragment(),i=e.querySelector("meta[name='viewport']");i&&t.firstChild!==i&&o.appendChild(i);let s=e.querySelector("meta[charset], meta[content*='charset=']");s||(s=Te`<meta charset="utf-8" />`);o.appendChild(s);const a="ReSpec "+(window.respecVersion||"Developer Channel"),c=Te` + `)}}});const Li=new Map([["text/html","html"],["application/xml","xml"]]);function Ti(e,t=document){const n=Li.get(e);if(!n){const t=[...Li.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=function(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;Je(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Pe(r);const o=e.createDocumentFragment(),i=e.querySelector("meta[name='viewport']");i&&t.firstChild!==i&&o.appendChild(i);let s=e.querySelector("meta[charset], meta[content*='charset=']");s||(s=Te`<meta charset="utf-8" />`);o.appendChild(s);const a="ReSpec "+(window.respecVersion||"Developer Channel"),l=Te` <meta name="generator" content="${a}" /> - `;o.appendChild(c),t.prepend(o),it("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}n("core/exporter",{rsDocToDataURL:Ni});const Ri="ui/save-html",ji=qe({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),Di=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return Ni(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return Ni(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function Pi(e){const{id:t,href:n,fileName:r,title:o,type:i}=e;return Te`<a + `;o.appendChild(l),t.prepend(o),it("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}n("core/exporter",{rsDocToDataURL:Ti});const Ni="ui/save-html",Ri=qe({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),zi=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return Ti(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return Ti(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function Di(e){const{id:t,href:n,fileName:r,title:o,type:i}=e;return Te`<a href="${n}" id="${t}" download="${r}" type="${i}" class="respec-save-button" - onclick=${()=>Bt.closeModal()} + onclick=${()=>Ft.closeModal()} >${o}</a - >`}const Oi={async show(e){await document.respec.ready;const t=Te`<div class="respec-save-buttons"> - ${Di.map(Pi)} - </div>`;Bt.freshModal(ji.save_snapshot,t,e)}},Ii="download"in HTMLAnchorElement.prototype;let qi;Ii&&(qi=Bt.addCommand(ji.save_snapshot,(function(){if(!Ii)return;Oi.show(qi)}),"Ctrl+Shift+Alt+S","💾"));var Mi=Object.freeze({__proto__:null,name:Ri,exportDocument:function(e,t){return nt("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",Ri,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),Ni(t)}});const Fi=qe({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const Bi=document.createElement("div"),Wi=Te.bind(Bi),Ui=Bt.addCommand(`${Fi.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(Hi).forEach(t=>{e.push(t)});Wi` + >`}const ji={async show(e){await document.respec.ready;const t=Te`<div class="respec-save-buttons"> + ${zi.map(Di)} + </div>`;Ft.freshModal(Ri.save_snapshot,t,e)}},Pi="download"in HTMLAnchorElement.prototype;let Oi;Pi&&(Oi=Ft.addCommand(Ri.save_snapshot,(function(){if(!Pi)return;ji.show(Oi)}),"Ctrl+Shift+Alt+S","💾"));var Ii=Object.freeze({__proto__:null,name:Ni,exportDocument:function(e,t){return nt("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",Ni,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),Ti(t)}});const qi=qe({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const Mi=document.createElement("div"),Fi=Te.bind(Mi),Bi=Ft.addCommand(`${qi.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(Wi).forEach(t=>{e.push(t)});Fi` <p> ReSpec is a document production toolchain, with a notable focus on W3C specifications. </p> @@ -259,14 +365,53 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </thead> <tbody>${e}</tbody> </table> -`,Bt.freshModal(`${Fi.about_respec} - ${window.respecVersion}`,Bi,Ui)}),"Ctrl+Shift+Alt+A","ℹ️");function Hi({name:e,duration:t}){return Te` +`,Ft.freshModal(`${qi.about_respec} - ${window.respecVersion}`,Mi,Bi)}),"Ctrl+Shift+Alt+A","ℹ️");function Wi({name:e,duration:t}){return Te` <tr> <td><a href="${`https://github.com/w3c/respec/blob/develop/src/${e}.js`}">${e}</a></td> <td>${t}</td> </tr> - `}var Zi=Object.freeze({__proto__:null});var Vi=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});const Yi=De({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(Yi);const Ki=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return js}))).default}catch{return pt("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",Ki.then(e=>({worker:e})));const Gi=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight"),Ji=async function(){try{return(await Promise.resolve().then((function(){return Ds}))).default}catch{return ht("highlight.css")}}();async function Xi(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Gi(),languages:t},r=await Ki;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(i){const{data:{id:s,language:a,value:c}}=i;s===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:c}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:i}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${i}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=i,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Qi=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Xi),r=await Ji;document.head.appendChild(Te`<style> - ${r} - </style>`),await Promise.all(n)}});const es="core/list-sorter";function ts(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function ns(e,t){return[...e.querySelectorAll(":scope > li")].sort(ts(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function rs(e,t){return[...e.querySelectorAll(":scope > dt")].sort(ts(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:i}=t;for(;i&&i.nextSibling;){o.appendChild(i.cloneNode(!0));const{nodeType:e,nodeName:t}=i.nextSibling;if(e===n&&t===r)break;i=i.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var os=Object.freeze({__proto__:null,name:es,sortListItems:ns,sortDefinitionTerms:rs,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=rs(t,n);break;case"ol":case"ul":e=ns(t,n);break;default:nt(`ReSpec can't sort ${t.localName} elements.`,es,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});const is=async function(){try{return(await Promise.resolve().then((function(){return Ps}))).default}catch{return ht("var.css")}}();function ss(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=Ie(e.textContent),n=e.closest("section"),r=cs(e),o=[...n.querySelectorAll("var")].filter(e=>Ie(e.textContent)===t&&e.closest("section")===n),i=o[0].classList.contains("respec-hl");if(as.set(r,i),i)return o.forEach(e=>ls(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=cs(t);n.forEach(t=>ls(t,e)),[...as.keys()].forEach(e=>as.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const as=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function cs(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===as.get("respec-hl-c1")?"respec-hl-c1":[...as.keys()].find(e=>as.get(e))||"respec-hl-c1"}function ls(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var us=Object.freeze({__proto__:null,name:"core/highlight-vars",run:async function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=await is,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",ss)),st("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(ls)})}});function ds(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Te` + `}var Ui=Object.freeze({__proto__:null});var Hi=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});var Zi=String.raw`.hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa} +.hljs-comment,.hljs-quote{color:#717277;font-style:italic} +.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4} +.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#ca4706;font-weight:700} +.hljs-literal{color:#0b76c5} +.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#42803c} +.hljs-built_in,.hljs-class .hljs-title{color:#9a6a01} +.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801} +.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#336ae3} +.hljs-emphasis{font-style:italic} +.hljs-strong{font-weight:700} +.hljs-link{text-decoration:underline}`;async function Vi(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-dini.js",document.baseURI).href));return await t.text()}const Yi=je({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(Yi);const Ki=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return Ts}))).default}catch{return Vi("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",Ki.then(e=>({worker:e})));const Gi=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight");async function Ji(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Gi(),languages:t},r=await Ki;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(i){const{data:{id:s,language:a,value:l}}=i;s===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:l}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:i}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${i}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=i,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Xi=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Ji);document.head.appendChild(Te`<style> + ${Zi} + </style>`),await Promise.all(n)}});const Qi="core/list-sorter";function es(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function ts(e,t){return[...e.querySelectorAll(":scope > li")].sort(es(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function ns(e,t){return[...e.querySelectorAll(":scope > dt")].sort(es(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:i}=t;for(;i&&i.nextSibling;){o.appendChild(i.cloneNode(!0));const{nodeType:e,nodeName:t}=i.nextSibling;if(e===n&&t===r)break;i=i.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var rs=Object.freeze({__proto__:null,name:Qi,sortListItems:ts,sortDefinitionTerms:ns,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=ns(t,n);break;case"ol":case"ul":e=ts(t,n);break;default:nt(`ReSpec can't sort ${t.localName} elements.`,Qi,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});var os=String.raw`var:hover{text-decoration:underline;cursor:pointer} +var.respec-hl{color:var(--color,#000);background-color:var(--bg-color);box-shadow:0 0 0 2px var(--bg-color)} +var.respec-hl-c1{--bg-color:#f4d200} +var.respec-hl-c2{--bg-color:#ff87a2} +var.respec-hl-c3{--bg-color:#96e885} +var.respec-hl-c4{--bg-color:#3eeed2} +var.respec-hl-c5{--bg-color:#eacfb6} +var.respec-hl-c6{--bg-color:#82ddff} +var.respec-hl-c7{--bg-color:#ffbcf2} +@media print{ +var.respec-hl{background:0 0;color:#000;box-shadow:unset} +}`;function is(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=Ie(e.textContent),n=e.closest("section"),r=as(e),o=[...n.querySelectorAll("var")].filter(e=>Ie(e.textContent)===t&&e.closest("section")===n),i=o[0].classList.contains("respec-hl");if(ss.set(r,i),i)return o.forEach(e=>ls(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=as(t);n.forEach(t=>ls(t,e)),[...ss.keys()].forEach(e=>ss.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const ss=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function as(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===ss.get("respec-hl-c1")?"respec-hl-c1":[...ss.keys()].find(e=>ss.get(e))||"respec-hl-c1"}function ls(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var cs=Object.freeze({__proto__:null,name:"core/highlight-vars",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=os,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",is)),st("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(ls)})}});var us=String.raw`dfn{cursor:pointer} +.dfn-panel{position:absolute;z-index:35;min-width:300px;max-width:500px;padding:.5em .75em;margin-top:.6em;font:small Helvetica Neue,sans-serif,Droid Sans Fallback;background:#fff;color:#000;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px} +.dfn-panel:not(.docked)>.caret{position:absolute;top:-9px} +.dfn-panel:not(.docked)>.caret::after,.dfn-panel:not(.docked)>.caret::before{content:"";position:absolute;border:10px solid transparent;border-top:0;border-bottom:10px solid #fff;top:0} +.dfn-panel:not(.docked)>.caret::before{border-bottom:9px solid #a2a9b1} +.dfn-panel *{margin:0} +.dfn-panel b{display:block;color:#000;margin-top:.25em} +.dfn-panel ul a[href]{color:#333} +.dfn-panel>div{display:flex} +.dfn-panel a.self-link{font-weight:700;margin-right:auto} +.dfn-panel .marker{padding:.1em;margin-left:.5em;border-radius:.2em;text-align:center;white-space:nowrap;font-size:90%;color:#040b1c} +.dfn-panel .marker.dfn-exported{background:#d1edfd;box-shadow:0 0 0 .125em #1ca5f940} +.dfn-panel .marker.idl-block{background:#8ccbf2;box-shadow:0 0 0 .125em #0670b161} +.dfn-panel a:not(:hover){text-decoration:none!important;border-bottom:none!important} +.dfn-panel a[href]:hover{border-bottom-width:1px} +.dfn-panel ul{padding:0} +.dfn-panel li{margin-left:1em} +.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}`;function ds(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Te` <aside class="dfn-panel" id="${o}" hidden> <span class="caret"></span> <div> @@ -291,11 +436,15 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e ${[...n].map(o)} </ul>`}(t,r)} </aside> - `}var fs=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return Os}))).default}catch{return ht("dfn-panel.css")}}();document.head.insertBefore(Te`<style> - ${e} - </style>`,document.querySelector("link"));const t=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),n=document.createDocumentFragment();for(const e of t)n.append(ds(e));document.body.append(n);const r=document.createElement("script");r.id="respec-dfn-panel",r.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Is}))).default}catch{return pt("./src/core/dfn-panel.runtime.js")}}(),document.body.append(r)}});const ps=async function(){try{return(await Promise.resolve().then((function(){return qs}))).default}catch{return ht("datatype.css")}}();var hs=Object.freeze({__proto__:null,name:"core/data-type",run:async function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=await ps,document.head.appendChild(t);let n=null;const r=new Map,o=document.querySelectorAll("section var");for(const e of o){const t=e.closest("section");if(n!==t&&(n=t,r.clear()),e.dataset.type){r.set(e.textContent.trim(),e.dataset.type);continue}const o=r.get(e.textContent.trim());o&&(e.dataset.type=o)}}});const ms=async function(){try{return(await Promise.resolve().then((function(){return Ms}))).default}catch{return ht("algorithms.css")}}();var gs=Object.freeze({__proto__:null,name:"core/algorithms",run:async function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=await ms,document.head.appendChild(e)}}});const bs="core/anchor-expander";function ws(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void tt(`Found matching element "${t}", but it has no title or marker.`,bs,{title:"Missing title.",elements:[n]})}const o=Ge(r);n.append(...o.childNodes),n.classList.add("box-ref")}function ys(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void tt(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,bs,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...Ge(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const i=r.querySelector(".fig-title");!n.hasAttribute("title")&&i&&(n.title=Ie(i.textContent))}function vs(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)ks(r,n),xs(r,n);else{n.textContent=n.getAttribute("href");tt("Found matching section, but the section was lacking a heading element.",bs,{title:`No matching id in document: "${t}".`,elements:[n]})}}function ks(e,t){const n=e.querySelector(".self-link"),r=[...Ge(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=Ue(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function xs(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var $s=Object.freeze({__proto__:null,name:bs,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":ks(n,t);break;case"section":vs(n,e,t);break;case"figure":ys(n,e,t);break;case"aside":case"div":ws(n,e,t);break;default:t.textContent=t.getAttribute("href");tt("ReSpec doesn't support expanding this kind of reference.",bs,{title:`Can't expand "#${e}".`,elements:[t]})}xs(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");tt(`Couldn't expand inline reference. The id "${e}" is not in the document.`,bs,{title:`No matching id in document: ${e}.`,elements:[t]})}}}});const _s=new Promise((e,t)=>{});qe({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});const Es="rs-changelog",Ss=class extends HTMLElement{constructor(){super(),this.props={from:this.getAttribute("from"),to:this.getAttribute("to")||"HEAD",filter:"function"==typeof window[this.getAttribute("filter")]?window[this.getAttribute("filter")]:()=>!0}}connectedCallback(){const{from:e,to:t,filter:n}=this.props;Te.bind(this)` + `}var fs=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){document.head.insertBefore(Te`<style> + ${us} + </style>`,document.querySelector("link"));const e=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),t=document.createDocumentFragment();for(const n of e)t.append(ds(n));document.body.append(t);const n=document.createElement("script");n.id="respec-dfn-panel",n.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Ns}))).default}catch{return Vi("./src/core/dfn-panel.runtime.js")}}(),document.body.append(n)}});var ps=String.raw`var{position:relative;cursor:pointer} +var[data-type]::after,var[data-type]::before{position:absolute;left:50%;top:-6px;opacity:0;transition:opacity .4s;pointer-events:none} +var[data-type]::before{content:"";transform:translateX(-50%);border-width:4px 6px 0 6px;border-style:solid;border-color:transparent;border-top-color:#000} +var[data-type]::after{content:attr(data-type);transform:translateX(-50%) translateY(-100%);background:#000;text-align:center;font-family:"Dank Mono","Fira Code",monospace;font-style:normal;padding:6px;border-radius:3px;color:#daca88;text-indent:0;font-weight:400} +var[data-type]:hover::after,var[data-type]:hover::before{opacity:1}`;var hs=Object.freeze({__proto__:null,name:"core/data-type",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=ps,document.head.appendChild(t);let n=null;const r=new Map,o=document.querySelectorAll("section var");for(const e of o){const t=e.closest("section");if(n!==t&&(n=t,r.clear()),e.dataset.type){r.set(e.textContent.trim(),e.dataset.type);continue}const o=r.get(e.textContent.trim());o&&(e.dataset.type=o)}}});var ms=String.raw`.assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}`;var gs=Object.freeze({__proto__:null,name:"core/algorithms",run:function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=ms,document.head.appendChild(e)}}});const bs="core/anchor-expander";function ws(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void tt(`Found matching element "${t}", but it has no title or marker.`,bs,{title:"Missing title.",elements:[n]})}const o=Ge(r);n.append(...o.childNodes),n.classList.add("box-ref")}function ys(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void tt(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,bs,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...Ge(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const i=r.querySelector(".fig-title");!n.hasAttribute("title")&&i&&(n.title=Ie(i.textContent))}function vs(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)ks(r,n),xs(r,n);else{n.textContent=n.getAttribute("href");tt("Found matching section, but the section was lacking a heading element.",bs,{title:`No matching id in document: "${t}".`,elements:[n]})}}function ks(e,t){const n=e.querySelector(".self-link"),r=[...Ge(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=Ue(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function xs(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var $s=Object.freeze({__proto__:null,name:bs,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":ks(n,t);break;case"section":vs(n,e,t);break;case"figure":ys(n,e,t);break;case"aside":case"div":ws(n,e,t);break;default:t.textContent=t.getAttribute("href");tt("ReSpec doesn't support expanding this kind of reference.",bs,{title:`Can't expand "#${e}".`,elements:[t]})}xs(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");tt(`Couldn't expand inline reference. The id "${e}" is not in the document.`,bs,{title:`No matching id in document: ${e}.`,elements:[t]})}}}});const _s=new Promise((e,t)=>{});qe({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});const Ss="rs-changelog",Es=class extends HTMLElement{constructor(){super(),this.props={from:this.getAttribute("from"),to:this.getAttribute("to")||"HEAD",filter:"function"==typeof window[this.getAttribute("filter")]?window[this.getAttribute("filter")]:()=>!0}}connectedCallback(){const{from:e,to:t,filter:n}=this.props;Te.bind(this)` <ul> - ${{any:Cs(e,t,n).then(e=>async function(e){const{repoURL:t}=await _s;return e.map(e=>{const[n,r=null]=e.message.split(/\(#(\d+)\)/,2),o=`${t}commit/${e.hash}`,i=r&&Te` (<a href="${r?`${t}pull/${r}`:null}">#${r}</a>)`;return Te`<li><a href="${o}">${n.trim()}</a>${i}</li>`})}(e)).catch(e=>tt(e.message,Es,{elements:[this]})).finally(()=>{this.dispatchEvent(new CustomEvent("done"))}),placeholder:"Loading list of commits..."}} + ${{any:Cs(e,t,n).then(e=>async function(e){const{repoURL:t}=await _s;return e.map(e=>{const[n,r=null]=e.message.split(/\(#(\d+)\)/,2),o=`${t}commit/${e.hash}`,i=r&&Te` (<a href="${r?`${t}pull/${r}`:null}">#${r}</a>)`;return Te`<li><a href="${o}">${n.trim()}</a>${i}</li>`})}(e)).catch(e=>tt(e.message,Ss,{elements:[this]})).finally(()=>{this.dispatchEvent(new CustomEvent("done"))}),placeholder:"Loading list of commits..."}} </ul> - `}};async function Cs(e,t,n){let r;try{const o=await _s;if(!o)throw new Error("`respecConfig.github` is not set");const i=new URL("commits",`${o.apiBase}/${o.fullName}/`);i.searchParams.set("from",e),i.searchParams.set("to",t);const s=await fetch(i.href);if(!s.ok)throw new Error(`Request to ${i} failed with status code ${s.status}`);if(r=await s.json(),!r.length)throw new Error(`No commits between ${e}..${t}.`);r=r.filter(n)}catch(e){const t="Error loading commits from GitHub. "+e.message;throw console.error(e),new Error(t)}return r}const As=[Object.freeze({__proto__:null,name:Es,element:Ss})];var Ls=Object.freeze({__proto__:null,name:"core/custom-elements/index",run:async function(){As.forEach(e=>{customElements.define(e.name,e.element)});const e=As.map(e=>e.name).join(", "),t=[...document.querySelectorAll(e)].map(e=>new Promise(t=>e.addEventListener("done",t,{once:!0})));await Promise.all(t)}}),Ts=Object.freeze({__proto__:null,default:'.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0}\n#respec-ui{position:fixed;display:flex;flex-direction:row-reverse;top:20px;right:20px;width:202px;text-align:right;z-index:9000}\n#respec-pill,.respec-info-button{background:#fff;height:2.5em;color:#787878;border:1px solid #ccc;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5)}\n.respec-info-button{border:none;opacity:.75;border-radius:2em;margin-right:1em;min-width:3.5em}\n.respec-info-button:focus,.respec-info-button:hover{opacity:1;transition:opacity .2s}\n#respec-pill:disabled{font-size:2.8px;text-indent:-9999em;border-top:1.1em solid rgba(40,40,40,.2);border-right:1.1em solid rgba(40,40,40,.2);border-bottom:1.1em solid rgba(40,40,40,.2);border-left:1.1em solid #fff;transform:translateZ(0);animation:respec-spin .5s infinite linear;box-shadow:none}\n#respec-pill:disabled,#respec-pill:disabled:after{border-radius:50%;width:10em;height:10em}\n@keyframes respec-spin{\n0%{transform:rotate(0)}\n100%{transform:rotate(360deg)}\n}\n.respec-hidden{visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s linear}\n.respec-visible{visibility:visible;opacity:1;transition:opacity .2s linear}\n#respec-pill:focus,#respec-pill:hover{color:#000;background-color:#f5f5f5;transition:color .2s}\n#respec-menu{position:absolute;margin:0;padding:0;font-family:sans-serif;background:#fff;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5);width:200px;display:none;text-align:left;margin-top:32px;font-size:.8em}\n#respec-menu:not([hidden]){display:block}\n#respec-menu li{list-style-type:none;margin:0;padding:0}\n.respec-save-buttons{display:grid;grid-template-columns:repeat(auto-fill,minmax(47%,2fr));grid-gap:0.5cm;padding:.5cm}\n.respec-save-button:link{padding-top:16px;color:#f0f0f0;background:#2a5aa8;justify-self:stretch;height:1cm;text-decoration:none;text-align:center;font-size:inherit;border:none;border-radius:.2cm}\n.respec-save-button:link:hover{color:#fff;background:#2a5aa8;padding:0;margin:0;border:0;padding-top:16px}\n.respec-save-button:link:focus{background:#193766}\n#respec-pill:focus,#respec-ui button:focus,.respec-option:focus{outline:0;outline-style:none}\n#respec-pill-error{background-color:red;color:#fff}\n#respec-pill-warning{background-color:orange;color:#fff}\n.respec-error-list,.respec-warning-list{margin:0;padding:0;list-style:none;font-family:sans-serif;background-color:#fffbe6;font-size:.85em}\n.respec-error-list>li,.respec-warning-list>li{padding:.4em .7em}\n.respec-warning-list>li::before{content:"⚠️";padding-right:.5em}\n.respec-error-list p,.respec-warning-list p{padding:0;margin:0}\n.respec-warning-list li{color:#5c3b00;border-bottom:thin solid #fff5c2}\n.respec-error-list,.respec-error-list li{background-color:#fff0f0}\n.respec-error-list li::before{content:"💥";padding-right:.5em}\n.respec-error-list li{padding:.4em .7em;color:#5c3b00;border-bottom:thin solid #ffd7d7}\n.respec-error-list li>p{margin:0;padding:0;display:inline-block}\n.respec-error-list li>p:first-child,.respec-warning-list li>p:first-child{display:inline}\n.respec-error-list>li li,.respec-warning-list>li li{margin:0;list-style:disc}\n#respec-overlay{display:block;position:fixed;z-index:10000;top:0;left:0;height:100%;width:100%;background:#000}\n.respec-show-overlay{transition:opacity .2s linear;opacity:.5}\n.respec-hide-overlay{transition:opacity .2s linear;opacity:0}\n.respec-modal{display:block;position:fixed;z-index:11000;margin:auto;top:10%;background:#fff;border:5px solid #666;min-width:20%;width:79%;padding:0;max-height:80%;overflow-y:auto;margin:0 -.5cm}\n@media screen and (min-width:78em){\n.respec-modal{width:62%}\n}\n.respec-modal h3{margin:0;padding:.2em;text-align:center;color:#000;background:linear-gradient(to bottom,#eee 0,#eee 50%,#ccc 100%);font-size:1em}\n.respec-modal .inside div p{padding-left:1cm}\n#respec-menu button.respec-option{background:#fff;padding:0 .2cm;border:none;width:100%;text-align:left;font-size:inherit;padding:1.2em 1.2em}\n#respec-menu button.respec-option:hover,#respec-menu button:focus{background-color:#eee}\n.respec-cmd-icon{padding-right:.5em}\n#respec-ui button.respec-option:last-child{border:none;border-radius:inherit}\n.respec-button-copy-paste{position:absolute;height:28px;width:40px;cursor:pointer;background-image:linear-gradient(#fcfcfc,#eee);border:1px solid #90b8de;border-left:0;border-radius:0 0 3px 0;-webkit-user-select:none;user-select:none;-webkit-appearance:none;top:0;left:127px}\n#specref-ui{margin:0 2%;margin-bottom:.5cm}\n#specref-ui header{font-size:.7em;background-color:#eee;text-align:center;padding:.2cm;margin-bottom:.5cm;border-radius:0 0 .2cm .2cm}\n#specref-ui header h1{padding:0;margin:0;color:#000}\n#specref-ui p{padding:0;margin:0;font-size:.8em;text-align:center}\n#specref-ui p.state{margin:1cm}\n#specref-ui .searchcomponent{font-size:16px;display:grid;grid-template-columns:auto 2cm}\n#specref-ui button,#specref-ui input{border:0;padding:6px 12px}\n#specref-ui label{font-size:.6em;grid-column-end:3;text-align:right;grid-column-start:1}\n#specref-ui input[type=search]{-webkit-appearance:none;font-size:16px;border-radius:.1cm 0 0 .1cm;border:1px solid #ccc}\n#specref-ui button[type=submit]{color:#fff;border-radius:0 .1cm .1cm 0;background-color:#337ab7}\n#specref-ui button[type=submit]:hover{background-color:#286090;border-color:#204d74}\n#specref-ui .result-stats{margin:0;padding:0;color:grey;font-size:.7em;font-weight:700}\n#specref-ui .specref-results{font-size:.8em}\n#specref-ui .specref-results dd+dt{margin-top:.51cm}\n#specref-ui .specref-results a{text-transform:capitalize}\n#specref-ui .specref-results .authors{display:block;color:#006621}\n@media print{\n#respec-ui{display:none}\n}\n#xref-ui{width:100%;min-height:550px;height:100%;overflow:hidden;padding:0;margin:0;border:0}\n#xref-ui:not(.ready){background:url("https://respec.org/xref/loader.gif") no-repeat center}\n#xref-ui+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}'}),zs=Object.freeze({__proto__:null,default:'@keyframes pop{\n0%{transform:scale(1,1)}\n25%{transform:scale(1.25,1.25);opacity:.75}\n100%{transform:scale(1,1)}\n}\n.hljs{background:0 0!important}\na abbr,h1 abbr,h2 abbr,h3 abbr,h4 abbr,h5 abbr,h6 abbr{border:none}\ndfn{font-weight:700}\na.internalDFN{color:inherit;border-bottom:1px solid #99c;text-decoration:none}\na.externalDFN{color:inherit;border-bottom:1px dotted #ccc;text-decoration:none}\na.bibref{text-decoration:none}\n.respec-offending-element:target{animation:pop .25s ease-in-out 0s 1}\n.respec-offending-element,a[href].respec-offending-element{text-decoration:red wavy underline}\n@supports not (text-decoration:red wavy underline){\n.respec-offending-element:not(pre){display:inline-block}\n.respec-offending-element{background:url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=) bottom repeat-x}\n}\n#references :target{background:#eaf3ff;animation:pop .4s ease-in-out 0s 1}\ncite .bibref{font-style:normal}\ncode{color:#c63501}\nth code{color:inherit}\na[href].orcid{padding-left:4px;padding-right:4px}\na[href].orcid>svg{margin-bottom:-2px}\n.toc a,.tof a{text-decoration:none}\na .figno,a .secno{color:#000}\nol.tof,ul.tof{list-style:none outside none}\n.caption{margin-top:.5em;font-style:italic}\ntable.simple{border-spacing:0;border-collapse:collapse;border-bottom:3px solid #005a9c}\n.simple th{background:#005a9c;color:#fff;padding:3px 5px;text-align:left}\n.simple th a{color:#fff;padding:3px 5px;text-align:left}\n.simple th[scope=row]{background:inherit;color:inherit;border-top:1px solid #ddd}\n.simple td{padding:3px 10px;border-top:1px solid #ddd}\n.simple tr:nth-child(even){background:#f0f6ff}\n.section dd>p:first-child{margin-top:0}\n.section dd>p:last-child{margin-bottom:0}\n.section dd{margin-bottom:1em}\n.section dl.attrs dd,.section dl.eldef dd{margin-bottom:0}\n#issue-summary>ul{column-count:2}\n#issue-summary li{list-style:none;display:inline-block}\ndetails.respec-tests-details{margin-left:1em;display:inline-block;vertical-align:top}\ndetails.respec-tests-details>*{padding-right:2em}\ndetails.respec-tests-details[open]{z-index:999999;position:absolute;border:thin solid #cad3e2;border-radius:.3em;background-color:#fff;padding-bottom:.5em}\ndetails.respec-tests-details[open]>summary{border-bottom:thin solid #cad3e2;padding-left:1em;margin-bottom:1em;line-height:2em}\ndetails.respec-tests-details>ul{width:100%;margin-top:-.3em}\ndetails.respec-tests-details>li{padding-left:1em}\na[href].self-link:hover{opacity:1;text-decoration:none;background-color:transparent}\nh2,h3,h4,h5,h6{position:relative}\naside.example .marker>a.self-link{color:inherit}\nh2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{border:none;color:inherit;font-size:83%;height:2em;left:-1.6em;opacity:.5;position:absolute;text-align:center;text-decoration:none;top:0;transition:opacity .2s;width:2em}\nh2>a.self-link::before,h3>a.self-link::before,h4>a.self-link::before,h5>a.self-link::before,h6>a.self-link::before{content:"§";display:block}\n@media (max-width:767px){\ndd{margin-left:0}\nh2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left:auto;top:auto}\n}\n@media print{\n.removeOnSave{display:none}\n}'}),Ns=Object.freeze({__proto__:null,default:"span.example-title{text-transform:none}\naside.example,div.example,div.illegal-example{padding:.5em;margin:1em 0;position:relative;clear:both}\ndiv.illegal-example{color:red}\ndiv.illegal-example p{color:#000}\naside.example,div.example{padding:.5em;border-left-width:.5em;border-left-style:solid;border-color:#e0cb52;background:#fcfaee}\naside.example div.example{border-left-width:.1em;border-color:#999;background:#fff}\naside.example div.example span.example-title{color:#999}\n.example pre{background-color:rgba(0,0,0,.03)}"}),Rs=Object.freeze({__proto__:null,default:'.issue-label{text-transform:initial}\n.warning>p:first-child{margin-top:0}\n.warning{padding:.5em;border-left-width:.5em;border-left-style:solid}\nspan.warning{padding:.1em .5em .15em}\n.issue.closed span.issue-number{text-decoration:line-through}\n.warning{border-color:#f11;border-width:.2em;border-style:solid;background:#fbe9e9}\n.warning-title:before{content:"⚠";font-size:1.3em;float:left;padding-right:.3em;margin-top:-.3em}\nli.task-list-item{list-style:none}\ninput.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle}\n.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}'}),js=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),Ds=Object.freeze({__proto__:null,default:".hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa}\n.hljs-comment,.hljs-quote{color:#717277;font-style:italic}\n.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}\n.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#ca4706;font-weight:700}\n.hljs-literal{color:#0b76c5}\n.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#42803c}\n.hljs-built_in,.hljs-class .hljs-title{color:#9a6a01}\n.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}\n.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#336ae3}\n.hljs-emphasis{font-style:italic}\n.hljs-strong{font-weight:700}\n.hljs-link{text-decoration:underline}"}),Ps=Object.freeze({__proto__:null,default:"var:hover{text-decoration:underline;cursor:pointer}\nvar.respec-hl{color:var(--color,#000);background-color:var(--bg-color);box-shadow:0 0 0 2px var(--bg-color)}\nvar.respec-hl-c1{--bg-color:#f4d200}\nvar.respec-hl-c2{--bg-color:#ff87a2}\nvar.respec-hl-c3{--bg-color:#96e885}\nvar.respec-hl-c4{--bg-color:#3eeed2}\nvar.respec-hl-c5{--bg-color:#eacfb6}\nvar.respec-hl-c6{--bg-color:#82ddff}\nvar.respec-hl-c7{--bg-color:#ffbcf2}\n@media print{\nvar.respec-hl{background:0 0;color:#000;box-shadow:unset}\n}"}),Os=Object.freeze({__proto__:null,default:'dfn{cursor:pointer}\n.dfn-panel{position:absolute;z-index:35;min-width:300px;max-width:500px;padding:.5em .75em;margin-top:.6em;font:small Helvetica Neue,sans-serif,Droid Sans Fallback;background:#fff;color:#000;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px}\n.dfn-panel:not(.docked)>.caret{position:absolute;top:-9px}\n.dfn-panel:not(.docked)>.caret::after,.dfn-panel:not(.docked)>.caret::before{content:"";position:absolute;border:10px solid transparent;border-top:0;border-bottom:10px solid #fff;top:0}\n.dfn-panel:not(.docked)>.caret::before{border-bottom:9px solid #a2a9b1}\n.dfn-panel *{margin:0}\n.dfn-panel b{display:block;color:#000;margin-top:.25em}\n.dfn-panel ul a[href]{color:#333}\n.dfn-panel>div{display:flex}\n.dfn-panel a.self-link{font-weight:700;margin-right:auto}\n.dfn-panel .marker{padding:.1em;margin-left:.5em;border-radius:.2em;text-align:center;white-space:nowrap;font-size:90%;color:#040b1c}\n.dfn-panel .marker.dfn-exported{background:#d1edfd;box-shadow:0 0 0 .125em #1ca5f940}\n.dfn-panel .marker.idl-block{background:#8ccbf2;box-shadow:0 0 0 .125em #0670b161}\n.dfn-panel a:not(:hover){text-decoration:none!important;border-bottom:none!important}\n.dfn-panel a[href]:hover{border-bottom-width:1px}\n.dfn-panel ul{padding:0}\n.dfn-panel li{margin-left:1em}\n.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}'}),Is=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'}),qs=Object.freeze({__proto__:null,default:'var{position:relative;cursor:pointer}\nvar[data-type]::after,var[data-type]::before{position:absolute;left:50%;top:-6px;opacity:0;transition:opacity .4s;pointer-events:none}\nvar[data-type]::before{content:"";transform:translateX(-50%);border-width:4px 6px 0 6px;border-style:solid;border-color:transparent;border-top-color:#000}\nvar[data-type]::after{content:attr(data-type);transform:translateX(-50%) translateY(-100%);background:#000;text-align:center;font-family:"Dank Mono","Fira Code",monospace;font-style:normal;padding:6px;border-radius:3px;color:#daca88;text-indent:0;font-weight:400}\nvar[data-type]:hover::after,var[data-type]:hover::before{opacity:1}'}),Ms=Object.freeze({__proto__:null,default:".assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}"})}(); + `}};async function Cs(e,t,n){let r;try{const o=await _s;if(!o)throw new Error("`respecConfig.github` is not set");const i=new URL("commits",`${o.apiBase}/${o.fullName}/`);i.searchParams.set("from",e),i.searchParams.set("to",t);const s=await fetch(i.href);if(!s.ok)throw new Error(`Request to ${i} failed with status code ${s.status}`);if(r=await s.json(),!r.length)throw new Error(`No commits between ${e}..${t}.`);r=r.filter(n)}catch(e){const t="Error loading commits from GitHub. "+e.message;throw console.error(e),new Error(t)}return r}const As=[Object.freeze({__proto__:null,name:Ss,element:Es})];var Ls=Object.freeze({__proto__:null,name:"core/custom-elements/index",run:async function(){As.forEach(e=>{customElements.define(e.name,e.element)});const e=As.map(e=>e.name).join(", "),t=[...document.querySelectorAll(e)].map(e=>new Promise(t=>e.addEventListener("done",t,{once:!0})));await Promise.all(t)}}),Ts=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),Ns=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'})}(); //# sourceMappingURL=respec-dini.js.map diff --git a/builds/respec-dini.js.map b/builds/respec-dini.js.map index 57722ff6ee..387056d850 100644 --- a/builds/respec-dini.js.map +++ b/builds/respec-dini.js.map @@ -1 +1 @@ -{"version":3,"file":"respec-dini.js","sources":["../profiles/dini.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/core/text-loader.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/dini/defaults.js","../src/core/style.js","../src/dini/style.js","../src/core/data-include.js","../src/core/title.js","../src/core/templates/show-link.js","../src/core/templates/show-logo.js","../src/core/templates/show-people.js","../src/dini/templates/headers.js","../src/dini/headers.js","../src/dini/abstract.js","../src/core/data-transform.js","../src/core/data-abbr.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/dini/conformance.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/core/examples.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/core/exporter.js","../src/ui/save-html.js","../src/ui/about-respec.js","../src/core/seo.js","../src/core/worker.js","../src/core/highlight.js","../src/core/list-sorter.js","../src/core/highlight-vars.js","../src/core/dfn-panel.js","../src/core/data-type.js","../src/core/algorithms.js","../src/core/anchor-expander.js","../src/core/github.js","../src/core/custom-elements/rs-changelog.js","../src/core/custom-elements/index.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/dini/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/dini/style.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/title.js\"),\n import(\"../src/dini/headers.js\"),\n import(\"../src/dini/abstract.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/data-abbr.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/dini/conformance.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/data-type.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n import(\"../src/core/custom-elements/index.js\"),\n /* Linter must be the last thing to run */\n import(\"../src/core/linter.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n/* global define */\n\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n\n/**\n * @param {string} fileName\n */\nexport async function fetchAsset(fileName) {\n return fetchBase(`assets/${fileName}`);\n}\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n/* jshint laxcomma:true */\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/ui.css\")).default;\n } catch {\n return fetchAsset(\"ui.css\");\n }\n}\n\nasync function insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = await loadStyle();\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Sets the defaults for DINI specs\n */\nexport const name = \"dini/defaults\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\n\nlinter.register(privsecSectionRule);\n\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n [\n \"cc-by-sa\",\n {\n name:\n \"Creative Commons Attribution-ShareAlike 4.0 International Public License\",\n short: \"CC-BY-SA\",\n url: \"https://creativecommons.org/licenses/by-sa/4.0/legalcode\",\n },\n ],\n]);\n\nconst diniDefaults = {\n format: \"markdown\",\n isED: false,\n isNoTrack: true,\n isPR: false,\n lint: {\n \"privsec-section\": true,\n \"wpt-tests-exist\": false,\n },\n logos: [],\n prependW3C: false,\n doJsonLd: false,\n license: \"cc-by\",\n shortName: \"X\",\n showPreviousVersion: false,\n};\n\nfunction computeProps(conf) {\n return {\n licenseInfo: licenses.get(conf.license),\n };\n}\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...diniDefaults.lint,\n ...conf.lint,\n };\n Object.assign(conf, {\n ...coreDefaults,\n ...diniDefaults,\n ...conf,\n lint,\n });\n\n // computed properties\n Object.assign(conf, computeProps(conf));\n}\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport { fetchAsset } from \"./text-loader.js\";\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/respec.css\")).default;\n } catch {\n return fetchAsset(\"respec.css\");\n }\n}\n\nasync function insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = await loadStyle();\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport async function run(conf) {\n if (conf.noReSpecCSS) {\n (await styleElement).remove();\n }\n}\n","// @ts-check\n/* jshint strict: true, browser:true, jquery: true */\n// Module dini/style\n// Inserts a link to the appropriate W3C style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"dini/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n if (location.hash) {\n script.addEventListener(\n \"load\",\n () => {\n window.location.href = location.hash;\n },\n { once: true }\n );\n }\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createBaseStyle() {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = \"https://www.w3.org/StyleSheets/TR/2016/base.css\";\n link.classList.add(\"removeOnSave\");\n return link;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C styles and scripts.\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preload\", // all specs include on base.css.\n href: \"https://www.w3.org/StyleSheets/TR/2016/base.css\",\n as: \"style\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// Opportunistically apply base style\nelements.appendChild(createBaseStyle());\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\nfunction styleMover(linkURL) {\n return exportDoc => {\n const w3cStyle = exportDoc.querySelector(`head link[href=\"${linkURL}\"]`);\n exportDoc.querySelector(\"head\").append(w3cStyle);\n };\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'base'.\";\n conf.specStatus = \"base\";\n showWarning(msg, name);\n }\n\n let styleFile = \"\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"UNOFFICIAL\":\n styleFile = \"W3C-UD\";\n break;\n case \"BASE\":\n styleFile = \"base.css\";\n break;\n }\n\n // Attach W3C fixup script after we are done.\n if (!conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, \"2016\");\n },\n { once: true }\n );\n }\n const finalStyleURL = `https://www.w3.org/StyleSheets/TR/2016/${styleFile}`;\n linkCSS(document, finalStyleURL);\n // Make sure the W3C stylesheet is the last stylesheet, as required by W3C Pub Rules.\n const moveStyle = styleMover(finalStyleURL);\n sub(\"beforesave\", moveStyle);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","/**\n * This module handles the creation of the h1#title of a spec and\n * makes sure the <title> always matches the h1.\n *\n * If no h1#title is included, then the <title> becomes the h1#title.\n *\n * When a h1#title is included, it always takes precedence over the\n * <title> of a spec. An error will be displayed in case of\n * any mismatch.\n *\n */\n\nimport { getIntlData, norm, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/title\";\n\nconst localizationStrings = {\n en: {\n default_title: \"No Title\",\n },\n de: {\n default_title: \"Kein Titel\",\n },\n zh: {\n default_title: \"无标题\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n /** @type {HTMLElement} */\n const h1Elem =\n document.querySelector(\"h1#title\") || html`<h1 id=\"title\"></h1>`;\n\n // check existing element is ok to use\n if (h1Elem.isConnected && h1Elem.textContent.trim() === \"\") {\n const msg =\n \"The document is missing a title, so using a default title. \" +\n \"To fix this, please give your document a `<title>`. \" +\n \"If you need special markup in the document's title, \" +\n 'please use a `<h1 id=\"title\">`.';\n const title = \"Document is missing a title\";\n showError(msg, name, { title, elements: [h1Elem] });\n }\n\n // Decorate the spec title\n if (!h1Elem.id) h1Elem.id = \"title\";\n h1Elem.classList.add(\"title\");\n\n setDocumentTitle(conf, h1Elem);\n\n // This will get relocated by a template later.\n document.body.prepend(h1Elem);\n}\n\nfunction setDocumentTitle(conf, h1Elem) {\n // If the h1 is newly created, it won't be connected. In this case\n // we use the <title> or a localized fallback.\n if (!h1Elem.isConnected) {\n h1Elem.textContent = document.title || `${l10n.default_title}`;\n }\n\n let documentTitle = norm(h1Elem.textContent);\n\n if (conf.isPreview && conf.prNumber) {\n const prUrl = conf.prUrl || `${conf.github.repoURL}pull/${conf.prNumber}`;\n const { childNodes } = html`\n Preview of PR <a href=\"${prUrl}\">#${conf.prNumber}</a>:\n `;\n h1Elem.prepend(...childNodes);\n documentTitle = `Preview of PR #${conf.prNumber}: ${documentTitle}`;\n }\n\n document.title = documentTitle;\n\n // conf.title is deperecated - we are keeping this here just to\n // retain backwards compat as we think the ePub generator\n // relies on it.\n conf.title = documentTitle;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-link\";\n\n/**\n * @param {object} link\n * @param {string} link.key\n * @param {string} [link.class]\n * @param {LinkData[]} [link.data]\n */\nexport default function showLink(link) {\n if (!link.key) {\n const msg =\n \"Found a link without `key` attribute in the configuration. See dev console.\";\n showWarning(msg, name);\n console.warn(msg, link);\n return;\n }\n return html`\n <dt class=\"${link.class ? link.class : null}\">${link.key}</dt>\n ${link.data ? link.data.map(showLinkData) : showLinkData(link)}\n `;\n}\n\n/**\n * @typedef {object} LinkData\n * @property {string} [LinkData.class]\n * @property {string} [LinkData.href]\n * @property {string} [LinkData.value]\n * @param {LinkData} data\n */\nfunction showLinkData(data) {\n return html`<dd class=\"${data.class ? data.class : null}\">\n ${data.href\n ? html`<a href=\"${data.href}\">${data.value || data.href}</a>`\n : data.value}\n </dd>`;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-logo\";\n\n/**\n * @param {object} logo\n * @param {string} logo.src\n * @param {string} logo.url\n * @param {string} logo.alt\n * @param {string} [logo.id]\n * @param {number} [logo.width]\n * @param {number} [logo.height]\n */\nexport default function showLogo(logo) {\n /** @type {HTMLAnchorElement} */\n const a = html`<a href=\"${logo.url || \"\"}\" class=\"logo\"></a>`;\n if (!logo.alt) {\n const msg = \"Found spec logo without an `alt` attribute.\";\n showWarning(msg, name, { elements: [a] });\n }\n /** @type {HTMLImageElement} */\n const img = html`<img\n id=\"${logo.id}\"\n alt=\"${logo.alt}\"\n width=\"${logo.width}\"\n height=\"${logo.height}\"\n />`;\n // avoid triggering 404 requests from dynamically generated\n // hyperHTML attribute values\n img.src = logo.src;\n a.append(img);\n return a;\n}\n","// @ts-check\nimport { humanDate, showError, toShortIsoDate } from \"../../core/utils.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst name = \"core/templates/show-people\";\n\nconst localizationStrings = {\n en: {\n until(date) {\n return html` Until ${date} `;\n },\n },\n es: {\n until(date) {\n return html` Hasta ${date} `;\n },\n },\n ko: {\n until(date) {\n return html` ${date} 이전 `;\n },\n },\n ja: {\n until(date) {\n return html` ${date} 以前 `;\n },\n },\n de: {\n until(date) {\n return html` bis ${date} `;\n },\n },\n zh: {\n until(date) {\n return html` 直到 ${date} `;\n },\n },\n};\n\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nconst orcidIcon = html`<svg\n width=\"16\"\n height=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n>\n <style>\n .st1 {\n fill: #fff;\n }\n </style>\n <path\n d=\"M256 128c0 70.7-57.3 128-128 128S0 198.7 0 128 57.3 0 128 0s128 57.3 128 128z\"\n fill=\"#a6ce39\"\n />\n <path\n class=\"st1\"\n d=\"M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z\"\n />\n</svg>`;\n\n/**\n * @typedef {object} Person\n * @property {string} [Person.name]\n * @property {string} [Person.company]\n * @property {string|number} [Person.w3cid]\n * @property {string} [Person.mailto]\n * @property {string} [Person.url]\n * @property {string} [Person.orcid]\n * @property {string} [Person.company]\n * @property {string} [Person.companyURL]\n * @property {string} [Person.note]\n * @property {string} [Person.retiredDate]\n * @property {PersonExtras} [Person.extras]\n *\n * @typedef {object} PersonExtras\n * @property {string} PersonExtras.name\n * @property {string} [PersonExtras.class]\n * @property {string} [PersonExtras.href]\n *\n * @param {Person[]} persons\n */\nexport default function showPeople(persons = []) {\n const l10n = localizationStrings[lang];\n return persons.map(getItem);\n\n function getItem(p) {\n const personName = [p.name]; // treated as opt-in HTML by hyperHTML\n const company = [p.company];\n const editorid = p.w3cid ? parseInt(p.w3cid, 10) : null;\n /** @type {HTMLElement} */\n const dd = html`<dd\n class=\"p-author h-card vcard\"\n data-editor-id=\"${editorid}\"\n ></dd>`;\n const span = document.createDocumentFragment();\n const contents = [];\n if (p.mailto) {\n contents.push(html`<a\n class=\"ed_mailto u-email email p-name\"\n href=\"${`mailto:${p.mailto}`}\"\n >${personName}</a\n >`);\n } else if (p.url) {\n contents.push(\n html`<a class=\"u-url url p-name fn\" href=\"${p.url}\">${personName}</a>`\n );\n } else {\n contents.push(html`<span class=\"p-name fn\">${personName}</span>`);\n }\n if (p.orcid) {\n contents.push(\n html`<a class=\"p-name orcid\" href=\"${p.orcid}\"\n >${orcidIcon.cloneNode(true)}\n </a>`\n );\n }\n if (p.company) {\n if (p.companyURL) {\n contents.push(\n html`\n (<a class=\"p-org org h-org h-card\" href=\"${p.companyURL}\"\n >${company}</a\n >)\n `\n );\n } else {\n contents.push(html` (${company}) `);\n }\n }\n if (p.note) contents.push(document.createTextNode(` (${p.note})`));\n if (p.extras) {\n const results = p.extras\n // Remove empty names\n .filter(extra => extra.name && extra.name.trim())\n // Convert to HTML\n .map(getExtra);\n for (const result of results) {\n contents.push(document.createTextNode(\", \"), result);\n }\n }\n if (p.retiredDate) {\n const retiredDate = new Date(p.retiredDate);\n const isValidDate = retiredDate.toString() !== \"Invalid Date\";\n const timeElem = document.createElement(\"time\");\n timeElem.textContent = isValidDate\n ? humanDate(retiredDate)\n : \"Invalid Date\"; // todo: Localise invalid date\n if (!isValidDate) {\n const msg = \"The date is invalid. The expected format is YYYY-MM-DD.\";\n const title = \"Invalid date\";\n showError(msg, name, { title, elements: [timeElem] });\n }\n timeElem.dateTime = toShortIsoDate(retiredDate);\n contents.push(html` - ${l10n.until(timeElem)} `);\n }\n\n // @ts-ignore: hyperhtml types only support Element but we use a DocumentFragment here\n html.bind(span)`${contents}`;\n dd.appendChild(span);\n return dd;\n }\n\n function getExtra(extra) {\n const span = html`<span class=\"${extra.class || null}\"></span>`;\n let textContainer = span;\n if (extra.href) {\n textContainer = html`<a href=\"${extra.href}\"></a>`;\n span.appendChild(textContainer);\n }\n textContainer.textContent = extra.name;\n return span;\n }\n}\n","// @ts-check\nimport { getIntlData, showWarning } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nconst name = \"dini/templates/headers\";\n\nconst ccLicense = \"https://creativecommons.org/licenses/by/4.0/legalcode\";\n\nconst localizationStrings = {\n en: {\n author: \"Author:\",\n authors: \"Authors:\",\n editor: \"Editor:\",\n editors: \"Editors:\",\n former_editor: \"Former editor:\",\n former_editors: \"Former editors:\",\n latest_editors_draft: \"Latest editor's draft:\",\n latest_published_version: \"Latest published version:\",\n this_version: \"This version:\",\n },\n ko: {\n author: \"저자:\",\n authors: \"저자:\",\n editor: \"편집자:\",\n editors: \"편집자:\",\n former_editor: \"이전 편집자:\",\n former_editors: \"이전 편집자:\",\n latest_editors_draft: \"최신 편집 초안:\",\n latest_published_version: \"최신 버전:\",\n this_version: \"현재 버전:\",\n },\n zh: {\n author: \"作者:\",\n authors: \"作者:\",\n editor: \"编辑:\",\n editors: \"编辑:\",\n former_editor: \"原编辑:\",\n former_editors: \"原编辑:\",\n latest_editors_draft: \"最新编辑草稿:\",\n latest_published_version: \"最新发布版本:\",\n this_version: \"本版本:\",\n },\n ja: {\n author: \"著者:\",\n authors: \"著者:\",\n editor: \"編者:\",\n editors: \"編者:\",\n former_editor: \"以前の版の編者:\",\n former_editors: \"以前の版の編者:\",\n latest_editors_draft: \"最新の編集用草案:\",\n latest_published_version: \"最新バージョン:\",\n this_version: \"このバージョン:\",\n },\n nl: {\n author: \"Auteur:\",\n authors: \"Auteurs:\",\n editor: \"Redacteur:\",\n editors: \"Redacteurs:\",\n latest_editors_draft: \"Laatste werkversie:\",\n latest_published_version: \"Laatst gepubliceerde versie:\",\n this_version: \"Deze versie:\",\n },\n es: {\n author: \"Autor:\",\n authors: \"Autores:\",\n editor: \"Editor:\",\n editors: \"Editores:\",\n latest_editors_draft: \"Borrador de editor mas reciente:\",\n latest_published_version: \"Versión publicada mas reciente:\",\n this_version: \"Ésta versión:\",\n },\n de: {\n author: \"Autor/in:\",\n authors: \"Autor/innen:\",\n editor: \"Redaktion:\",\n editors: \"Redaktion:\",\n former_editor: \"Frühere Mitwirkende:\",\n former_editors: \"Frühere Mitwirkende:\",\n latest_editors_draft: \"Letzter Entwurf:\",\n latest_published_version: \"Letzte publizierte Fassung:\",\n this_version: \"Diese Fassung:\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nfunction getSpecSubTitleElem(conf) {\n let specSubTitleElem = document.querySelector(\"h2#subtitle\");\n\n if (specSubTitleElem && specSubTitleElem.parentElement) {\n specSubTitleElem.remove();\n conf.subtitle = specSubTitleElem.textContent.trim();\n } else if (conf.subtitle) {\n specSubTitleElem = document.createElement(\"h2\");\n specSubTitleElem.textContent = conf.subtitle;\n specSubTitleElem.id = \"subtitle\";\n }\n if (specSubTitleElem) {\n specSubTitleElem.classList.add(\"subtitle\");\n }\n return specSubTitleElem;\n}\n\nexport default conf => {\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${document.querySelector(\"h1#title\")}\n ${getSpecSubTitleElem(conf)}\n <h2>\n ${conf.textStatus}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >\n </h2>\n <dl>\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${renderCopyright(conf)}\n <hr />\n </div>`;\n};\n\n/**\n * @param {string} text\n * @param {string} url\n * @param {string=} cssClass\n */\nfunction linkLicense(text, url, cssClass) {\n return html`<a rel=\"license\" href=\"${url}\" class=\"${cssClass}\">${text}</a>`;\n}\n\nfunction renderCopyright(conf) {\n // If there is already a copyright, let's relocate it.\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n return existingCopyright;\n }\n if (conf.hasOwnProperty(\"overrideCopyright\")) {\n const msg = \"The `overrideCopyright` configuration option is deprecated.\";\n const hint = 'Please use `<p class=\"copyright\">` instead.';\n showWarning(msg, name, { hint });\n }\n return conf.overrideCopyright\n ? [conf.overrideCopyright]\n : html`<p class=\"copyright\">\n Dieses Dokument ist lizensiert unter\n ${linkLicense(\n \"Creative Commons Attribution 4.0 International Public License\",\n ccLicense,\n \"subfoot\"\n )}.\n </p>`;\n}\n","// @ts-check\n// Module dini/headers\n// Generate the headers material based on the provided configuration.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n// - editors: an array of people editing the document (at least one is required). People\n// are defined using:\n// - name: the person's name (required)\n// - url: URI for the person's home page\n// - company: the person's company\n// - companyURL: the URI for the person's company\n// - mailto: the person's email\n// - note: a note on the person (e.g. former editor)\n// - authors: an array of people who are contributing authors of the document.\n// - formerEditors: an array of people that had earlier edited the document but no longer edit.\n// - subtitle: a subtitle for the specification\n// - publishDate: the date to use for the publication, default to document.lastModified, and\n// failing that to now. The format is YYYY-MM-DD or a Date object.\n// - alternateFormats: a list of alternate formats for the document, each of which being\n// defined by:\n// - uri: the URI to the alternate\n// - label: a label for the alternate\n// - lang: optional language\n// - type: optional MIME type\n// - logos: a list of logos to use instead of the W3C logo, each of which being defined by:\n// - src: the URI to the logo (target of <img src=>)\n// - alt: alternate text for the image (<img alt=>), defaults to \"Logo\" or \"Logo 1\", \"Logo 2\", ...\n// if src is not specified, this is the text of the \"logo\"\n// - height: optional height of the logo (<img height=>)\n// - width: optional width of the logo (<img width=>)\n// - url: the URI to the organization represented by the logo (target of <a href=>)\n// - id: optional id for the logo, permits custom CSS (wraps logo in <span id=>)\n// - each logo element must specify either src or alt\n// - otherLinks: an array of other links that you might want in the header (e.g., link github, twitter, etc).\n// Example of usage: [{key: \"foo\", href:\"https://b\"}, {key: \"bar\", href:\"https://\"}].\n// Allowed values are:\n// - key: the key for the <dt> (e.g., \"Bug Tracker\"). Required.\n// - value: The value that will appear in the <dd> (e.g., \"GitHub\"). Optional.\n// - href: a URL for the value (e.g., \"https://foo.com/issues\"). Optional.\n// - class: a string representing CSS classes. Optional.\n// - license: can be one of the following\n// - \"cc-by-sa\"\n// - \"cc-by\"\n// - \"cc0\"\nimport { ISODate, showError } from \"../core/utils.js\";\nimport headersTmpl from \"./templates/headers.js\";\nimport { pub } from \"../core/pubsubhub.js\";\n\nexport const name = \"dini/headers\";\n\nconst DINIDate = new Intl.DateTimeFormat([\"de-DE\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n});\n\nconst status2text = {\n unofficial: \"Entwurf vom\",\n base: \"Spezifikation vom\",\n};\n\n/**\n * @param {*} conf\n * @param {string} prop\n * @param {string | number | Date} fallbackDate\n */\nfunction validateDateAndRecover(conf, prop, fallbackDate = new Date()) {\n const date = conf[prop] ? new Date(conf[prop]) : new Date(fallbackDate);\n // if date is valid\n if (Number.isFinite(date.valueOf())) {\n const formattedDate = ISODate.format(date);\n return new Date(formattedDate);\n }\n const msg =\n `[\\`${prop}\\`](https://github.com/w3c/respec/wiki/${prop}) ` +\n `is not a valid date: \"${conf[prop]}\". Expected format 'YYYY-MM-DD'.`;\n showError(msg, name);\n return new Date(ISODate.format(new Date()));\n}\n\nexport function run(conf) {\n conf.isUnofficial = conf.specStatus === \"unofficial\";\n conf.isBasic = conf.specStatus === \"base\";\n if (!conf.specStatus) {\n const msg = \"Missing required configuration: `specStatus`\";\n showError(msg, name);\n }\n conf.title = document.title || \"Kein Titel\";\n if (!conf.subtitle) conf.subtitle = \"\";\n conf.publishDate = validateDateAndRecover(\n conf,\n \"publishDate\",\n document.lastModified\n );\n conf.publishYear = conf.publishDate.getUTCFullYear();\n conf.publishHumanDate = DINIDate.format(conf.publishDate);\n const peopCheck = function (it) {\n if (!it.name) {\n const msg = \"All authors and editors must have a name.\";\n showError(msg, name);\n }\n if (it.orcid) {\n try {\n it.orcid = normalizeOrcid(it.orcid);\n } catch (e) {\n const msg = `\"${it.orcid}\" is not an ORCID. ${e.message}`;\n showError(msg, name);\n // A failed orcid link could link to something outside of orcid,\n // which would be misleading.\n delete it.orcid;\n }\n }\n };\n if (!conf.formerEditors) conf.formerEditors = [];\n if (conf.editors) {\n conf.editors.forEach(peopCheck);\n // Move any editors with retiredDate to formerEditors.\n for (let i = 0; i < conf.editors.length; i++) {\n const editor = conf.editors[i];\n if (\"retiredDate\" in editor) {\n conf.formerEditors.push(editor);\n conf.editors.splice(i--, 1);\n }\n }\n }\n if (!conf.editors || conf.editors.length === 0) {\n const msg = \"At least one editor is required\";\n showError(msg, name);\n }\n if (conf.formerEditors.length) {\n conf.formerEditors.forEach(peopCheck);\n }\n if (conf.authors) {\n conf.authors.forEach(peopCheck);\n }\n conf.multipleEditors = conf.editors && conf.editors.length > 1;\n conf.multipleFormerEditors = conf.formerEditors.length > 1;\n conf.multipleAuthors = conf.authors && conf.authors.length > 1;\n (conf.alternateFormats || []).forEach(it => {\n if (!it.uri || !it.label) {\n const msg = \"All alternate formats must have a uri and a label.\";\n showError(msg, name);\n }\n });\n if (conf.copyrightStart && conf.copyrightStart == conf.publishYear)\n conf.copyrightStart = \"\";\n conf.textStatus = status2text[conf.specStatus];\n conf.dashDate = ISODate.format(conf.publishDate);\n conf.publishISODate = conf.publishDate.toISOString();\n // configuration done - yay!\n\n // insert into document\n const header = headersTmpl(conf);\n document.body.prepend(header);\n document.body.classList.add(\"h-entry\");\n\n // Requested by https://github.com/w3c/respec/issues/504\n // Makes a record of a few auto-generated things.\n pub(\"amend-user-config\", {\n publishISODate: conf.publishISODate,\n generatedSubtitle: `${conf.longStatus} ${conf.publishHumanDate}`,\n });\n}\n\n/**\n * @param {string} orcid Either an ORCID URL or just the 16-digit ID which comes after the /\n * @return {string} the full ORCID URL. Throws an error if the ID is invalid.\n */\nfunction normalizeOrcid(orcid) {\n const orcidUrl = new URL(orcid, \"https://orcid.org/\");\n if (orcidUrl.origin !== \"https://orcid.org\") {\n throw new Error(\n `The origin should be \"https://orcid.org\", not \"${orcidUrl.origin}\".`\n );\n }\n\n // trailing slash would mess up checksum\n const orcidId = orcidUrl.pathname.slice(1).replace(/\\/$/, \"\");\n if (!/^\\d{4}-\\d{4}-\\d{4}-\\d{3}(\\d|X)$/.test(orcidId)) {\n throw new Error(\n `ORCIDs have the format \"1234-1234-1234-1234\", not \"${orcidId}\"`\n );\n }\n\n // calculate checksum as per https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier\n const lastDigit = orcidId[orcidId.length - 1];\n const remainder = orcidId\n .split(\"\")\n .slice(0, -1)\n .filter(c => /\\d/.test(c))\n .map(Number)\n .reduce((acc, c) => (acc + c) * 2, 0);\n const lastDigitInt = (12 - (remainder % 11)) % 11;\n const lastDigitShould = lastDigitInt === 10 ? \"X\" : String(lastDigitInt);\n if (lastDigit !== lastDigitShould) {\n throw new Error(`\"${orcidId}\" has an invalid checksum.`);\n }\n\n return orcidUrl.href;\n}\n","// @ts-check\n// Module dini/abstract\n// Handle the abstract section properly.\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"dini/abstract\";\n\nconst localizationStrings = {\n en: {\n abstract: \"Abstract\",\n },\n ko: {\n abstract: \"요약\",\n },\n zh: {\n abstract: \"摘要\",\n },\n ja: {\n abstract: \"要約\",\n },\n nl: {\n abstract: \"Samenvatting\",\n },\n es: {\n abstract: \"Resumen\",\n },\n de: {\n abstract: \"Zusammenfassung\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run() {\n const abs = document.getElementById(\"abstract\");\n if (!abs) {\n const msg = `Document must have one element with \\`id=\"abstract\"`;\n showError(msg, name);\n return;\n }\n abs.classList.add(\"introductory\");\n let abstractHeading = document.querySelector(\"#abstract>h2\");\n if (abstractHeading) {\n return;\n }\n abstractHeading = document.createElement(\"h2\");\n abstractHeading.textContent = l10n.abstract;\n abs.prepend(abstractHeading);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Module core/data-abbr\n// - Finds all elements with data-abbr attribute and processes them.\nimport { showError } from \"./utils.js\";\nexport const name = \"core/dfn-abbr\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = document.querySelectorAll(\"[data-abbr]\");\n for (const elem of elements) {\n const { localName } = elem;\n switch (localName) {\n case \"dfn\":\n processDfnElement(elem);\n break;\n default: {\n const msg = `\\`data-abbr\\` attribute not supported on \\`${localName}\\` elements.`;\n showError(msg, name, {\n elements: [elem],\n title: \"Error: unsupported.\",\n });\n }\n }\n }\n}\n/**\n * @param {HTMLElement} dfn\n */\nfunction processDfnElement(dfn) {\n const abbr = generateAbbreviation(dfn);\n // get normalized <dfn> textContent to remove spaces, tabs, new lines.\n const fullForm = dfn.textContent.replace(/\\s\\s+/g, \" \").trim();\n dfn.insertAdjacentHTML(\n \"afterend\",\n ` (<abbr title=\"${fullForm}\">${abbr}</abbr>)`\n );\n const lt = dfn.dataset.lt || \"\";\n dfn.dataset.lt = lt\n .split(\"|\")\n .filter(i => i.trim())\n .concat(abbr)\n .join(\"|\");\n}\n\nfunction generateAbbreviation(elem) {\n if (elem.dataset.abbr) return elem.dataset.abbr;\n // Generates abbreviation from textContent\n // e.g., \"Permanent Account Number\" -> \"PAN\"\n return elem.textContent\n .match(/\\b([a-z])/gi)\n .join(\"\")\n .toUpperCase();\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\n/* jshint jquery: true */\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\n// for backward compatibity\nexport { wireReference, stringifyReference } from \"./render-biblio.js\";\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://specref.herokuapp.com/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst defaultsReference = Object.freeze({\n authors: [],\n date: \"\",\n href: \"\",\n publisher: \"\",\n status: \"\",\n title: \"\",\n etAl: false,\n});\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\nexport function wireReference(rawRef, target = \"_blank\") {\n if (typeof rawRef !== \"object\") {\n throw new TypeError(\"Only modern object references are allowed\");\n }\n const ref = Object.assign({}, defaultsReference, rawRef);\n const authors = ref.authors.join(\"; \") + (ref.etAl ? \" et al\" : \"\");\n const status = REF_STATUSES.get(ref.status) || ref.status;\n return html.wire(ref)`\n <cite>\n <a\n href=\"${ref.href}\"\n target=\"${target}\"\n rel=\"noopener noreferrer\">\n ${ref.title.trim()}</a>.\n </cite>\n <span class=\"authors\">\n ${endWithDot(authors)}\n </span>\n <span class=\"publisher\">\n ${endWithDot(ref.publisher)}\n </span>\n <span class=\"pubDate\">\n ${endWithDot(ref.date)}\n </span>\n <span class=\"pubStatus\">\n ${endWithDot(status)}\n </span>\n `;\n}\n\n/** @param {BiblioData|string} ref */\nexport function stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\n// Module dini/conformance\n// Handle the conformance section properly.\nimport { getIntlData, htmlJoinAnd, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { renderInlineCitation } from \"../core/render-biblio.js\";\nimport { rfc2119Usage } from \"../core/inlines.js\";\nexport const name = \"dini/conformance\";\n\nconst localizationStrings = {\n en: {\n conformance: \"Conformance\",\n normativity:\n \"As well as sections marked as non-normative, all authoring guidelines, \" +\n \"diagrams, examples, and notes in this specification are non-normative. \" +\n \"Everything else in this specification is normative.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n The key word${plural ? \"s\" : \"\"} ${keywords} in this document\n ${plural ? \"are\" : \"is\"} to be interpreted as described in\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n when, and only when, they appear in all capitals, as shown here.\n </p>`;\n },\n },\n de: {\n conformance: \"Anforderungen\",\n normativity:\n \"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten \" +\n \"sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument \" +\n \"nicht normativ. Alle anderen Angaben sind normativ.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n ${plural ? \"Die Schlüsselwörter\" : \"Das Schlüsselwort\"} ${keywords} in\n diesem Dokument ${plural ? \"sind\" : \"ist\"} gemäß\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n und unter Berücksichtigung von\n <a href=\"https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst\"\n >2119de</a\n >\n zu interpretieren, wenn und nur wenn ${plural ? \"sie\" : \"es\"} wie hier\n gezeigt durchgehend groß geschrieben wurde${plural ? \"n\" : \"\"}.\n </p>`;\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {Element} conformance\n * @param {*} conf\n */\nfunction processConformance(conformance, conf) {\n const terms = [...Object.keys(rfc2119Usage)];\n // Add RFC2119 to bibliography\n if (terms.length) {\n conf.normativeReferences.add(\"RFC2119\");\n conf.normativeReferences.add(\"RFC8174\");\n }\n // Put in the 2119 clause and reference\n const keywords = htmlJoinAnd(\n terms.sort(),\n item => html`<em class=\"rfc2119\">${item}</em>`\n );\n const plural = terms.length > 1;\n const content = html`\n <h2>${l10n.conformance}</h2>\n <p>${l10n.normativity}</p>\n ${terms.length ? l10n.keywordInterpretation(keywords, plural) : null}\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run(conf) {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance && !conformance.classList.contains(\"override\")) {\n processConformance(conformance, conf);\n }\n // Warn when there are RFC2119/RFC8174 keywords, but not conformance section\n if (!conformance && Object.keys(rfc2119Usage).length) {\n const msg = `Document uses RFC2119 keywords but lacks a conformance section.`;\n const hint = 'Please add a `<section id=\"conformance\">`.';\n showWarning(msg, name, { hint });\n }\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/examples.css\")).default;\n } catch {\n return fetchAsset(\"examples.css\");\n }\n}\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n const css = await cssPromise;\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/issues-notes.css\")).default;\n } catch {\n return fetchAsset(\"issues-notes.css\");\n }\n}\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const css = await cssPromise;\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nfunction serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nconst ghCssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/highlight.css\")).default;\n } catch {\n return fetchAsset(\"highlight.css\");\n }\n}\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n const ghCss = await ghCssPromise;\n document.head.appendChild(\n html`<style>\n ${ghCss}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport { fetchAsset } from \"./text-loader.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nconst hlVarsPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/var.css\")).default;\n } catch {\n return fetchAsset(\"var.css\");\n }\n}\n\nexport async function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = await hlVarsPromise;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport { fetchAsset, fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n const css = await loadStyle();\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/dfn-panel.css\")).default;\n } catch {\n return fetchAsset(\"dfn-panel.css\");\n }\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","// @ts-check\n/**\n * Module core/data-type\n * Propagates data type of a <var> to subsequent instances within a section.\n * Also adds the CSS for the data type tooltip.\n * Set `conf.highlightVars = true` to enable.\n */\nimport { fetchAsset } from \"./text-loader.js\";\n\nexport const name = \"core/data-type\";\n\nconst tooltipStylePromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/datatype.css\")).default;\n } catch {\n return fetchAsset(\"datatype.css\");\n }\n}\n\nexport async function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = await tooltipStylePromise;\n document.head.appendChild(style);\n\n let section = null;\n const varMap = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const variables = document.querySelectorAll(\"section var\");\n for (const varElem of variables) {\n const currentSection = varElem.closest(\"section\");\n if (section !== currentSection) {\n section = currentSection;\n varMap.clear();\n }\n if (varElem.dataset.type) {\n varMap.set(varElem.textContent.trim(), varElem.dataset.type);\n continue;\n }\n const type = varMap.get(varElem.textContent.trim());\n if (type) varElem.dataset.type = type;\n }\n}\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\n\nimport { fetchAsset } from \"./text-loader.js\";\n\nexport const name = \"core/algorithms\";\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/algorithms.css\")).default;\n } catch {\n return fetchAsset(\"algorithms.css\");\n }\n}\n\nexport async function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = await cssPromise;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n/**\n * Fetches commits between two commitish (tag or commit) - `from` and `to=HEAD`\n * and shows them as a list of \"changes during\" those commitish. If a filter\n * function is provided by the user, it is used to filter the commits that are\n * to be shown. Otherwise, all commits are shown.\n *\n * @typedef {{message: string, hash: string}} Commit\n */\nimport { github } from \"../github.js\";\nimport { html } from \"../import-maps.js\";\nimport { showError } from \"../utils.js\";\n\nexport const name = \"rs-changelog\";\n\nexport const element = class ChangelogElement extends HTMLElement {\n constructor() {\n super();\n this.props = {\n from: this.getAttribute(\"from\"),\n to: this.getAttribute(\"to\") || \"HEAD\",\n /** @type {(commit: Commit) => boolean} */\n filter:\n typeof window[this.getAttribute(\"filter\")] === \"function\"\n ? window[this.getAttribute(\"filter\")]\n : () => true,\n };\n }\n\n connectedCallback() {\n const { from, to, filter } = this.props;\n html.bind(this)`\n <ul>\n ${{\n any: fetchCommits(from, to, filter)\n .then(commits => toHTML(commits))\n .catch(error => showError(error.message, name, { elements: [this] }))\n .finally(() => {\n this.dispatchEvent(new CustomEvent(\"done\"));\n }),\n placeholder: \"Loading list of commits...\",\n }}\n </ul>\n `;\n }\n};\n\nasync function fetchCommits(from, to, filter) {\n /** @type {Commit[]} */\n let commits;\n try {\n const gh = await github;\n if (!gh) {\n throw new Error(\"`respecConfig.github` is not set\");\n }\n const url = new URL(\"commits\", `${gh.apiBase}/${gh.fullName}/`);\n url.searchParams.set(\"from\", from);\n url.searchParams.set(\"to\", to);\n\n const res = await fetch(url.href);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n commits = await res.json();\n if (!commits.length) {\n throw new Error(`No commits between ${from}..${to}.`);\n }\n commits = commits.filter(filter);\n } catch (error) {\n const msg = `Error loading commits from GitHub. ${error.message}`;\n console.error(error);\n throw new Error(msg);\n }\n return commits;\n}\n\nasync function toHTML(commits) {\n const { repoURL } = await github;\n return commits.map(commit => {\n const [message, prNumber = null] = commit.message.split(/\\(#(\\d+)\\)/, 2);\n const commitURL = `${repoURL}commit/${commit.hash}`;\n const prURL = prNumber ? `${repoURL}pull/${prNumber}` : null;\n const pr = prNumber && html` (<a href=\"${prURL}\">#${prNumber}</a>)`;\n return html`<li><a href=\"${commitURL}\">${message.trim()}</a>${pr}</li>`;\n });\n}\n","// @ts-check\n/**\n * Registers custom elements and waits for them to finish their processing.\n *\n * Every custom element file exports:\n * - `name`: registered name of the custom element, prefixed with `rs-`.\n * - `element`: class defintion of the custom element.\n *\n * Every custom element must dispatch a CustomEvent 'done' that tells the\n * element has finished its processing, with or without errors.\n *\n * @typedef {{ name: string, element: CustomElementConstructor }} CustomElementDfn\n */\n\nimport * as changelog from \"./rs-changelog.js\";\n/** @type {CustomElementDfn[]} */\nconst CUSTOM_ELEMENTS = [changelog];\n\nexport const name = \"core/custom-elements/index\";\n\nexport async function run() {\n // prepare and register elements\n CUSTOM_ELEMENTS.forEach(el => {\n customElements.define(el.name, el.element);\n });\n\n // wait for each element to be ready\n const selectors = CUSTOM_ELEMENTS.map(el => el.name).join(\", \");\n const elems = document.querySelectorAll(selectors);\n const readyPromises = [...elems].map(\n el => new Promise(res => el.addEventListener(\"done\", res, { once: true }))\n );\n await Promise.all(readyPromises);\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","test","rtrim","relativeBase","indexOf","str","invert","l","length","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","source","obj","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","key","i","arguments","Object","hasOwnProperty","splitCells","tableRow","count","cells","match","offset","escaped","curr","split","splice","push","trim","findClosingBracket","b","level","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","raw","title","text","type","Tokenizer_1","options","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","slice","join","indentCodeCompensation","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","def","tag","table","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","nextChar","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","lastIndex","Math","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","tokens","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","token","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","body","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parse","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","unshift","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","t","defineProperty","r","a","delete","configurable","o","s","WeakSet","add","m","u","insertBefore","selected","selectedIndex","f","querySelectorAll","y","w","x","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","v","p","g","Array","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","constructor","_wire$","defineProperties","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","isArray","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","concat","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","attribute","values","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","it","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","dispatch","component","setState","idb","_idb","_marked","_pluralize","getIntlData","x_and_y","x_y_and_z","ISODate","Intl","DateTimeFormat","timeZone","year","month","day","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","array","mapper","docLang","ListFormat","format","lastComma","and","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","data","runTransforms","flist","funcArgs","methods","meth","showWarning","htmlJoinComma","joined","addId","pfx","txt","noLC","id","normalize","getElementById","nextId","getDfnTitles","titleSet","Set","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","ref","element","closestInformative","closest","isInformative","querySelector","startsWith","illegal","wrapInner","outer","wrapper","parents","selector","parent","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","super","getCanonicalKey","existingKey","find","makeSafeCopy","clone","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","comment","walkTree","nextNode","CaseInsensitiveMap","entries","RespecError","plugin","isWarning","assign","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","subscriptions","topic","from","cb","arg","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","respecVersion","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","head","includeConfig","params","URLSearchParams","search","overrideEntries","filter","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","fetchBase","response","fetch","fetchAsset","fileName","reindent","lines","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","prepend","Builder","current","tagName","position","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","indentation","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","default","loadStyle","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hash","hasLink","isLegacyFrag","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","zh","defaultLang","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","nl","hasNoHeading","offendingMembers","getOwnPropertyNames","endsWith","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","isRecTrack","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","specStatus","highlightVars","addSectionLinks","privsecSectionRule","licenses","short","diniDefaults","isED","isNoTrack","isPR","wpt-tests-exist","logos","prependW3C","doJsonLd","license","shortName","showPreviousVersion","licenseInfo","computeProps","insertStyle","noReSpecCSS","resourceHints","createResourceHints","createBaseStyle","delimiter","separator","toKeyValuePairs","width","initial-scale","shrink-to-fit","createMetaViewport","styleFile","noToc","attachFixupScript","finalStyleURL","linkURL","styles","frag","reduce","nextLink","linkCSS","exportDoc","w3cStyle","processResponse","rawData","el","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","include","includeId","default_title","h1Elem","isConnected","documentTitle","isPreview","prNumber","prUrl","github","repoURL","setDocumentTitle","showLink","class","showLinkData","showLogo","logo","alt","img","height","until","date","es","ko","ja","orcidIcon","showPeople","persons","personName","company","editorid","w3cid","dd","span","contents","mailto","orcid","companyURL","note","extras","extra","getExtra","retiredDate","Date","isValidDate","timeElem","langs","toLocaleString","humanDate","dateTime","textContainer","ccLicense","author","authors","editor","editors","former_editor","former_editors","latest_editors_draft","latest_published_version","this_version","specSubTitleElem","subtitle","getSpecSubTitleElem","textStatus","dashDate","publishHumanDate","multipleEditors","formerEditors","multipleFormerEditors","multipleAuthors","otherLinks","existingCopyright","overrideCopyright","cssClass","renderCopyright","DINIDate","status2text","unofficial","isUnofficial","isBasic","publishDate","fallbackDate","Number","isFinite","formattedDate","validateDateAndRecover","lastModified","publishYear","getUTCFullYear","peopCheck","orcidUrl","orcidId","pathname","lastDigit","lastDigitInt","acc","lastDigitShould","normalizeOrcid","alternateFormats","uri","copyrightStart","publishISODate","toISOString","headersTmpl","generatedSubtitle","longStatus","abstract","abs","abstractHeading","processDfnElement","abbr","fullForm","insertAdjacentHTML","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","identifier","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","pop","allArgs","SyntaxError","reverse","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","unique","openIdb","biblioDB","isAlias","resolveAlias","TypeError","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","reference","promisesToAdd","flatMap","isInDB","put","close","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","ok","status","json","addAll","resolveRef","entry","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","defaultsReference","freeze","publisher","etAl","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","wireReference","rawRef","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","conformance","normativity","keywordInterpretation","processConformance","terms","htmlJoinAnd","contains","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","plurals","size","userDefinedPlurals","uniquePlurals","cssPromise","makeTitle","num","report","number","examples","css","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","handleIssues","ins","ghIssues","getIssueNumber","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","issueBase","atRiskBase","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","searchParams","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","hasChildNodes","makeIssueSectionSummary","issuesAndNotes","apiBase","issueNumbers","fullName","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","container","list_of_figures","fig","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","every","decorateTableOfFigures","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","cleanup","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","duplicates","dfnFor","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","idl","first","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","xref","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","res","input","maxAge","Request","cache","cachedResponse","caches","headers","clonedResponse","customHeaders","Headers","expiryDate","now","cacheResponse","Response","blob","fetchAndCache","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","prefix","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","isNaN","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","mimeTypes","rsDocToDataURL","mimeType","validTypes","cloneDoc","insertions","metaViewport","metaCharset","metaGenerator","XMLSerializer","serializeToString","outerHTML","prettify","doctype","encodeURIComponent","save_snapshot","downloadLinks","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","workerPromise","workerScript","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","namespace","counter","gen","idGenerator","msgIdGenerator","ghCssPromise","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","ghCss","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","hlVarsPromise","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","re","activeClass","outputDoc","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","tooltipStylePromise","varMap","variables","currentSection","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors","file_a_bug","participate","commit_history","HTMLElement","props","to","fetchCommits","commits","commit","commitURL","pr","finally","gh","CUSTOM_ELEMENTS","customElements","readyPromises"],"mappings":"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,oBAAqB,QACtB,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC3f6BkC,GAAU,SAASC,GAAgB,IAAIC,EAAE,GAAG,IAAIA,EAAE5b,QAAQA,QAAQ,MAAMuK,GAAGqR,EAAE5b,QAAQ,SAAS4b,EAAErR,GAAG,IAAI1C,EAAE0C,EAAEsR,eAAeC,EAAEvR,EAAES,eAAeH,EAAEkR,EAAEza,UAAU,OAAOuJ,EAAEmR,OAAO,SAASzR,GAAG,OAAOvI,KAAKd,IAAIqJ,WAAWA,EAAEvI,KAAK4F,IAAIiD,EAAElK,IAAI,SAAS4J,GAAG,OAAOvI,KAAKd,IAAIqJ,GA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"} \ No newline at end of file +{"version":3,"file":"respec-dini.js","sources":["../profiles/dini.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/styles/ui.css.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/dini/defaults.js","../src/styles/respec.css.js","../src/core/style.js","../src/dini/style.js","../src/core/data-include.js","../src/core/title.js","../src/core/templates/show-link.js","../src/core/templates/show-logo.js","../src/core/templates/show-people.js","../src/dini/templates/headers.js","../src/dini/headers.js","../src/dini/abstract.js","../src/core/data-transform.js","../src/core/data-abbr.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/dini/conformance.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/styles/examples.css.js","../src/core/examples.js","../src/styles/issues-notes.css.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/core/exporter.js","../src/ui/save-html.js","../src/ui/about-respec.js","../src/core/seo.js","../src/styles/highlight.css.js","../src/core/text-loader.js","../src/core/worker.js","../src/core/highlight.js","../src/core/list-sorter.js","../src/styles/var.css.js","../src/core/highlight-vars.js","../src/styles/dfn-panel.css.js","../src/core/dfn-panel.js","../src/styles/datatype.css.js","../src/core/data-type.js","../src/styles/algorithms.css.js","../src/core/algorithms.js","../src/core/anchor-expander.js","../src/core/github.js","../src/core/custom-elements/rs-changelog.js","../src/core/custom-elements/index.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/dini/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/dini/style.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/title.js\"),\n import(\"../src/dini/headers.js\"),\n import(\"../src/dini/abstract.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/data-abbr.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/dini/conformance.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/data-type.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n import(\"../src/core/custom-elements/index.js\"),\n /* Linter must be the last thing to run */\n import(\"../src/core/linter.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/* global define */\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.respec-modal .close-button {\n position: absolute;\n z-index: inherit;\n padding: 0.2em;\n font-weight: bold;\n cursor: pointer;\n margin-left: 5px;\n border: none;\n background: transparent;\n}\n\n#respec-ui {\n position: fixed;\n display: flex;\n flex-direction: row-reverse;\n top: 20px;\n right: 20px;\n width: 202px;\n text-align: right;\n z-index: 9000;\n}\n\n#respec-pill,\n.respec-info-button {\n background: #fff;\n height: 2.5em;\n color: rgb(120, 120, 120);\n border: 1px solid #ccc;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n}\n\n.respec-info-button {\n border: none;\n opacity: 0.75;\n border-radius: 2em;\n margin-right: 1em;\n min-width: 3.5em;\n}\n\n.respec-info-button:focus,\n.respec-info-button:hover {\n opacity: 1;\n transition: opacity 0.2s;\n}\n\n#respec-pill:disabled {\n font-size: 2.8px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(40, 40, 40, 0.2);\n border-right: 1.1em solid rgba(40, 40, 40, 0.2);\n border-bottom: 1.1em solid rgba(40, 40, 40, 0.2);\n border-left: 1.1em solid #ffffff;\n transform: translateZ(0);\n animation: respec-spin 0.5s infinite linear;\n box-shadow: none;\n}\n\n#respec-pill:disabled,\n#respec-pill:disabled:after {\n border-radius: 50%;\n width: 10em;\n height: 10em;\n}\n\n@keyframes respec-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.respec-hidden {\n visibility: hidden;\n opacity: 0;\n transition: visibility 0s 0.2s, opacity 0.2s linear;\n}\n\n.respec-visible {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.2s linear;\n}\n\n#respec-pill:hover,\n#respec-pill:focus {\n color: rgb(0, 0, 0);\n background-color: rgb(245, 245, 245);\n transition: color 0.2s;\n}\n\n#respec-menu {\n position: absolute;\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n background: #fff;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n width: 200px;\n display: none;\n text-align: left;\n margin-top: 32px;\n font-size: 0.8em;\n}\n\n#respec-menu:not([hidden]) {\n display: block;\n}\n\n#respec-menu li {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n.respec-save-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(47%, 2fr));\n grid-gap: 0.5cm;\n padding: 0.5cm;\n}\n\n.respec-save-button:link {\n padding-top: 16px;\n color: rgb(240, 240, 240);\n background: rgb(42, 90, 168);\n justify-self: stretch;\n height: 1cm;\n text-decoration: none;\n text-align: center;\n font-size: inherit;\n border: none;\n border-radius: 0.2cm;\n}\n\n.respec-save-button:link:hover {\n color: white;\n background: rgb(42, 90, 168);\n padding: 0;\n margin: 0;\n border: 0;\n padding-top: 16px;\n}\n\n.respec-save-button:link:focus {\n background: #193766;\n}\n\n#respec-ui button:focus,\n#respec-pill:focus,\n.respec-option:focus {\n outline: 0;\n outline-style: none;\n}\n\n#respec-pill-error {\n background-color: red;\n color: white;\n}\n\n#respec-pill-warning {\n background-color: orange;\n color: white;\n}\n\n.respec-warning-list,\n.respec-error-list {\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: sans-serif;\n background-color: rgb(255, 251, 230);\n font-size: 0.85em;\n}\n\n.respec-warning-list > li,\n.respec-error-list > li {\n padding: 0.4em 0.7em;\n}\n\n.respec-warning-list > li::before {\n content: \"⚠️\";\n padding-right: 0.5em;\n}\n.respec-warning-list p,\n.respec-error-list p {\n padding: 0;\n margin: 0;\n}\n\n.respec-warning-list li {\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 245, 194);\n}\n\n.respec-error-list,\n.respec-error-list li {\n background-color: rgb(255, 240, 240);\n}\n\n.respec-error-list li::before {\n content: \"💥\";\n padding-right: 0.5em;\n}\n\n.respec-error-list li {\n padding: 0.4em 0.7em;\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 215, 215);\n}\n\n.respec-error-list li > p {\n margin: 0;\n padding: 0;\n display: inline-block;\n}\n\n.respec-error-list li > p:first-child,\n.respec-warning-list li > p:first-child {\n display: inline;\n}\n\n.respec-warning-list > li li,\n.respec-error-list > li li {\n margin: 0;\n list-style: disc;\n}\n\n#respec-overlay {\n display: block;\n position: fixed;\n z-index: 10000;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n background: #000;\n}\n\n.respec-show-overlay {\n transition: opacity 0.2s linear;\n opacity: 0.5;\n}\n\n.respec-hide-overlay {\n transition: opacity 0.2s linear;\n opacity: 0;\n}\n\n.respec-modal {\n display: block;\n position: fixed;\n z-index: 11000;\n margin: auto;\n top: 10%;\n background: #fff;\n border: 5px solid #666;\n min-width: 20%;\n width: 79%;\n padding: 0;\n max-height: 80%;\n overflow-y: auto;\n margin: 0 -0.5cm;\n}\n\n@media screen and (min-width: 78em) {\n .respec-modal {\n width: 62%;\n }\n}\n\n.respec-modal h3 {\n margin: 0;\n padding: 0.2em;\n text-align: center;\n color: black;\n background: linear-gradient(\n to bottom,\n rgba(238, 238, 238, 1) 0%,\n rgba(238, 238, 238, 1) 50%,\n rgba(204, 204, 204, 1) 100%\n );\n font-size: 1em;\n}\n\n.respec-modal .inside div p {\n padding-left: 1cm;\n}\n\n#respec-menu button.respec-option {\n background: white;\n padding: 0 0.2cm;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n padding: 1.2em 1.2em;\n}\n\n#respec-menu button.respec-option:hover,\n#respec-menu button:focus {\n background-color: #eeeeee;\n}\n\n.respec-cmd-icon {\n padding-right: 0.5em;\n}\n\n#respec-ui button.respec-option:last-child {\n border: none;\n border-radius: inherit;\n}\n\n.respec-button-copy-paste {\n position: absolute;\n height: 28px;\n width: 40px;\n cursor: pointer;\n background-image: linear-gradient(#fcfcfc, #eee);\n border: 1px solid rgb(144, 184, 222);\n border-left: 0;\n border-radius: 0px 0px 3px 0;\n -webkit-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n top: 0;\n left: 127px;\n}\n\n@media print {\n #respec-ui {\n display: none;\n }\n}\n\n.respec-iframe {\n width: 100%;\n min-height: 550px;\n height: 100%;\n overflow: hidden;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n.respec-iframe:not(.ready) {\n background: url(\"https://respec.org/xref/loader.gif\") no-repeat center;\n}\n\n.respec-iframe + a[href] {\n font-size: 0.9rem;\n float: right;\n margin: 0 0.5em 0.5em;\n border-bottom-width: 1px;\n}\n`;\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport css from \"../styles/ui.css.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Sets the defaults for DINI specs\n */\nexport const name = \"dini/defaults\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\n\nlinter.register(privsecSectionRule);\n\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n [\n \"cc-by-sa\",\n {\n name:\n \"Creative Commons Attribution-ShareAlike 4.0 International Public License\",\n short: \"CC-BY-SA\",\n url: \"https://creativecommons.org/licenses/by-sa/4.0/legalcode\",\n },\n ],\n]);\n\nconst diniDefaults = {\n format: \"markdown\",\n isED: false,\n isNoTrack: true,\n isPR: false,\n lint: {\n \"privsec-section\": true,\n \"wpt-tests-exist\": false,\n },\n logos: [],\n prependW3C: false,\n doJsonLd: false,\n license: \"cc-by\",\n shortName: \"X\",\n showPreviousVersion: false,\n};\n\nfunction computeProps(conf) {\n return {\n licenseInfo: licenses.get(conf.license),\n };\n}\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...diniDefaults.lint,\n ...conf.lint,\n };\n Object.assign(conf, {\n ...coreDefaults,\n ...diniDefaults,\n ...conf,\n lint,\n });\n\n // computed properties\n Object.assign(conf, computeProps(conf));\n}\n","/* ReSpec specific CSS */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n@keyframes pop {\n 0% {\n transform: scale(1, 1);\n }\n 25% {\n transform: scale(1.25, 1.25);\n opacity: 0.75;\n }\n 100% {\n transform: scale(1, 1);\n }\n}\n\n/* Override code highlighter background */\n.hljs {\n background: transparent !important;\n}\n\n/* --- INLINES --- */\nh1 abbr,\nh2 abbr,\nh3 abbr,\nh4 abbr,\nh5 abbr,\nh6 abbr,\na abbr {\n border: none;\n}\n\ndfn {\n font-weight: bold;\n}\n\na.internalDFN {\n color: inherit;\n border-bottom: 1px solid #99c;\n text-decoration: none;\n}\n\na.externalDFN {\n color: inherit;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\na.bibref {\n text-decoration: none;\n}\n\n.respec-offending-element:target {\n animation: pop 0.25s ease-in-out 0s 1;\n}\n\n.respec-offending-element,\na[href].respec-offending-element {\n text-decoration: red wavy underline;\n}\n@supports not (text-decoration: red wavy underline) {\n .respec-offending-element:not(pre) {\n display: inline-block;\n }\n .respec-offending-element {\n /* Red squiggly line */\n background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=)\n bottom repeat-x;\n }\n}\n\n#references :target {\n background: #eaf3ff;\n animation: pop 0.4s ease-in-out 0s 1;\n}\n\ncite .bibref {\n font-style: normal;\n}\n\ncode {\n color: #c63501;\n}\n\nth code {\n color: inherit;\n}\n\na[href].orcid {\n padding-left: 4px;\n padding-right: 4px;\n}\n\na[href].orcid > svg {\n margin-bottom: -2px;\n}\n\n/* --- TOC --- */\n\n.toc a,\n.tof a {\n text-decoration: none;\n}\n\na .secno,\na .figno {\n color: #000;\n}\n\nul.tof,\nol.tof {\n list-style: none outside none;\n}\n\n.caption {\n margin-top: 0.5em;\n font-style: italic;\n}\n\n/* --- TABLE --- */\n\ntable.simple {\n border-spacing: 0;\n border-collapse: collapse;\n border-bottom: 3px solid #005a9c;\n}\n\n.simple th {\n background: #005a9c;\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th a {\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th[scope=\"row\"] {\n background: inherit;\n color: inherit;\n border-top: 1px solid #ddd;\n}\n\n.simple td {\n padding: 3px 10px;\n border-top: 1px solid #ddd;\n}\n\n.simple tr:nth-child(even) {\n background: #f0f6ff;\n}\n\n/* --- DL --- */\n\n.section dd > p:first-child {\n margin-top: 0;\n}\n\n.section dd > p:last-child {\n margin-bottom: 0;\n}\n\n.section dd {\n margin-bottom: 1em;\n}\n\n.section dl.attrs dd,\n.section dl.eldef dd {\n margin-bottom: 0;\n}\n\n#issue-summary > ul {\n column-count: 2;\n}\n\n#issue-summary li {\n list-style: none;\n display: inline-block;\n}\n\ndetails.respec-tests-details {\n margin-left: 1em;\n display: inline-block;\n vertical-align: top;\n}\n\ndetails.respec-tests-details > * {\n padding-right: 2em;\n}\n\ndetails.respec-tests-details[open] {\n z-index: 999999;\n position: absolute;\n border: thin solid #cad3e2;\n border-radius: 0.3em;\n background-color: white;\n padding-bottom: 0.5em;\n}\n\ndetails.respec-tests-details[open] > summary {\n border-bottom: thin solid #cad3e2;\n padding-left: 1em;\n margin-bottom: 1em;\n line-height: 2em;\n}\n\ndetails.respec-tests-details > ul {\n width: 100%;\n margin-top: -0.3em;\n}\n\ndetails.respec-tests-details > li {\n padding-left: 1em;\n}\n\na[href].self-link:hover {\n opacity: 1;\n text-decoration: none;\n background-color: transparent;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n position: relative;\n}\n\naside.example .marker > a.self-link {\n color: inherit;\n}\n\nh2 > a.self-link,\nh3 > a.self-link,\nh4 > a.self-link,\nh5 > a.self-link,\nh6 > a.self-link {\n border: none;\n color: inherit;\n font-size: 83%;\n height: 2em;\n left: -1.6em;\n opacity: 0.5;\n position: absolute;\n text-align: center;\n text-decoration: none;\n top: 0;\n transition: opacity 0.2s;\n width: 2em;\n}\n\nh2 > a.self-link::before,\nh3 > a.self-link::before,\nh4 > a.self-link::before,\nh5 > a.self-link::before,\nh6 > a.self-link::before {\n content: \"§\";\n display: block;\n}\n\n@media (max-width: 767px) {\n dd {\n margin-left: 0;\n }\n\n /* Don't position self-link in headings off-screen */\n h2 > a.self-link,\n h3 > a.self-link,\n h4 > a.self-link,\n h5 > a.self-link,\n h6 > a.self-link {\n left: auto;\n top: auto;\n }\n}\n\n@media print {\n .removeOnSave {\n display: none;\n }\n}\n`;\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport css from \"../styles/respec.css.js\";\n\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = css;\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport function run(conf) {\n if (conf.noReSpecCSS) {\n styleElement.remove();\n }\n}\n","// @ts-check\n// Module dini/style\n// Inserts a link to the appropriate W3C style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"dini/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n if (location.hash) {\n script.addEventListener(\n \"load\",\n () => {\n window.location.href = location.hash;\n },\n { once: true }\n );\n }\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createBaseStyle() {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = \"https://www.w3.org/StyleSheets/TR/2016/base.css\";\n link.classList.add(\"removeOnSave\");\n return link;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C styles and scripts.\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preload\", // all specs include on base.css.\n href: \"https://www.w3.org/StyleSheets/TR/2016/base.css\",\n as: \"style\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// Opportunistically apply base style\nelements.appendChild(createBaseStyle());\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\nfunction styleMover(linkURL) {\n return exportDoc => {\n const w3cStyle = exportDoc.querySelector(`head link[href=\"${linkURL}\"]`);\n exportDoc.querySelector(\"head\").append(w3cStyle);\n };\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'base'.\";\n conf.specStatus = \"base\";\n showWarning(msg, name);\n }\n\n let styleFile = \"\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"UNOFFICIAL\":\n styleFile = \"W3C-UD\";\n break;\n case \"BASE\":\n styleFile = \"base.css\";\n break;\n }\n\n // Attach W3C fixup script after we are done.\n if (!conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, \"2016\");\n },\n { once: true }\n );\n }\n const finalStyleURL = `https://www.w3.org/StyleSheets/TR/2016/${styleFile}`;\n linkCSS(document, finalStyleURL);\n // Make sure the W3C stylesheet is the last stylesheet, as required by W3C Pub Rules.\n const moveStyle = styleMover(finalStyleURL);\n sub(\"beforesave\", moveStyle);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","/**\n * This module handles the creation of the h1#title of a spec and\n * makes sure the <title> always matches the h1.\n *\n * If no h1#title is included, then the <title> becomes the h1#title.\n *\n * When a h1#title is included, it always takes precedence over the\n * <title> of a spec. An error will be displayed in case of\n * any mismatch.\n *\n */\n\nimport { getIntlData, norm, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/title\";\n\nconst localizationStrings = {\n en: {\n default_title: \"No Title\",\n },\n de: {\n default_title: \"Kein Titel\",\n },\n zh: {\n default_title: \"无标题\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n /** @type {HTMLElement} */\n const h1Elem =\n document.querySelector(\"h1#title\") || html`<h1 id=\"title\"></h1>`;\n\n // check existing element is ok to use\n if (h1Elem.isConnected && h1Elem.textContent.trim() === \"\") {\n const msg =\n \"The document is missing a title, so using a default title. \" +\n \"To fix this, please give your document a `<title>`. \" +\n \"If you need special markup in the document's title, \" +\n 'please use a `<h1 id=\"title\">`.';\n const title = \"Document is missing a title\";\n showError(msg, name, { title, elements: [h1Elem] });\n }\n\n // Decorate the spec title\n if (!h1Elem.id) h1Elem.id = \"title\";\n h1Elem.classList.add(\"title\");\n\n setDocumentTitle(conf, h1Elem);\n\n // This will get relocated by a template later.\n document.body.prepend(h1Elem);\n}\n\nfunction setDocumentTitle(conf, h1Elem) {\n // If the h1 is newly created, it won't be connected. In this case\n // we use the <title> or a localized fallback.\n if (!h1Elem.isConnected) {\n h1Elem.textContent = document.title || `${l10n.default_title}`;\n }\n\n let documentTitle = norm(h1Elem.textContent);\n\n if (conf.isPreview && conf.prNumber) {\n const prUrl = conf.prUrl || `${conf.github.repoURL}pull/${conf.prNumber}`;\n const { childNodes } = html`\n Preview of PR <a href=\"${prUrl}\">#${conf.prNumber}</a>:\n `;\n h1Elem.prepend(...childNodes);\n documentTitle = `Preview of PR #${conf.prNumber}: ${documentTitle}`;\n }\n\n document.title = documentTitle;\n\n // conf.title is deperecated - we are keeping this here just to\n // retain backwards compat as we think the ePub generator\n // relies on it.\n conf.title = documentTitle;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-link\";\n\n/**\n * @param {object} link\n * @param {string} link.key\n * @param {string} [link.class]\n * @param {LinkData[]} [link.data]\n */\nexport default function showLink(link) {\n if (!link.key) {\n const msg =\n \"Found a link without `key` attribute in the configuration. See dev console.\";\n showWarning(msg, name);\n console.warn(msg, link);\n return;\n }\n return html`\n <dt class=\"${link.class ? link.class : null}\">${link.key}</dt>\n ${link.data ? link.data.map(showLinkData) : showLinkData(link)}\n `;\n}\n\n/**\n * @typedef {object} LinkData\n * @property {string} [LinkData.class]\n * @property {string} [LinkData.href]\n * @property {string} [LinkData.value]\n * @param {LinkData} data\n */\nfunction showLinkData(data) {\n return html`<dd class=\"${data.class ? data.class : null}\">\n ${data.href\n ? html`<a href=\"${data.href}\">${data.value || data.href}</a>`\n : data.value}\n </dd>`;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-logo\";\n\n/**\n * @param {object} logo\n * @param {string} logo.src\n * @param {string} logo.url\n * @param {string} logo.alt\n * @param {string} [logo.id]\n * @param {number} [logo.width]\n * @param {number} [logo.height]\n */\nexport default function showLogo(logo) {\n /** @type {HTMLAnchorElement} */\n const a = html`<a href=\"${logo.url || \"\"}\" class=\"logo\"></a>`;\n if (!logo.alt) {\n const msg = \"Found spec logo without an `alt` attribute.\";\n showWarning(msg, name, { elements: [a] });\n }\n /** @type {HTMLImageElement} */\n const img = html`<img\n id=\"${logo.id}\"\n alt=\"${logo.alt}\"\n width=\"${logo.width}\"\n height=\"${logo.height}\"\n />`;\n // avoid triggering 404 requests from dynamically generated\n // hyperHTML attribute values\n img.src = logo.src;\n a.append(img);\n return a;\n}\n","// @ts-check\nimport { humanDate, showError, toShortIsoDate } from \"../../core/utils.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst name = \"core/templates/show-people\";\n\nconst localizationStrings = {\n en: {\n until(date) {\n return html` Until ${date} `;\n },\n },\n es: {\n until(date) {\n return html` Hasta ${date} `;\n },\n },\n ko: {\n until(date) {\n return html` ${date} 이전 `;\n },\n },\n ja: {\n until(date) {\n return html` ${date} 以前 `;\n },\n },\n de: {\n until(date) {\n return html` bis ${date} `;\n },\n },\n zh: {\n until(date) {\n return html` 直到 ${date} `;\n },\n },\n};\n\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nconst orcidIcon = html`<svg\n width=\"16\"\n height=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n>\n <style>\n .st1 {\n fill: #fff;\n }\n </style>\n <path\n d=\"M256 128c0 70.7-57.3 128-128 128S0 198.7 0 128 57.3 0 128 0s128 57.3 128 128z\"\n fill=\"#a6ce39\"\n />\n <path\n class=\"st1\"\n d=\"M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z\"\n />\n</svg>`;\n\n/**\n * @typedef {object} Person\n * @property {string} [Person.name]\n * @property {string} [Person.company]\n * @property {string|number} [Person.w3cid]\n * @property {string} [Person.mailto]\n * @property {string} [Person.url]\n * @property {string} [Person.orcid]\n * @property {string} [Person.company]\n * @property {string} [Person.companyURL]\n * @property {string} [Person.note]\n * @property {string} [Person.retiredDate]\n * @property {PersonExtras} [Person.extras]\n *\n * @typedef {object} PersonExtras\n * @property {string} PersonExtras.name\n * @property {string} [PersonExtras.class]\n * @property {string} [PersonExtras.href]\n *\n * @param {Person[]} persons\n */\nexport default function showPeople(persons = []) {\n const l10n = localizationStrings[lang];\n return persons.map(getItem);\n\n function getItem(p) {\n const personName = [p.name]; // treated as opt-in HTML by hyperHTML\n const company = [p.company];\n const editorid = p.w3cid ? parseInt(p.w3cid, 10) : null;\n /** @type {HTMLElement} */\n const dd = html`<dd\n class=\"p-author h-card vcard\"\n data-editor-id=\"${editorid}\"\n ></dd>`;\n const span = document.createDocumentFragment();\n const contents = [];\n if (p.mailto) {\n contents.push(html`<a\n class=\"ed_mailto u-email email p-name\"\n href=\"${`mailto:${p.mailto}`}\"\n >${personName}</a\n >`);\n } else if (p.url) {\n contents.push(\n html`<a class=\"u-url url p-name fn\" href=\"${p.url}\">${personName}</a>`\n );\n } else {\n contents.push(html`<span class=\"p-name fn\">${personName}</span>`);\n }\n if (p.orcid) {\n contents.push(\n html`<a class=\"p-name orcid\" href=\"${p.orcid}\"\n >${orcidIcon.cloneNode(true)}\n </a>`\n );\n }\n if (p.company) {\n if (p.companyURL) {\n contents.push(\n html`\n (<a class=\"p-org org h-org h-card\" href=\"${p.companyURL}\"\n >${company}</a\n >)\n `\n );\n } else {\n contents.push(html` (${company}) `);\n }\n }\n if (p.note) contents.push(document.createTextNode(` (${p.note})`));\n if (p.extras) {\n const results = p.extras\n // Remove empty names\n .filter(extra => extra.name && extra.name.trim())\n // Convert to HTML\n .map(getExtra);\n for (const result of results) {\n contents.push(document.createTextNode(\", \"), result);\n }\n }\n if (p.retiredDate) {\n const retiredDate = new Date(p.retiredDate);\n const isValidDate = retiredDate.toString() !== \"Invalid Date\";\n const timeElem = document.createElement(\"time\");\n timeElem.textContent = isValidDate\n ? humanDate(retiredDate)\n : \"Invalid Date\"; // todo: Localise invalid date\n if (!isValidDate) {\n const msg = \"The date is invalid. The expected format is YYYY-MM-DD.\";\n const title = \"Invalid date\";\n showError(msg, name, { title, elements: [timeElem] });\n }\n timeElem.dateTime = toShortIsoDate(retiredDate);\n contents.push(html` - ${l10n.until(timeElem)} `);\n }\n\n // @ts-ignore: hyperhtml types only support Element but we use a DocumentFragment here\n html.bind(span)`${contents}`;\n dd.appendChild(span);\n return dd;\n }\n\n function getExtra(extra) {\n const span = html`<span class=\"${extra.class || null}\"></span>`;\n let textContainer = span;\n if (extra.href) {\n textContainer = html`<a href=\"${extra.href}\"></a>`;\n span.appendChild(textContainer);\n }\n textContainer.textContent = extra.name;\n return span;\n }\n}\n","// @ts-check\nimport { getIntlData, showWarning } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nconst name = \"dini/templates/headers\";\n\nconst ccLicense = \"https://creativecommons.org/licenses/by/4.0/legalcode\";\n\nconst localizationStrings = {\n en: {\n author: \"Author:\",\n authors: \"Authors:\",\n editor: \"Editor:\",\n editors: \"Editors:\",\n former_editor: \"Former editor:\",\n former_editors: \"Former editors:\",\n latest_editors_draft: \"Latest editor's draft:\",\n latest_published_version: \"Latest published version:\",\n this_version: \"This version:\",\n },\n ko: {\n author: \"저자:\",\n authors: \"저자:\",\n editor: \"편집자:\",\n editors: \"편집자:\",\n former_editor: \"이전 편집자:\",\n former_editors: \"이전 편집자:\",\n latest_editors_draft: \"최신 편집 초안:\",\n latest_published_version: \"최신 버전:\",\n this_version: \"현재 버전:\",\n },\n zh: {\n author: \"作者:\",\n authors: \"作者:\",\n editor: \"编辑:\",\n editors: \"编辑:\",\n former_editor: \"原编辑:\",\n former_editors: \"原编辑:\",\n latest_editors_draft: \"最新编辑草稿:\",\n latest_published_version: \"最新发布版本:\",\n this_version: \"本版本:\",\n },\n ja: {\n author: \"著者:\",\n authors: \"著者:\",\n editor: \"編者:\",\n editors: \"編者:\",\n former_editor: \"以前の版の編者:\",\n former_editors: \"以前の版の編者:\",\n latest_editors_draft: \"最新の編集用草案:\",\n latest_published_version: \"最新バージョン:\",\n this_version: \"このバージョン:\",\n },\n nl: {\n author: \"Auteur:\",\n authors: \"Auteurs:\",\n editor: \"Redacteur:\",\n editors: \"Redacteurs:\",\n latest_editors_draft: \"Laatste werkversie:\",\n latest_published_version: \"Laatst gepubliceerde versie:\",\n this_version: \"Deze versie:\",\n },\n es: {\n author: \"Autor:\",\n authors: \"Autores:\",\n editor: \"Editor:\",\n editors: \"Editores:\",\n latest_editors_draft: \"Borrador de editor mas reciente:\",\n latest_published_version: \"Versión publicada mas reciente:\",\n this_version: \"Ésta versión:\",\n },\n de: {\n author: \"Autor/in:\",\n authors: \"Autor/innen:\",\n editor: \"Redaktion:\",\n editors: \"Redaktion:\",\n former_editor: \"Frühere Mitwirkende:\",\n former_editors: \"Frühere Mitwirkende:\",\n latest_editors_draft: \"Letzter Entwurf:\",\n latest_published_version: \"Letzte publizierte Fassung:\",\n this_version: \"Diese Fassung:\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nfunction getSpecSubTitleElem(conf) {\n let specSubTitleElem = document.querySelector(\"h2#subtitle\");\n\n if (specSubTitleElem && specSubTitleElem.parentElement) {\n specSubTitleElem.remove();\n conf.subtitle = specSubTitleElem.textContent.trim();\n } else if (conf.subtitle) {\n specSubTitleElem = document.createElement(\"h2\");\n specSubTitleElem.textContent = conf.subtitle;\n specSubTitleElem.id = \"subtitle\";\n }\n if (specSubTitleElem) {\n specSubTitleElem.classList.add(\"subtitle\");\n }\n return specSubTitleElem;\n}\n\nexport default conf => {\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${document.querySelector(\"h1#title\")}\n ${getSpecSubTitleElem(conf)}\n <h2>\n ${conf.textStatus}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >\n </h2>\n <dl>\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${renderCopyright(conf)}\n <hr />\n </div>`;\n};\n\n/**\n * @param {string} text\n * @param {string} url\n * @param {string=} cssClass\n */\nfunction linkLicense(text, url, cssClass) {\n return html`<a rel=\"license\" href=\"${url}\" class=\"${cssClass}\">${text}</a>`;\n}\n\nfunction renderCopyright(conf) {\n // If there is already a copyright, let's relocate it.\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n return existingCopyright;\n }\n if (conf.hasOwnProperty(\"overrideCopyright\")) {\n const msg = \"The `overrideCopyright` configuration option is deprecated.\";\n const hint = 'Please use `<p class=\"copyright\">` instead.';\n showWarning(msg, name, { hint });\n }\n return conf.overrideCopyright\n ? [conf.overrideCopyright]\n : html`<p class=\"copyright\">\n Dieses Dokument ist lizensiert unter\n ${linkLicense(\n \"Creative Commons Attribution 4.0 International Public License\",\n ccLicense,\n \"subfoot\"\n )}.\n </p>`;\n}\n","// @ts-check\n// Module dini/headers\n// Generate the headers material based on the provided configuration.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n// - editors: an array of people editing the document (at least one is required). People\n// are defined using:\n// - name: the person's name (required)\n// - url: URI for the person's home page\n// - company: the person's company\n// - companyURL: the URI for the person's company\n// - mailto: the person's email\n// - note: a note on the person (e.g. former editor)\n// - authors: an array of people who are contributing authors of the document.\n// - formerEditors: an array of people that had earlier edited the document but no longer edit.\n// - subtitle: a subtitle for the specification\n// - publishDate: the date to use for the publication, default to document.lastModified, and\n// failing that to now. The format is YYYY-MM-DD or a Date object.\n// - alternateFormats: a list of alternate formats for the document, each of which being\n// defined by:\n// - uri: the URI to the alternate\n// - label: a label for the alternate\n// - lang: optional language\n// - type: optional MIME type\n// - logos: a list of logos to use instead of the W3C logo, each of which being defined by:\n// - src: the URI to the logo (target of <img src=>)\n// - alt: alternate text for the image (<img alt=>), defaults to \"Logo\" or \"Logo 1\", \"Logo 2\", ...\n// if src is not specified, this is the text of the \"logo\"\n// - height: optional height of the logo (<img height=>)\n// - width: optional width of the logo (<img width=>)\n// - url: the URI to the organization represented by the logo (target of <a href=>)\n// - id: optional id for the logo, permits custom CSS (wraps logo in <span id=>)\n// - each logo element must specify either src or alt\n// - otherLinks: an array of other links that you might want in the header (e.g., link github, twitter, etc).\n// Example of usage: [{key: \"foo\", href:\"https://b\"}, {key: \"bar\", href:\"https://\"}].\n// Allowed values are:\n// - key: the key for the <dt> (e.g., \"Bug Tracker\"). Required.\n// - value: The value that will appear in the <dd> (e.g., \"GitHub\"). Optional.\n// - href: a URL for the value (e.g., \"https://foo.com/issues\"). Optional.\n// - class: a string representing CSS classes. Optional.\n// - license: can be one of the following\n// - \"cc-by-sa\"\n// - \"cc-by\"\n// - \"cc0\"\nimport { ISODate, showError } from \"../core/utils.js\";\nimport headersTmpl from \"./templates/headers.js\";\nimport { pub } from \"../core/pubsubhub.js\";\n\nexport const name = \"dini/headers\";\n\nconst DINIDate = new Intl.DateTimeFormat([\"de-DE\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n});\n\nconst status2text = {\n unofficial: \"Entwurf vom\",\n base: \"Spezifikation vom\",\n};\n\n/**\n * @param {*} conf\n * @param {string} prop\n * @param {string | number | Date} fallbackDate\n */\nfunction validateDateAndRecover(conf, prop, fallbackDate = new Date()) {\n const date = conf[prop] ? new Date(conf[prop]) : new Date(fallbackDate);\n // if date is valid\n if (Number.isFinite(date.valueOf())) {\n const formattedDate = ISODate.format(date);\n return new Date(formattedDate);\n }\n const msg =\n `[\\`${prop}\\`](https://github.com/w3c/respec/wiki/${prop}) ` +\n `is not a valid date: \"${conf[prop]}\". Expected format 'YYYY-MM-DD'.`;\n showError(msg, name);\n return new Date(ISODate.format(new Date()));\n}\n\nexport function run(conf) {\n conf.isUnofficial = conf.specStatus === \"unofficial\";\n conf.isBasic = conf.specStatus === \"base\";\n if (!conf.specStatus) {\n const msg = \"Missing required configuration: `specStatus`\";\n showError(msg, name);\n }\n conf.title = document.title || \"Kein Titel\";\n if (!conf.subtitle) conf.subtitle = \"\";\n conf.publishDate = validateDateAndRecover(\n conf,\n \"publishDate\",\n document.lastModified\n );\n conf.publishYear = conf.publishDate.getUTCFullYear();\n conf.publishHumanDate = DINIDate.format(conf.publishDate);\n const peopCheck = function (it) {\n if (!it.name) {\n const msg = \"All authors and editors must have a name.\";\n showError(msg, name);\n }\n if (it.orcid) {\n try {\n it.orcid = normalizeOrcid(it.orcid);\n } catch (e) {\n const msg = `\"${it.orcid}\" is not an ORCID. ${e.message}`;\n showError(msg, name);\n // A failed orcid link could link to something outside of orcid,\n // which would be misleading.\n delete it.orcid;\n }\n }\n };\n if (!conf.formerEditors) conf.formerEditors = [];\n if (conf.editors) {\n conf.editors.forEach(peopCheck);\n // Move any editors with retiredDate to formerEditors.\n for (let i = 0; i < conf.editors.length; i++) {\n const editor = conf.editors[i];\n if (\"retiredDate\" in editor) {\n conf.formerEditors.push(editor);\n conf.editors.splice(i--, 1);\n }\n }\n }\n if (!conf.editors || conf.editors.length === 0) {\n const msg = \"At least one editor is required\";\n showError(msg, name);\n }\n if (conf.formerEditors.length) {\n conf.formerEditors.forEach(peopCheck);\n }\n if (conf.authors) {\n conf.authors.forEach(peopCheck);\n }\n conf.multipleEditors = conf.editors && conf.editors.length > 1;\n conf.multipleFormerEditors = conf.formerEditors.length > 1;\n conf.multipleAuthors = conf.authors && conf.authors.length > 1;\n (conf.alternateFormats || []).forEach(it => {\n if (!it.uri || !it.label) {\n const msg = \"All alternate formats must have a uri and a label.\";\n showError(msg, name);\n }\n });\n if (conf.copyrightStart && conf.copyrightStart == conf.publishYear)\n conf.copyrightStart = \"\";\n conf.textStatus = status2text[conf.specStatus];\n conf.dashDate = ISODate.format(conf.publishDate);\n conf.publishISODate = conf.publishDate.toISOString();\n // configuration done - yay!\n\n // insert into document\n const header = headersTmpl(conf);\n document.body.prepend(header);\n document.body.classList.add(\"h-entry\");\n\n // Requested by https://github.com/w3c/respec/issues/504\n // Makes a record of a few auto-generated things.\n pub(\"amend-user-config\", {\n publishISODate: conf.publishISODate,\n generatedSubtitle: `${conf.longStatus} ${conf.publishHumanDate}`,\n });\n}\n\n/**\n * @param {string} orcid Either an ORCID URL or just the 16-digit ID which comes after the /\n * @return {string} the full ORCID URL. Throws an error if the ID is invalid.\n */\nfunction normalizeOrcid(orcid) {\n const orcidUrl = new URL(orcid, \"https://orcid.org/\");\n if (orcidUrl.origin !== \"https://orcid.org\") {\n throw new Error(\n `The origin should be \"https://orcid.org\", not \"${orcidUrl.origin}\".`\n );\n }\n\n // trailing slash would mess up checksum\n const orcidId = orcidUrl.pathname.slice(1).replace(/\\/$/, \"\");\n if (!/^\\d{4}-\\d{4}-\\d{4}-\\d{3}(\\d|X)$/.test(orcidId)) {\n throw new Error(\n `ORCIDs have the format \"1234-1234-1234-1234\", not \"${orcidId}\"`\n );\n }\n\n // calculate checksum as per https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier\n const lastDigit = orcidId[orcidId.length - 1];\n const remainder = orcidId\n .split(\"\")\n .slice(0, -1)\n .filter(c => /\\d/.test(c))\n .map(Number)\n .reduce((acc, c) => (acc + c) * 2, 0);\n const lastDigitInt = (12 - (remainder % 11)) % 11;\n const lastDigitShould = lastDigitInt === 10 ? \"X\" : String(lastDigitInt);\n if (lastDigit !== lastDigitShould) {\n throw new Error(`\"${orcidId}\" has an invalid checksum.`);\n }\n\n return orcidUrl.href;\n}\n","// @ts-check\n// Module dini/abstract\n// Handle the abstract section properly.\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"dini/abstract\";\n\nconst localizationStrings = {\n en: {\n abstract: \"Abstract\",\n },\n ko: {\n abstract: \"요약\",\n },\n zh: {\n abstract: \"摘要\",\n },\n ja: {\n abstract: \"要約\",\n },\n nl: {\n abstract: \"Samenvatting\",\n },\n es: {\n abstract: \"Resumen\",\n },\n de: {\n abstract: \"Zusammenfassung\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run() {\n const abs = document.getElementById(\"abstract\");\n if (!abs) {\n const msg = `Document must have one element with \\`id=\"abstract\"`;\n showError(msg, name);\n return;\n }\n abs.classList.add(\"introductory\");\n let abstractHeading = document.querySelector(\"#abstract>h2\");\n if (abstractHeading) {\n return;\n }\n abstractHeading = document.createElement(\"h2\");\n abstractHeading.textContent = l10n.abstract;\n abs.prepend(abstractHeading);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Module core/data-abbr\n// - Finds all elements with data-abbr attribute and processes them.\nimport { showError } from \"./utils.js\";\nexport const name = \"core/dfn-abbr\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = document.querySelectorAll(\"[data-abbr]\");\n for (const elem of elements) {\n const { localName } = elem;\n switch (localName) {\n case \"dfn\":\n processDfnElement(elem);\n break;\n default: {\n const msg = `\\`data-abbr\\` attribute not supported on \\`${localName}\\` elements.`;\n showError(msg, name, {\n elements: [elem],\n title: \"Error: unsupported.\",\n });\n }\n }\n }\n}\n/**\n * @param {HTMLElement} dfn\n */\nfunction processDfnElement(dfn) {\n const abbr = generateAbbreviation(dfn);\n // get normalized <dfn> textContent to remove spaces, tabs, new lines.\n const fullForm = dfn.textContent.replace(/\\s\\s+/g, \" \").trim();\n dfn.insertAdjacentHTML(\n \"afterend\",\n ` (<abbr title=\"${fullForm}\">${abbr}</abbr>)`\n );\n const lt = dfn.dataset.lt || \"\";\n dfn.dataset.lt = lt\n .split(\"|\")\n .filter(i => i.trim())\n .concat(abbr)\n .join(\"|\");\n}\n\nfunction generateAbbreviation(elem) {\n if (elem.dataset.abbr) return elem.dataset.abbr;\n // Generates abbreviation from textContent\n // e.g., \"Permanent Account Number\" -> \"PAN\"\n return elem.textContent\n .match(/\\b([a-z])/gi)\n .join(\"\")\n .toUpperCase();\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://api.specref.org/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\n/** @param {BiblioData|string} ref */\nfunction stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\n// Module dini/conformance\n// Handle the conformance section properly.\nimport { getIntlData, htmlJoinAnd, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { renderInlineCitation } from \"../core/render-biblio.js\";\nimport { rfc2119Usage } from \"../core/inlines.js\";\nexport const name = \"dini/conformance\";\n\nconst localizationStrings = {\n en: {\n conformance: \"Conformance\",\n normativity:\n \"As well as sections marked as non-normative, all authoring guidelines, \" +\n \"diagrams, examples, and notes in this specification are non-normative. \" +\n \"Everything else in this specification is normative.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n The key word${plural ? \"s\" : \"\"} ${keywords} in this document\n ${plural ? \"are\" : \"is\"} to be interpreted as described in\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n when, and only when, they appear in all capitals, as shown here.\n </p>`;\n },\n },\n de: {\n conformance: \"Anforderungen\",\n normativity:\n \"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten \" +\n \"sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument \" +\n \"nicht normativ. Alle anderen Angaben sind normativ.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n ${plural ? \"Die Schlüsselwörter\" : \"Das Schlüsselwort\"} ${keywords} in\n diesem Dokument ${plural ? \"sind\" : \"ist\"} gemäß\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n und unter Berücksichtigung von\n <a href=\"https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst\"\n >2119de</a\n >\n zu interpretieren, wenn und nur wenn ${plural ? \"sie\" : \"es\"} wie hier\n gezeigt durchgehend groß geschrieben wurde${plural ? \"n\" : \"\"}.\n </p>`;\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {Element} conformance\n * @param {*} conf\n */\nfunction processConformance(conformance, conf) {\n const terms = [...Object.keys(rfc2119Usage)];\n // Add RFC2119 to bibliography\n if (terms.length) {\n conf.normativeReferences.add(\"RFC2119\");\n conf.normativeReferences.add(\"RFC8174\");\n }\n // Put in the 2119 clause and reference\n const keywords = htmlJoinAnd(\n terms.sort(),\n item => html`<em class=\"rfc2119\">${item}</em>`\n );\n const plural = terms.length > 1;\n const content = html`\n <h2>${l10n.conformance}</h2>\n <p>${l10n.normativity}</p>\n ${terms.length ? l10n.keywordInterpretation(keywords, plural) : null}\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run(conf) {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance && !conformance.classList.contains(\"override\")) {\n processConformance(conformance, conf);\n }\n // Warn when there are RFC2119/RFC8174 keywords, but not conformance section\n if (!conformance && Object.keys(rfc2119Usage).length) {\n const msg = `Document uses RFC2119 keywords but lacks a conformance section.`;\n const hint = 'Please add a `<section id=\"conformance\">`.';\n showWarning(msg, name, { hint });\n }\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","/* --- EXAMPLES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nspan.example-title {\n text-transform: none;\n}\n\naside.example,\ndiv.example,\ndiv.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\n\ndiv.illegal-example {\n color: red;\n}\n\ndiv.illegal-example p {\n color: black;\n}\n\naside.example,\ndiv.example {\n padding: 0.5em;\n border-left-width: 0.5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: 0.1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example span.example-title {\n color: #999;\n}\n\n.example pre {\n background-color: rgba(0, 0, 0, 0.03);\n}\n`;\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport css from \"../styles/examples.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","/* --- ISSUES/NOTES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.issue-label {\n text-transform: initial;\n}\n\n.warning > p:first-child { margin-top: 0 }\n.warning {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n}\nspan.warning { padding: .1em .5em .15em; }\n\n.issue.closed span.issue-number {\n text-decoration: line-through;\n}\n\n.warning {\n border-color: #f11;\n border-width: .2em;\n border-style: solid;\n background: #fbe9e9;\n}\n\n.warning-title:before{\n content: \"⚠\"; /*U+26A0 WARNING SIGN*/\n font-size: 1.3em;\n float: left;\n padding-right: .3em;\n margin-top: -0.3em;\n}\n\nli.task-list-item {\n list-style: none;\n}\n\ninput.task-list-item-checkbox {\n margin: 0 0.35em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.issue a.respec-gh-label {\n padding: 5px;\n margin: 0 2px 0 2px;\n font-size: 10px;\n text-transform: none;\n text-decoration: none;\n font-weight: bold;\n border-radius: 4px;\n position: relative;\n bottom: 2px;\n border: none;\n display: inline-block;\n}\n`;\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport css from \"../styles/issues-notes.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nfunction serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","/*\nAdapted from Atom One Light by Daniel Gamage for ReSpec, with better color contrast\nOriginal One Light Syntax theme from https://github.com/atom/one-light-syntax\nbase: #fafafa\nmono-1: #383a42\nmono-2: #686b77\nmono-3: #a0a1a7\nhue-1: #0184bb\nhue-2: #4078f2\nhue-3: #a626a4\nhue-4: #50a14f\nhue-5: #e45649\nhue-5-2: #c91243\nhue-6: #986801\nhue-6-2: #c18401\n*/\n\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n color: #383a42;\n background: #fafafa;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #717277;\n font-style: italic;\n}\n\n.hljs-doctag,\n.hljs-keyword,\n.hljs-formula {\n color: #a626a4;\n}\n\n.hljs-section,\n.hljs-name,\n.hljs-selector-tag,\n.hljs-deletion,\n.hljs-subst {\n color: #ca4706;\n font-weight: bold;\n}\n\n.hljs-literal {\n color: #0b76c5;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta-string {\n color: #42803C;\n}\n\n.hljs-built_in,\n.hljs-class .hljs-title {\n color: #9a6a01;\n}\n\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-type,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-number {\n color: #986801;\n}\n\n.hljs-symbol,\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-title {\n color: #336ae3;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n.hljs-link {\n text-decoration: underline;\n}\n`;\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport css from \"../styles/highlight.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n document.head.appendChild(\n html`<style>\n ${css}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\nvar.respec-hl {\n color: var(--color, #000);\n background-color: var(--bg-color);\n box-shadow: 0 0 0px 2px var(--bg-color);\n}\n\n/* highlight colors\n https://github.com/w3c/tr-design/issues/152\n*/\nvar.respec-hl-c1 {\n --bg-color: #f4d200;\n}\n\nvar.respec-hl-c2 {\n --bg-color: #ff87a2;\n}\n\nvar.respec-hl-c3 {\n --bg-color: #96e885;\n}\n\nvar.respec-hl-c4 {\n --bg-color: #3eeed2;\n}\n\nvar.respec-hl-c5 {\n --bg-color: #eacfb6;\n}\n\nvar.respec-hl-c6 {\n --bg-color: #82ddff;\n}\n\nvar.respec-hl-c7 {\n --bg-color: #ffbcf2;\n}\n\n@media print {\n var.respec-hl {\n background: none;\n color: #000;\n box-shadow: unset;\n }\n}\n`;\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport css from \"../styles/var.css.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","/* dfn popup panel that list all local references to a dfn */\n/**\n * TODO: Revert changes due to https://github.com/w3c/respec/pull/2888 when\n * https://github.com/w3c/css-validator/pull/111 is fixed.\n */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\ndfn {\n cursor: pointer;\n}\n\n.dfn-panel {\n position: absolute;\n z-index: 35;\n min-width: 300px;\n max-width: 500px;\n padding: 0.5em 0.75em;\n margin-top: 0.6em;\n font: small Helvetica Neue, sans-serif, Droid Sans Fallback;\n background: #fff;\n color: black;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n}\n/* Triangle/caret */\n.dfn-panel:not(.docked) > .caret {\n position: absolute;\n top: -9px;\n}\n.dfn-panel:not(.docked) > .caret::before,\n.dfn-panel:not(.docked) > .caret::after {\n content: \"\";\n position: absolute;\n border: 10px solid transparent;\n border-top: 0;\n border-bottom: 10px solid #fff;\n top: 0;\n}\n.dfn-panel:not(.docked) > .caret::before {\n border-bottom: 9px solid #a2a9b1;\n}\n\n.dfn-panel * {\n margin: 0;\n}\n\n.dfn-panel b {\n display: block;\n color: #000;\n margin-top: 0.25em;\n}\n\n.dfn-panel ul a[href] {\n color: #333;\n}\n\n.dfn-panel > div {\n display: flex;\n}\n\n.dfn-panel a.self-link {\n font-weight: bold;\n margin-right: auto;\n}\n\n.dfn-panel .marker {\n padding: 0.1em;\n margin-left: 0.5em;\n border-radius: 0.2em;\n text-align: center;\n white-space: nowrap;\n font-size: 90%;\n color: #040b1c;\n}\n\n.dfn-panel .marker.dfn-exported {\n background: #d1edfd;\n box-shadow: 0 0 0 0.125em #1ca5f940;\n}\n.dfn-panel .marker.idl-block {\n background: #8ccbf2;\n box-shadow: 0 0 0 0.125em #0670b161;\n}\n\n.dfn-panel a:not(:hover) {\n text-decoration: none !important;\n border-bottom: none !important;\n}\n\n.dfn-panel a[href]:hover {\n border-bottom-width: 1px;\n}\n\n.dfn-panel ul {\n padding: 0;\n}\n\n.dfn-panel li {\n margin-left: 1em;\n}\n\n.dfn-panel.docked {\n position: fixed;\n left: 0.5em;\n top: unset;\n bottom: 2em;\n margin: 0 auto;\n /* 0.75em from padding (x2), 0.5em from left position, 0.2em border (x2) */\n max-width: calc(100vw - 0.75em * 2 - 0.5em - 0.2em * 2);\n max-height: 30vh;\n overflow: auto;\n}\n`;\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport css from \"../styles/dfn-panel.css.js\";\nimport { fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar {\n position: relative;\n cursor: pointer;\n}\n\nvar[data-type]::before,\nvar[data-type]::after {\n position: absolute;\n left: 50%;\n top: -6px;\n opacity: 0;\n transition: opacity 0.4s;\n pointer-events: none;\n}\n\n/* the triangle or arrow or caret or whatever */\nvar[data-type]::before {\n content: \"\";\n transform: translateX(-50%);\n border-width: 4px 6px 0 6px;\n border-style: solid;\n border-color: transparent;\n border-top-color: #000;\n}\n\n/* actual text */\nvar[data-type]::after {\n content: attr(data-type);\n transform: translateX(-50%) translateY(-100%);\n background: #000;\n text-align: center;\n /* additional styling */\n font-family: \"Dank Mono\", \"Fira Code\", monospace;\n font-style: normal;\n padding: 6px;\n border-radius: 3px;\n color: #daca88;\n text-indent: 0;\n font-weight: normal;\n}\n\nvar[data-type]:hover::after,\nvar[data-type]:hover::before {\n opacity: 1;\n}\n`;\n","// @ts-check\n/**\n * Module core/data-type\n * Propagates data type of a <var> to subsequent instances within a section.\n * Also adds the CSS for the data type tooltip.\n * Set `conf.highlightVars = true` to enable.\n */\nimport css from \"../styles/datatype.css.js\";\n\nexport const name = \"core/data-type\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n let section = null;\n const varMap = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const variables = document.querySelectorAll(\"section var\");\n for (const varElem of variables) {\n const currentSection = varElem.closest(\"section\");\n if (section !== currentSection) {\n section = currentSection;\n varMap.clear();\n }\n if (varElem.dataset.type) {\n varMap.set(varElem.textContent.trim(), varElem.dataset.type);\n continue;\n }\n const type = varMap.get(varElem.textContent.trim());\n if (type) varElem.dataset.type = type;\n }\n}\n","/* For assertions in lists containing algorithms */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.assert {\n background: #eee;\n border-left: 0.5em solid #aaa;\n padding: 0.3em;\n}\n`;\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\nimport css from \"../styles/algorithms.css.js\";\n\nexport const name = \"core/algorithms\";\n\nexport function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n/**\n * Fetches commits between two commitish (tag or commit) - `from` and `to=HEAD`\n * and shows them as a list of \"changes during\" those commitish. If a filter\n * function is provided by the user, it is used to filter the commits that are\n * to be shown. Otherwise, all commits are shown.\n *\n * @typedef {{message: string, hash: string}} Commit\n */\nimport { github } from \"../github.js\";\nimport { html } from \"../import-maps.js\";\nimport { showError } from \"../utils.js\";\n\nexport const name = \"rs-changelog\";\n\nexport const element = class ChangelogElement extends HTMLElement {\n constructor() {\n super();\n this.props = {\n from: this.getAttribute(\"from\"),\n to: this.getAttribute(\"to\") || \"HEAD\",\n /** @type {(commit: Commit) => boolean} */\n filter:\n typeof window[this.getAttribute(\"filter\")] === \"function\"\n ? window[this.getAttribute(\"filter\")]\n : () => true,\n };\n }\n\n connectedCallback() {\n const { from, to, filter } = this.props;\n html.bind(this)`\n <ul>\n ${{\n any: fetchCommits(from, to, filter)\n .then(commits => toHTML(commits))\n .catch(error => showError(error.message, name, { elements: [this] }))\n .finally(() => {\n this.dispatchEvent(new CustomEvent(\"done\"));\n }),\n placeholder: \"Loading list of commits...\",\n }}\n </ul>\n `;\n }\n};\n\nasync function fetchCommits(from, to, filter) {\n /** @type {Commit[]} */\n let commits;\n try {\n const gh = await github;\n if (!gh) {\n throw new Error(\"`respecConfig.github` is not set\");\n }\n const url = new URL(\"commits\", `${gh.apiBase}/${gh.fullName}/`);\n url.searchParams.set(\"from\", from);\n url.searchParams.set(\"to\", to);\n\n const res = await fetch(url.href);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n commits = await res.json();\n if (!commits.length) {\n throw new Error(`No commits between ${from}..${to}.`);\n }\n commits = commits.filter(filter);\n } catch (error) {\n const msg = `Error loading commits from GitHub. ${error.message}`;\n console.error(error);\n throw new Error(msg);\n }\n return commits;\n}\n\nasync function toHTML(commits) {\n const { repoURL } = await github;\n return commits.map(commit => {\n const [message, prNumber = null] = commit.message.split(/\\(#(\\d+)\\)/, 2);\n const commitURL = `${repoURL}commit/${commit.hash}`;\n const prURL = prNumber ? `${repoURL}pull/${prNumber}` : null;\n const pr = prNumber && html` (<a href=\"${prURL}\">#${prNumber}</a>)`;\n return html`<li><a href=\"${commitURL}\">${message.trim()}</a>${pr}</li>`;\n });\n}\n","// @ts-check\n/**\n * Registers custom elements and waits for them to finish their processing.\n *\n * Every custom element file exports:\n * - `name`: registered name of the custom element, prefixed with `rs-`.\n * - `element`: class defintion of the custom element.\n *\n * Every custom element must dispatch a CustomEvent 'done' that tells the\n * element has finished its processing, with or without errors.\n *\n * @typedef {{ name: string, element: CustomElementConstructor }} CustomElementDfn\n */\n\nimport * as changelog from \"./rs-changelog.js\";\n/** @type {CustomElementDfn[]} */\nconst CUSTOM_ELEMENTS = [changelog];\n\nexport const name = \"core/custom-elements/index\";\n\nexport async function run() {\n // prepare and register elements\n CUSTOM_ELEMENTS.forEach(el => {\n customElements.define(el.name, el.element);\n });\n\n // wait for each element to be ready\n const selectors = CUSTOM_ELEMENTS.map(el => el.name).join(\", \");\n const elems = document.querySelectorAll(selectors);\n const readyPromises = [...elems].map(\n el => new Promise(res => el.addEventListener(\"done\", res, { once: true }))\n );\n await Promise.all(readyPromises);\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","test","rtrim","relativeBase","indexOf","str","invert","l","length","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","source","obj","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","key","i","arguments","Object","hasOwnProperty","splitCells","tableRow","count","cells","match","offset","escaped","curr","split","splice","push","trim","findClosingBracket","b","level","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","raw","title","text","type","Tokenizer_1","options","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","slice","join","indentCodeCompensation","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","def","tag","table","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","nextChar","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","lastIndex","Math","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","tokens","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","token","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","body","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parse","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","unshift","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","t","defineProperty","r","a","delete","configurable","o","s","WeakSet","add","m","u","insertBefore","selected","selectedIndex","f","querySelectorAll","y","w","x","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","v","p","g","Array","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","constructor","_wire$","defineProperties","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","isArray","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","concat","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","attribute","values","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","it","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","dispatch","component","setState","idb","_idb","_marked","_pluralize","getIntlData","x_and_y","x_y_and_z","ISODate","Intl","DateTimeFormat","timeZone","year","month","day","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","array","mapper","docLang","ListFormat","format","lastComma","and","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","data","runTransforms","flist","funcArgs","methods","meth","showWarning","htmlJoinComma","joined","addId","pfx","txt","noLC","id","normalize","getElementById","nextId","getDfnTitles","titleSet","Set","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","ref","element","closestInformative","closest","isInformative","querySelector","startsWith","illegal","wrapInner","outer","wrapper","parents","selector","parent","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","super","getCanonicalKey","existingKey","find","makeSafeCopy","clone","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","comment","walkTree","nextNode","CaseInsensitiveMap","entries","RespecError","plugin","isWarning","assign","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","subscriptions","topic","from","cb","arg","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","respecVersion","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","head","includeConfig","params","URLSearchParams","search","overrideEntries","filter","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","reindent","lines","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","prepend","Builder","current","tagName","position","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","indentation","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","css","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hash","hasLink","isLegacyFrag","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","zh","defaultLang","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","nl","hasNoHeading","offendingMembers","getOwnPropertyNames","endsWith","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","isRecTrack","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","specStatus","highlightVars","addSectionLinks","privsecSectionRule","licenses","short","diniDefaults","isED","isNoTrack","isPR","wpt-tests-exist","logos","prependW3C","doJsonLd","license","shortName","showPreviousVersion","licenseInfo","computeProps","insertStyle","noReSpecCSS","resourceHints","createResourceHints","createBaseStyle","delimiter","separator","toKeyValuePairs","width","initial-scale","shrink-to-fit","createMetaViewport","styleFile","noToc","attachFixupScript","finalStyleURL","linkURL","styles","frag","reduce","nextLink","linkCSS","exportDoc","w3cStyle","processResponse","rawData","el","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","include","includeId","response","fetch","default_title","h1Elem","isConnected","documentTitle","isPreview","prNumber","prUrl","github","repoURL","setDocumentTitle","showLink","class","showLinkData","showLogo","logo","alt","img","height","until","date","es","ko","ja","orcidIcon","showPeople","persons","personName","company","editorid","w3cid","dd","span","contents","mailto","orcid","companyURL","note","extras","extra","getExtra","retiredDate","Date","isValidDate","timeElem","langs","toLocaleString","humanDate","dateTime","textContainer","ccLicense","author","authors","editor","editors","former_editor","former_editors","latest_editors_draft","latest_published_version","this_version","specSubTitleElem","subtitle","getSpecSubTitleElem","textStatus","dashDate","publishHumanDate","multipleEditors","formerEditors","multipleFormerEditors","multipleAuthors","otherLinks","existingCopyright","overrideCopyright","cssClass","renderCopyright","DINIDate","status2text","unofficial","isUnofficial","isBasic","publishDate","fallbackDate","Number","isFinite","formattedDate","validateDateAndRecover","lastModified","publishYear","getUTCFullYear","peopCheck","orcidUrl","orcidId","pathname","lastDigit","lastDigitInt","acc","lastDigitShould","normalizeOrcid","alternateFormats","uri","copyrightStart","publishISODate","toISOString","headersTmpl","generatedSubtitle","longStatus","abstract","abs","abstractHeading","processDfnElement","abbr","fullForm","insertAdjacentHTML","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","identifier","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","pop","allArgs","SyntaxError","reverse","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","unique","openIdb","biblioDB","isAlias","resolveAlias","TypeError","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","reference","promisesToAdd","flatMap","isInDB","put","close","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","ok","status","json","addAll","resolveRef","entry","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","etAl","publisher","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","conformance","normativity","keywordInterpretation","processConformance","terms","htmlJoinAnd","contains","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","plurals","size","userDefinedPlurals","uniquePlurals","makeTitle","num","report","number","examples","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","handleIssues","ins","ghIssues","getIssueNumber","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","issueBase","atRiskBase","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","searchParams","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","hasChildNodes","makeIssueSectionSummary","issuesAndNotes","apiBase","issueNumbers","fullName","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","container","list_of_figures","fig","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","every","decorateTableOfFigures","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","cleanup","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","duplicates","dfnFor","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","idl","first","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","xref","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","res","input","maxAge","Request","cache","cachedResponse","caches","headers","clonedResponse","customHeaders","Headers","expiryDate","now","cacheResponse","Response","blob","fetchAndCache","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","prefix","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","isNaN","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","mimeTypes","rsDocToDataURL","mimeType","validTypes","cloneDoc","insertions","metaViewport","metaCharset","metaGenerator","XMLSerializer","serializeToString","outerHTML","prettify","doctype","encodeURIComponent","save_snapshot","downloadLinks","fileName","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","fetchBase","workerPromise","workerScript","default","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","namespace","counter","gen","idGenerator","msgIdGenerator","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","re","activeClass","outputDoc","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","varMap","variables","currentSection","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors","file_a_bug","participate","commit_history","HTMLElement","props","to","fetchCommits","commits","commit","commitURL","pr","finally","gh","CUSTOM_ELEMENTS","customElements","readyPromises"],"mappings":"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C,oBAAqB,QACtB,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC5f6BkC,GAAU,SAASC,GAAgB,IAAIC,EAAE,GAAG,IAAIA,EAAE5b,QAAQA,QAAQ,MAAMuK,GAAGqR,EAAE5b,QAAQ,SAAS4b,EAAErR,GAAG,IAAI1C,EAAE0C,EAAEsR,eAAeC,EAAEvR,EAAES,eAAeH,EAAEkR,EAAEza,UAAU,OAAOuJ,EAAEmR,OAAO,SAASzR,GAAG,OAAOvI,KAAKd,IAAIqJ,WAAWA,EAAEvI,KAAK4F,IAAIiD,EAAElK,IAAI,SAAS4J,GAAG,OAAOvI,KAAKd,IAAIqJ,G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"} \ No newline at end of file diff --git a/builds/respec-geonovum.js b/builds/respec-geonovum.js index 874a0c6669..880aac68bf 100644 --- a/builds/respec-geonovum.js +++ b/builds/respec-geonovum.js @@ -1,147 +1,253 @@ -window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return ut})),Promise.resolve().then((function(){return Ut})),Promise.resolve().then((function(){return Wt})),Promise.resolve().then((function(){return s})),Promise.resolve().then((function(){return In})),Promise.resolve().then((function(){return qn})),Promise.resolve().then((function(){return Wn})),Promise.resolve().then((function(){return Gn})),Promise.resolve().then((function(){return Xn})),Promise.resolve().then((function(){return tr})),Promise.resolve().then((function(){return St})),Promise.resolve().then((function(){return ht})),Promise.resolve().then((function(){return nr})),Promise.resolve().then((function(){return co})),Promise.resolve().then((function(){return fo})),Promise.resolve().then((function(){return po})),Promise.resolve().then((function(){return bo})),Promise.resolve().then((function(){return xo})),Promise.resolve().then((function(){return Co})),Promise.resolve().then((function(){return Ro})),Promise.resolve().then((function(){return Ar})),Promise.resolve().then((function(){return Ko})),Promise.resolve().then((function(){return Mo})),Promise.resolve().then((function(){return Br})),Promise.resolve().then((function(){return Yo})),Promise.resolve().then((function(){return Xo})),Promise.resolve().then((function(){return ai})),Promise.resolve().then((function(){return li})),Promise.resolve().then((function(){return ui})),Promise.resolve().then((function(){return di})),Promise.resolve().then((function(){return ki})),Promise.resolve().then((function(){return Ri})),Promise.resolve().then((function(){return Oi})),Promise.resolve().then((function(){return Ii})),Promise.resolve().then((function(){return Ui})),Promise.resolve().then((function(){return Ji})),Promise.resolve().then((function(){return ts})),Promise.resolve().then((function(){return as})),Promise.resolve().then((function(){return ls})),Promise.resolve().then((function(){return ds})),Promise.resolve().then((function(){return ws})),Promise.resolve().then((function(){return dn}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},i=r.lang;var s=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:i,run:function(e){e.l10n=o[i]||o.en}});let a,c;const l=new WeakMap,u=new WeakMap,d=new WeakMap,f=new WeakMap,p=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(c||(c=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(l.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),r()},i=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",i)},o=()=>{t(b(e.result)),r()},i=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",i)});return t.then(t=>{t instanceof IDBCursor&&l.set(t,e)}).catch(()=>{}),p.set(t,e),t}(e);if(f.has(e))return f.get(e);const t=g(e);return t!==e&&(f.set(e,t),p.set(t,e)),t}const w=e=>p.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const i=async function(e,...t){const i=this.transaction(e,o?"readwrite":"readonly");let s=i.store;return r&&(s=s.index(t.shift())),(await Promise.all([s[n](...t),o&&i.done]))[0]};return k.set(t,i),i}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:i}={}){const s=indexedDB.open(e,t),a=b(s);return r&&s.addEventListener("upgradeneeded",e=>{r(b(s.result),e.oldVersion,e.newVersion,b(s.transaction))}),n&&s.addEventListener("blocked",()=>n()),a.then(e=>{i&&e.addEventListener("close",()=>i()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});var _,S=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(_={exports:{}},_.exports),_.exports);const E=/[&<>"']/,C=/[&<>"']/g,A=/[<>"']|&(?!#?\w+;)/,L=/[<>"']|&(?!#?\w+;)/g,R={"&":"&","<":"<",">":">",'"':""","'":"'"},T=e=>R[e];const N=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function j(e){return e.replace(N,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const z=/(^|[^\[])\^/g;const P=/[^\w:]/g,O=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const I={},D=/^[^:]+:\/*[^/]*$/,q=/^([^:]+:)[\s\S]*$/,M=/^([^:]+:\/*[^/]*)[\s\S]*$/;function B(e,t){I[" "+e]||(D.test(e)?I[" "+e]=e+"/":I[" "+e]=F(e,"/",!0));const n=-1===(e=I[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(q,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(M,"$1")+t:e+t}function F(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const i=e.charAt(r-o-1);if(i!==t||n){if(i===t||!n)break;o++}else o++}return e.substr(0,r-o)}var U={escape:function(e,t){if(t){if(E.test(e))return e.replace(C,T)}else if(A.test(e))return e.replace(L,T);return e},unescape:j,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(z,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(j(n)).replace(P,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!O.test(n)&&(n=B(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:B,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:F,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:W}=S,{rtrim:H,splitCells:G,escape:V,findClosingBracket:Z}=U;function K(e,t,n){const r=t.href,o=t.title?V(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:i}:{type:"image",raw:n,href:r,title:o,text:V(i)}}var J=class{constructor(e){this.options=e||W}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:H(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=H(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:G(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=G(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},i=t[0].match(this.rules.block.item);let s,a,c,l,u,d,f,p,h,m=!1,g=i.length;c=this.rules.block.listItemStart.exec(i[0]);for(let t=0;t<g;t++){if(s=i[t],e=s,this.options.pedantic||(h=s.match(new RegExp("\\n\\s*\\n {0,"+(c[0].length-1)+"}\\S")),h&&(u=s.length-h.index+i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),s=s.substring(0,h.index),e=s,g=t+1)),t!==g-1){if(l=this.rules.block.listItemStart.exec(i[t+1]),this.options.pedantic?l[1].length>c[1].length:l[1].length>=c[0].length||l[1].length>3){i.splice(t,2,i[t]+(!this.options.pedantic&&l[1].length<c[0].length&&!i[t].match(/\n$/)?"":"\n")+i[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?l[2][l[2].length-1]!==n[n.length-1]:r===(1===l[2].length))&&(u=i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),c=l}a=s.length,s=s.replace(/^ *([*+-]|\d+[.)]) ?/,""),~s.indexOf("\n ")&&(a-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+a+"}","gm"),"")),s=H(s,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(f=/^\[[ xX]\] /.test(s),p=void 0,f&&(p=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:f,checked:p,loose:d,text:s})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):V(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:G(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=G(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:V(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=H(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=Z(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),K(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return K(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,i,s=n,a=0;const c="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=c.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(i=o.length,r[3]||r[4])s+=i;else if(!((r[5]||r[6])&&n%3)||(n+i)%3){if(s-=i,!(s>0)){if(s+a-i<=0&&!t.slice(c.lastIndex).match(c)&&(i=Math.min(i,i+s+a)),Math.min(n,i)%2)return{type:"em",raw:e.slice(0,n+r.index+i+1),text:e.slice(1,n+r.index+i)};if(Math.min(n,i)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+i+1),text:e.slice(2,n+r.index+i-1)}}}else a+=i}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=V(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=V(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=V(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=V(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=V(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]:V(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:Y,edit:X,merge:Q}=U,ee={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:Y,table:Y,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ee.def=X(ee.def).replace("label",ee._label).replace("title",ee._title).getRegex(),ee.bullet=/(?:[*+-]|\d{1,9}[.)])/,ee.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ee.item=X(ee.item,"gm").replace(/bull/g,ee.bullet).getRegex(),ee.listItemStart=X(/^( *)(bull) */).replace("bull",ee.bullet).getRegex(),ee.list=X(ee.list).replace(/bull/g,ee.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ee.def.source+")").getRegex(),ee._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ee.html=X(ee.html,"i").replace("comment",ee._comment).replace("tag",ee._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ee.paragraph=X(ee._paragraph).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.blockquote=X(ee.blockquote).replace("paragraph",ee.paragraph).getRegex(),ee.normal=Q({},ee),ee.gfm=Q({},ee.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ee.gfm.nptable=X(ee.gfm.nptable).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.gfm.table=X(ee.gfm.table).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.pedantic=Q({},ee.normal,{html:X("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ee._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Y,paragraph:X(ee.normal._paragraph).replace("hr",ee.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ee.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const te={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:Y,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:Y,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};te.punctuation=X(te.punctuation).replace(/punctuation/g,te._punctuation).getRegex(),te.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,te.escapedEmSt=/\\\*|\\_/g,te._comment=X(ee._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),te.emStrong.lDelim=X(te.emStrong.lDelim).replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimAst=X(te.emStrong.rDelimAst,"g").replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimUnd=X(te.emStrong.rDelimUnd,"g").replace(/punct/g,te._punctuation).getRegex(),te._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,te._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,te._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,te.autolink=X(te.autolink).replace("scheme",te._scheme).replace("email",te._email).getRegex(),te._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,te.tag=X(te.tag).replace("comment",te._comment).replace("attribute",te._attribute).getRegex(),te._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,te._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,te._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,te.link=X(te.link).replace("label",te._label).replace("href",te._href).replace("title",te._title).getRegex(),te.reflink=X(te.reflink).replace("label",te._label).getRegex(),te.reflinkSearch=X(te.reflinkSearch,"g").replace("reflink",te.reflink).replace("nolink",te.nolink).getRegex(),te.normal=Q({},te),te.pedantic=Q({},te.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:X(/^!?\[(label)\]\((.*?)\)/).replace("label",te._label).getRegex(),reflink:X(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",te._label).getRegex()}),te.gfm=Q({},te.normal,{escape:X(te.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),te.gfm.url=X(te.gfm.url,"i").replace("email",te.gfm._extended_email).getRegex(),te.breaks=Q({},te.gfm,{br:X(te.br).replace("{2,}","*").getRegex(),text:X(te.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var ne={block:ee,inline:te};const{defaults:re}=S,{block:oe,inline:ie}=ne,{repeatString:se}=U;function ae(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function ce(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var le=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||re,this.options.tokenizer=this.options.tokenizer||new J,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:oe.normal,inline:ie.normal};this.options.pedantic?(t.block=oe.pedantic,t.inline=ie.pedantic):this.options.gfm&&(t.block=oe.gfm,this.options.breaks?t.inline=ie.breaks:t.inline=ie.gfm),this.tokenizer.rules=t}static get rules(){return{block:oe,inline:ie}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,i,s;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"paragraph"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),i=r.items.length,o=0;o<i;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,i,s;const a=e.length;for(t=0;t<a;t++)switch(s=e[t],s.type){case"paragraph":case"text":case"heading":s.tokens=[],this.inlineTokens(s.text,s.tokens);break;case"table":for(s.tokens={header:[],cells:[]},o=s.header.length,n=0;n<o;n++)s.tokens.header[n]=[],this.inlineTokens(s.header[n],s.tokens.header[n]);for(o=s.cells.length,n=0;n<o;n++)for(i=s.cells[n],s.tokens.cells[n]=[],r=0;r<i.length;r++)s.tokens.cells[n][r]=[],this.inlineTokens(i[r],s.tokens.cells[n][r]);break;case"blockquote":this.inline(s.tokens);break;case"list":for(o=s.items.length,n=0;n<o;n++)this.inline(s.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,i,s,a,c,l=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(l));)e.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(l=l.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(l));)l=l.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(l));)l=l.slice(0,s.index)+"++"+l.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(c=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const i=t[t.length-1];i&&"text"===o.type&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,l,c))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,ce))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,ce))){if(o=this.tokenizer.inlineText(e,r,ae))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(c=o.raw.slice(-1)),a=!0,i=t[t.length-1],i&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:ue}=S,{cleanUrl:de,escape:fe}=U;var pe=class{constructor(e){this.options=e||ue}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+fe(r,!0)+'">'+(n?e:fe(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:fe(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+fe(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},he=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},me=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:ge}=S,{unescape:be}=U;var we=class e{constructor(e){this.options=e||ge,this.options.renderer=this.options.renderer||new pe,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new he,this.slugger=new me}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,i,s,a,c,l,u,d,f,p,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,be(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(l="",c="",i=d.header.length,r=0;r<i;r++)c+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(l+=this.renderer.tablerow(c),u="",i=d.cells.length,r=0;r<i;r++){for(a=d.tokens.cells[r],c="",s=a.length,o=0;o<s;o++)c+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(c)}v+=this.renderer.table(l,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(f=d.ordered,p=d.start,h=d.loose,i=d.items.length,u="",r=0;r<i;r++)g=d.items[r],b=g.checked,w=g.task,m="",g.task&&(y=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,f,p);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const i=e.length;for(n=0;n<i;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:ye,checkSanitizeDeprecation:ve,escape:ke}=U,{getDefaults:xe,changeDefaults:$e,defaults:_e}=S;function Se(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=ye({},Se.defaults,t||{}),ve(t),n){const r=t.highlight;let o;try{o=le.lex(e,t)}catch(e){return n(e)}const i=function(e){let i;if(!e)try{i=we.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,i)};if(!r||r.length<3)return i();if(delete t.highlight,!o.length)return i();let s=0;return Se.walkTokens(o,(function(e){"code"===e.type&&(s++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),s--,0===s&&i()}))},0))})),void(0===s&&i())}try{const n=le.lex(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}}Se.options=Se.setOptions=function(e){return ye(Se.defaults,e),$e(Se.defaults),Se},Se.getDefaults=xe,Se.defaults=_e,Se.use=function(e){const t=ye({},e);if(e.renderer){const n=Se.defaults.renderer||new pe;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let i=e.renderer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.renderer=n}if(e.tokenizer){const n=Se.defaults.tokenizer||new J;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let i=e.tokenizer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.tokenizer=n}if(e.walkTokens){const n=Se.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Se.setOptions(t)},Se.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Se.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Se.walkTokens(n,t);break;case"list":Se.walkTokens(n.items,t);break;default:n.tokens&&Se.walkTokens(n.tokens,t)}},Se.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=ye({},Se.defaults,t||{}),ve(t);try{const n=le.lexInline(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}},Se.Parser=we,Se.parser=we.parse,Se.Renderer=pe,Se.TextRenderer=he,Se.Lexer=le,Se.lexer=le.lex,Se.Tokenizer=J,Se.Slugger=me,Se.parse=Se;var Ee=Se;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ce=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function i(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function s(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function c(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return s(""===n?e[r-1]:n,o)}))}function l(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var i=r[o];if(i[0].test(t))return c(t,i)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?s(r,o):e.hasOwnProperty(o)?s(r,e[o]):l(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&l(o,o,n)===o}}function f(e,t,n){return(n?t+" ":"")+(1===t?f.singular(e):f.plural(e))}return f.plural=u(o,r,e),f.isPlural=d(o,r,e),f.singular=u(r,o,t),f.isSingular=d(r,o,t),f.addPluralRule=function(t,n){e.push([i(t),n])},f.addSingularRule=function(e,n){t.push([i(e),n])},f.addUncountableRule=function(e){"string"!=typeof e?(f.addPluralRule(e,"$0"),f.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},f.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return f.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return f.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return f.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(f.addUncountableRule),f}))})),Ae=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=i.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},i;function i(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(s,this)}function s(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,i){for(var s=("selectedIndex"in t),a=s;r<o;){var c,l=e(n[r],1);t.insertBefore(l,i),s&&a&&l.selected&&(a=!a,c=t.selectedIndex,t.selectedIndex=c<0?r:d.call(t.querySelectorAll("option"),l)),r++}}function i(e,t){return e==t}function s(e){return e}function a(e,t,n,r,o,i,s){var a=i-o;if(a<1)return-1;for(;a<=n-t;){for(var c=t,l=o;c<n&&l<i&&s(e[c],r[l]);)c++,l++;if(l===i)return t;t=c+1}return-1}function c(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function l(e,t,n,r){for(;n<r;)p(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,f=function(e,t,n){for(var r=1,o=t;r<o;){var i=(r+o)/2>>>0;n<e[i]?o=i:r=1+i}return r},p=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||i,d=r.node||s,p=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,w=0;g<m&&w<b&&u(t[g],n[w]);)g++,w++;for(;g<m&&w<b&&u(t[m-1],n[b-1]);)m--,b--;var y=g===m,v=w===b;if(y&&v)return n;if(y&&w<b)return o(d,e,n,w,b,c(d,t,g,h,p)),n;if(v&&g<m)return l(d,t,g,m),n;var k=m-g,x=b-w,$=-1;if(k<x){if(-1<($=a(n,w,b,t,g,m,u)))return o(d,e,n,w,$,d(t[g],0)),o(d,e,n,$+k,b,c(d,t,m,h,p)),n}else if(x<k&&-1<($=a(t,g,m,n,w,b,u)))return l(d,t,g,$),l(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,w,b,d(t[g],0)),l(d,t,g,m)):k==x&&function(e,t,n,r,o,i){for(;r<o&&i(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,w,b,c(d,t,m,h,p)):function(e,t,n,r,i,s,a,c,u,d,p,h,m){!function(e,t,n,r,i,s,a,c,u){for(var d=[],f=e.length,p=a,h=0;h<f;)switch(e[h++]){case 0:i++,p++;break;case 1:d.push(r[i]),o(t,n,r,i++,i,p<c?t(s[p],0):u);break;case-1:p++}for(h=0;h<f;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(s[a])?a++:l(t,s,a++,a)}}(function(e,t,n,r,o,i,s){var a,c,l,u,d,f,p=n+i,h=[];e:for(b=0;b<=p;b++){if(50<b)return null;for(f=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(c=(l=a===-b||a!==b&&u[f+a-1]<u[f+a+1]?u[f+a+1]:u[f+a-1]+1)-a;l<i&&c<n&&s(r[o+l],e[t+c]);)l++,c++;if(l===i&&c===n)break e;d[b+a]=l}}for(var m=Array(b/2+p/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<l&&0<c&&s(r[o+l-1],e[t+c-1]);)m[g--]=0,l--,c--;if(!b)break;f=b-1,u=b?h[b-1]:[0,0],(a=l-c)==-b||a!==b&&u[f+a-1]<u[f+a+1]?(c--,m[g--]=1):(l--,m[g--]=-1)}return m}(n,r,s,a,c,d,h)||function(e,t,n,r,o,i,s,a){var c=0,l=r<a?r:a,u=Array(l++),d=Array(l);d[0]=-1;for(var p=1;p<l;p++)d[p]=s;for(var h=o.slice(i,s),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(c=f(d,l,g=b+i))&&(d[c]=g,u[c]={newi:m,oldi:g,prev:u[c-1]})}for(c=--l,--s;d[c]>s;)--c;l=a+r-c;var w=Array(l),y=u[c];for(--n;y;){for(var v=y.newi,k=y.oldi;v<n;)w[--l]=1,--n;for(;k<s;)w[--l]=-1,--s;w[--l]=0,--n,--s,y=y.prev}for(;t<=n;)w[--l]=1,--n;for(;i<=s;)w[--l]=-1,--s;return w}(n,r,i,s,a,c,u,d),e,t,n,r,a,c,p,m)}(d,e,n,w,b,x,t,g,m,k,h,u,p),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,w={};try{w.Map=Map}catch(u){w.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var i=r(o);return i&&(t.splice(e,1),n.splice(e,1)),i},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,i){return n[r(o)?e:t.push(o)-1]=i,this}};function r(n){return-1<(e=t.indexOf(n))}}}var y=w.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,_,S,E,C,A,L={},R={},T=[],N=R.hasOwnProperty,j=0,z={attributes:L,define:function(e,t){e.indexOf("-")<0?(e in R||(j=T.push(e)),R[e]=t):L[e]=t},invoke:function(e,t){for(var n=0;n<j;n++){var r=T[n];if(N.call(e,r))return R[r](e[r],t)}}},P=Array.isArray||(_=($={}.toString).call([]),function(e){return $.call(e)===_}),O=(S=e,E="fragment",A="content"in D(C="template")?function(e){var t=D(C);return t.innerHTML=e,t.content}:function(e){var t,n=D(E),r=D(C);return I(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=D(E),n=D("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",I(t,n.firstChild.childNodes),t}:A)(e)});function I(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function D(e){return e===E?S.createDocumentFragment():S.createElementNS("http://www.w3.org/1999/xhtml",e)}var q,M,B,F,U,W,H,G,V,Z=(M="appendChild",B="cloneNode",F="createTextNode",W=(U="importNode")in(q=e),(H=q.createDocumentFragment())[M](q[F]("g")),H[M](q[F]("")),(W?q[U](H,!0):H[B](!0)).childNodes.length<2?function e(t,n){for(var r=t[B](),o=t.childNodes||[],i=o.length,s=0;n&&s<i;s++)r[M](e(o[s],n));return r}:W?q[U]:function(e,t){return e[B](!!t)}),K="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},J="-"+Math.random().toFixed(6)+"%",Y=!1;try{G=e.createElement("template"),V="tabindex","content"in G&&(G.innerHTML="<p "+V+'="'+J+'"></p>',G.content.childNodes[0].getAttribute(V)==J)||(J="_dt: "+J.slice(1,-1)+";",Y=!0)}catch(u){}var X="\x3c!--"+J+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",ie="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",se=new RegExp(oe+re+ie+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+ie+"*)(["+te+"]*/>)","g"),ce=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+X+"\\2","gi");function le(e,t,n,r){return"<"+t+n.replace(ce,ue)+r}function ue(e,t,n){return t+(n||'"')+J+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var fe=Y?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function pe(t,n,r,o){for(var i=t.childNodes,s=i.length,a=0;a<s;){var c=i[a];switch(c.nodeType){case 1:var l=o.concat(a);!function(t,n,r,o){for(var i,s=t.attributes,a=[],c=[],l=fe(s,r),u=l.length,d=0;d<u;){var f=l[d++],p=f.value===J;if(p||1<(i=f.value.split(X)).length){var h=f.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(p?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=s[m]||s[m.toLowerCase()];if(p)n.push(he(g,o,m,null));else{for(var b=i.length-2;b--;)r.shift();n.push(he(g,o,m,i))}}c.push(f)}}for(var w=((d=0)<(u=c.length)&&Y&&!("ownerSVGElement"in t));d<u;){var y=c[d++];w&&(y.value=""),t.removeAttribute(y.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=s.length,d=0;d<u;)k.setAttributeNode(s[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(c,n,r,l),pe(c,n,r,l);break;case 8:var u=c.textContent;if(u===J)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:c,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(c),a--,s--}break;case 3:Q.test(t.nodeName)&&K.call(c.textContent)===X&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function we(e,t){var n=(e.convert||function(e){return e.join(X).replace(ae,de).replace(se,le)})(t),r=e.transform;r&&(n=r(n));var o=O(n,e.type);ve(o);var i=[];return pe(o,i,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=i.length,s=0,a=0;s<o;){var c=i[s++],l=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,c.path);switch(c.type){case"any":r.push({fn:e.any(l,[]),sparse:!1});break;case"attr":var u=c.sparse,d=e.attribute(l,c.name,c.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(l),sparse:!1}),l.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var i=1,s=1;i<e;){var a=r[i-s];if(a.sparse){var c=a.values,l=c[0],u=1,d=c.length;for(s+=d-2;u<d;)l+=arguments[i++]+c[u++];a.fn(l)}else a.fn(arguments[i++])}return n}}}}var ye=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===K.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),Se(n,!0)}(e,t):Se(e.style,!1)});function _e(e,t,n){return t+"-"+n.toLowerCase()}function Se(e,t){var n,r;return function(o){var i,s,a,c;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(s in r)s in o||(e[s]="")}else t?e.value="":e.cssText="";for(s in i=t?{}:e,o)a="number"!=typeof(c=o[s])||ke.test(s)?c:c+"px",!t&&/^--/.test(s)?i.setProperty(s,a):i[s]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,_e),":",e[t],";");return n.join("")}(r=i):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ee,Ce,Ae=(Ee=[].slice,(Ce=Le.prototype).ELEMENT_NODE=1,Ce.nodeType=111,Ce.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ce.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,i=r.length;o<i;o++)t.appendChild(r[o]);return t},Le);function Le(e){var t=this.childNodes=Ee.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Re(e){return{html:e}}function Te(e,t){switch(e.nodeType){case Be:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Te(e.render(),t);default:return e}}function Ne(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Re).then(t):Promise.resolve(z.invoke(e,t)).then(t)}function je(e){return null!=e&&"then"in e}var ze,Pe,Oe,Ie,De,qe="ownerSVGElement",Me=v.prototype.nodeType,Be=Ae.prototype.nodeType,Fe=(Pe=(ze={Event:b,WeakSet:u}).Event,Oe=ze.WeakSet,Ie=!0,De=null,function(e){return Ie&&(Ie=!Ie,De=new Oe,function(e){var t=new Oe,n=new Oe;try{new MutationObserver(s).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],i=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){s(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){i({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){i({addedNodes:[e.target],removedNodes:[]})}),!0)}function s(e){for(var r,o=e.length,i=0;i<o;i++)a((r=e[i]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,i=new Pe(t),s=e.length,a=0;a<s;1===(o=e[a++]).nodeType&&function e(t,n,r,o,i){De.has(t)&&!o.has(t)&&(i.delete(t),o.add(t),t.dispatchEvent(n));for(var s=t.children||[],a=s.length,c=0;c<a;e(s[c++],n,r,o,i));}(o,i,t,n,r));}}(e.ownerDocument)),De.add(e),e}),Ue=/^(?:form|list)$/i,We=[].slice;function He(t){return this.type=t,function(t){var n=ye,r=ve;return function(o){var i,s,a;return n!==o&&(i=t,s=n=o,a=be.get(s)||be.set(s,we(i,s)),r=a.updates(Z.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ge=!(He.prototype={attribute:function(e,t,n){var r,o=qe in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return l=e,u=t.slice(1),o?function(e){try{l[u]=e}catch(t){l.setAttribute(u,e)}}:function(e){l[u]=e};if("?"===t.slice(0,1))return s=e,a=t.slice(1),function(e){c!==!!e&&((c=!!e)?s.setAttribute(a,""):s.removeAttribute(a))};if(/^on/.test(t)){var i=t.slice(2);return"connected"===i||"disconnected"===i?Fe(e):t.toLowerCase()in e&&(i=i.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(i,r,!1),(r=t)&&e.addEventListener(i,t,!1))}}if("data"===t||!o&&t in e&&!Ue.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in z.attributes)return function(n){var o=z.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var s,a,c,l,u,d=!1,f=n.cloneNode(!0);return function(t){r!==t&&(r=t,f.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(f)),f.value=t):(f.value=t,d||(d=!0,e.setAttributeNode(f)))))}},any:function(e,t){var n,r={node:Te,before:e},o=qe in e?"svg":"html",i=!1;return function s(a){switch(typeof a){case"string":case"number":case"boolean":i?n!==a&&(n=a,t[0].textContent=a):(i=!0,n=a,t=h(e.parentNode,t,[(c=a,e.ownerDocument.createTextNode(c))],r));break;case"function":s(a(e));break;case"object":case"undefined":if(null==a){i=!1,t=h(e.parentNode,t,[],r);break}default:if(i=!1,P(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":s({html:a});break;case"object":if(P(a[0])&&(a=a.concat.apply([],a)),je(a[0])){Promise.all(a).then(s);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?We.call(a.childNodes):[a],r):je(a)?a.then(s):"placeholder"in a?Ne(a,s):"text"in a?s(String(a.text)):"any"in a?s(a.any):"html"in a?t=h(e.parentNode,t,We.call(O([].concat(a.html).join(""),o).childNodes),r):s("length"in a?We.call(a):z.invoke(a,s))}var c}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?je(r)?r.then(n):"placeholder"in r?Ne(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?We.call(r).join(""):z.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,i,s,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),c=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||c?(o={},i=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=c?i:(s=new n,function(e){return s.get(e)||(n=i(t=e),s.set(t,n),n);var t,n})):Ge=!0,Ze(t)};function Ze(e){return Ge?e:Ve(e)}function Ke(e){for(var t=arguments.length,n=[Ze(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Je=new n,Ye=function(e){var t,n,r;return function(){var o=Ke.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Xe=function(e,t){var n=t.indexOf(":"),r=Je.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Je.set(e,r={}),r[o]||(r[o]=Ye(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Ae(t):e},et=new n;function tt(){var e=et.get(this),t=Ke.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(qe in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,it,st=z.define,at=He.prototype;function ct(e){return arguments.length<2?null==e?Ye("html"):"string"==typeof e?ct.wire(null,e):"raw"in e?Ye("html")(e):"nodeType"in e?ct.bind(e):Xe(e,"html"):("raw"in e?Ye("html"):ct.wire).apply(null,arguments)}return ct.Component=v,ct.bind=function(e){return tt.bind(e)},ct.define=st,ct.diff=h,(ct.hyper=ct).observe=Fe,ct.tagger=at,ct.wire=function(e,t){return null==e?Ye(t||"html"):Xe(e,t||"html")},ct._={WeakMap:n,WeakSet:u},nt=Ye,rt=new n,ot=Object.create,it=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var i,s,a,c=t.get(e)||it(e,t);switch(typeof o){case"object":case"function":var l=c.w||(c.w=new n);return l.get(o)||(i=l,s=o,a=new e(r),i.set(s,a),a);default:var u=c.p||(c.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new y,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),ct}(document); -/*! (c) Andrea Giammarchi (ISC) */const Le=$,Re=Ae,Te=Ee,Ne=Ce,je=De({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}});function ze(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Pe(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function Oe(e=[],t=(e=>e),n=i){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(je.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=je.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function Ie(e){return e.trim().replace(/\s+/g," ")}function De(e,t=i){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function qe(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){et(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}function Me(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function Be(e){const t=new Set,n="ltNodefault"in e.dataset?"":Ie(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>Ie(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(Ie(e)))}return[...t]}function Fe(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function Ue(e,t){const n=t.closest(".informative, .note, .issue, .example, .ednote, .practice, .introductory");let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function We(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function He(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function Ge(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class Ve extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function Ze(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>Fe(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),Ke(t),t}function Ke(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...Je(t)])e.remove()}function*Je(e){for(;e.nextNode();)yield e.currentNode}class Ye extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class Xe extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||Me(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:i,title:s,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:i,title:s,details:a,stack:n}}}function Qe(e,t,n={}){const r={...n,isWarning:!1};rt("error",new Xe(e,t,r))}function et(e,t,n={}){const r={...n,isWarning:!0};rt("warn",new Xe(e,t,r))}const tt="core/pubsubhub",nt=new Map;function rt(e,...t){if(!nt.has(e))return;if(Array.from(nt.get(e)).forEach(e=>{try{e(...t)}catch(t){Qe(`Error when calling function ${e.name}.`,tt,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function ot(e,t,n={once:!1}){return n.once?ot(e,(function n(...r){!function({topic:e,cb:t}){const n=nt.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(nt.has(e)?nt.get(e).add(t):nt.set(e,new Set([t])),{topic:e,cb:t})}n(tt,{sub:ot});const it=["githubToken","githubUser"];class st{constructor(){this._respecDonePromise=new Promise(e=>{ot("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],ot("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),ot("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}}const at="core/post-process";const ct="core/pre-process";const lt="core/base-runner";var ut=Object.freeze({__proto__:null,name:lt,runAll:async function(e){!function(){const e=new st;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(et("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),rt("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),ot("amend-user-config",n),ot("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of it)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),rt("amend-user-config",r)}(respecConfig),performance.mark(lt+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||Qe("Every item in `preProcess` must be a JS function.",ct),t}).map(async t=>{try{return await t(e,document)}catch(e){Qe(`Function ${t.name} threw an error during \`preProcess\`.`,ct,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const i=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(i),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},rt("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||Qe("Every item in `postProcess` must be a JS function.",at),t}).map(async t=>{try{return await t(e,document)}catch(e){Qe(`Function ${t.name} threw an error during \`postProcess\`.`,at,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),rt("end-all"),Pe(document),performance.mark(lt+"-end"),performance.measure(lt,lt+"-start",lt+"-end")}});async function dt(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-geonovum.js",document.baseURI).href));return await t.text()}async function ft(e){return dt("assets/"+e)}function pt(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var ht=Object.freeze({__proto__:null,name:"core/reindent",reindent:pt,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=pt(e.innerHTML)}});const mt=/>/gm,gt=/&/gm;class bt extends Te.Renderer{code(e,t,n){const{language:r,...o}=bt.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const i=super.code(e,r,n),{example:s,illegalExample:a}=o;if(!s&&!a)return i;const c=s||a,l=`${r} ${s?"example":"illegal-example"}`;return i.replace("<pre>",`<pre title="${c}" class="${l}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function wt(e){const t=pt(e).replace(mt,">").replace(gt,"&");return Te(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new bt})}function yt(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=wt(e.innerHTML)}class vt{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function kt(e,t){return function e(n){const r=new vt(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function xt(e){const t=kt(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const $t=(_t="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll(_t);return t.forEach(yt),Array.from(t)});var _t;var St=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:wt,restructure:xt,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of $t(document.body))xt(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=Ge(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),yt(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const i=kt(o,document);o.append(r,i),document.body.replaceWith(o)}});function Et(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!async function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=await async function(){try{return(await Promise.resolve().then((function(){return ys}))).default}catch{return ft("ui.css")}}(),e.classList.add("removeOnSave"),document.head.appendChild(e)}();const Ct=Re`<div id="respec-ui" class="removeOnSave" hidden></div>`,At=Re`<ul +window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return ut})),Promise.resolve().then((function(){return Ft})),Promise.resolve().then((function(){return Ut})),Promise.resolve().then((function(){return s})),Promise.resolve().then((function(){return On})),Promise.resolve().then((function(){return qn})),Promise.resolve().then((function(){return Wn})),Promise.resolve().then((function(){return Gn})),Promise.resolve().then((function(){return Yn})),Promise.resolve().then((function(){return tr})),Promise.resolve().then((function(){return _t})),Promise.resolve().then((function(){return ft})),Promise.resolve().then((function(){return nr})),Promise.resolve().then((function(){return so})),Promise.resolve().then((function(){return co})),Promise.resolve().then((function(){return uo})),Promise.resolve().then((function(){return mo})),Promise.resolve().then((function(){return vo})),Promise.resolve().then((function(){return So})),Promise.resolve().then((function(){return Ao})),Promise.resolve().then((function(){return Ar})),Promise.resolve().then((function(){return Vo})),Promise.resolve().then((function(){return Do})),Promise.resolve().then((function(){return qr})),Promise.resolve().then((function(){return Ko})),Promise.resolve().then((function(){return Jo})),Promise.resolve().then((function(){return ii})),Promise.resolve().then((function(){return ai})),Promise.resolve().then((function(){return li})),Promise.resolve().then((function(){return ci})),Promise.resolve().then((function(){return yi})),Promise.resolve().then((function(){return $i})),Promise.resolve().then((function(){return Li})),Promise.resolve().then((function(){return Ni})),Promise.resolve().then((function(){return Ii})),Promise.resolve().then((function(){return Wi})),Promise.resolve().then((function(){return Ki})),Promise.resolve().then((function(){return ts})),Promise.resolve().then((function(){return os})),Promise.resolve().then((function(){return ss})),Promise.resolve().then((function(){return fs})),Promise.resolve().then((function(){return un}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},i=r.lang;var s=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:i,run:function(e){e.l10n=o[i]||o.en}});let a,l;const c=new WeakMap,u=new WeakMap,d=new WeakMap,p=new WeakMap,f=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(l||(l=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(c.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),r()},i=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",i)},o=()=>{t(b(e.result)),r()},i=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",i)});return t.then(t=>{t instanceof IDBCursor&&c.set(t,e)}).catch(()=>{}),f.set(t,e),t}(e);if(p.has(e))return p.get(e);const t=g(e);return t!==e&&(p.set(e,t),f.set(t,e)),t}const w=e=>f.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const i=async function(e,...t){const i=this.transaction(e,o?"readwrite":"readonly");let s=i.store;return r&&(s=s.index(t.shift())),(await Promise.all([s[n](...t),o&&i.done]))[0]};return k.set(t,i),i}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:i}={}){const s=indexedDB.open(e,t),a=b(s);return r&&s.addEventListener("upgradeneeded",e=>{r(b(s.result),e.oldVersion,e.newVersion,b(s.transaction))}),n&&s.addEventListener("blocked",()=>n()),a.then(e=>{i&&e.addEventListener("close",()=>i()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});var _,S=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(_={exports:{}},_.exports),_.exports);const E=/[&<>"']/,C=/[&<>"']/g,A=/[<>"']|&(?!#?\w+;)/,L=/[<>"']|&(?!#?\w+;)/g,N={"&":"&","<":"<",">":">",'"':""","'":"'"},T=e=>N[e];const R=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function j(e){return e.replace(R,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const z=/(^|[^\[])\^/g;const P=/[^\w:]/g,O=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const I={},D=/^[^:]+:\/*[^/]*$/,q=/^([^:]+:)[\s\S]*$/,M=/^([^:]+:\/*[^/]*)[\s\S]*$/;function B(e,t){I[" "+e]||(D.test(e)?I[" "+e]=e+"/":I[" "+e]=F(e,"/",!0));const n=-1===(e=I[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(q,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(M,"$1")+t:e+t}function F(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const i=e.charAt(r-o-1);if(i!==t||n){if(i===t||!n)break;o++}else o++}return e.substr(0,r-o)}var U={escape:function(e,t){if(t){if(E.test(e))return e.replace(C,T)}else if(A.test(e))return e.replace(L,T);return e},unescape:j,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(z,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(j(n)).replace(P,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!O.test(n)&&(n=B(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:B,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:F,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:W}=S,{rtrim:H,splitCells:G,escape:V,findClosingBracket:Z}=U;function K(e,t,n){const r=t.href,o=t.title?V(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:i}:{type:"image",raw:n,href:r,title:o,text:V(i)}}var J=class{constructor(e){this.options=e||W}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:H(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=H(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:G(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=G(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},i=t[0].match(this.rules.block.item);let s,a,l,c,u,d,p,f,h,m=!1,g=i.length;l=this.rules.block.listItemStart.exec(i[0]);for(let t=0;t<g;t++){if(s=i[t],e=s,this.options.pedantic||(h=s.match(new RegExp("\\n\\s*\\n {0,"+(l[0].length-1)+"}\\S")),h&&(u=s.length-h.index+i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),s=s.substring(0,h.index),e=s,g=t+1)),t!==g-1){if(c=this.rules.block.listItemStart.exec(i[t+1]),this.options.pedantic?c[1].length>l[1].length:c[1].length>=l[0].length||c[1].length>3){i.splice(t,2,i[t]+(!this.options.pedantic&&c[1].length<l[0].length&&!i[t].match(/\n$/)?"":"\n")+i[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?c[2][c[2].length-1]!==n[n.length-1]:r===(1===c[2].length))&&(u=i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),l=c}a=s.length,s=s.replace(/^ *([*+-]|\d+[.)]) ?/,""),~s.indexOf("\n ")&&(a-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+a+"}","gm"),"")),s=H(s,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(p=/^\[[ xX]\] /.test(s),f=void 0,p&&(f=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:p,checked:f,loose:d,text:s})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):V(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:G(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=G(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:V(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=H(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=Z(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),K(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return K(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,i,s=n,a=0;const l="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=l.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(i=o.length,r[3]||r[4])s+=i;else if(!((r[5]||r[6])&&n%3)||(n+i)%3){if(s-=i,!(s>0)){if(s+a-i<=0&&!t.slice(l.lastIndex).match(l)&&(i=Math.min(i,i+s+a)),Math.min(n,i)%2)return{type:"em",raw:e.slice(0,n+r.index+i+1),text:e.slice(1,n+r.index+i)};if(Math.min(n,i)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+i+1),text:e.slice(2,n+r.index+i-1)}}}else a+=i}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=V(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=V(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=V(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=V(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=V(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]:V(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:X,edit:Y,merge:Q}=U,ee={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:X,table:X,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ee.def=Y(ee.def).replace("label",ee._label).replace("title",ee._title).getRegex(),ee.bullet=/(?:[*+-]|\d{1,9}[.)])/,ee.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ee.item=Y(ee.item,"gm").replace(/bull/g,ee.bullet).getRegex(),ee.listItemStart=Y(/^( *)(bull) */).replace("bull",ee.bullet).getRegex(),ee.list=Y(ee.list).replace(/bull/g,ee.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ee.def.source+")").getRegex(),ee._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ee.html=Y(ee.html,"i").replace("comment",ee._comment).replace("tag",ee._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ee.paragraph=Y(ee._paragraph).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.blockquote=Y(ee.blockquote).replace("paragraph",ee.paragraph).getRegex(),ee.normal=Q({},ee),ee.gfm=Q({},ee.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ee.gfm.nptable=Y(ee.gfm.nptable).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.gfm.table=Y(ee.gfm.table).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.pedantic=Q({},ee.normal,{html:Y("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ee._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:X,paragraph:Y(ee.normal._paragraph).replace("hr",ee.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ee.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const te={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:X,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:X,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};te.punctuation=Y(te.punctuation).replace(/punctuation/g,te._punctuation).getRegex(),te.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,te.escapedEmSt=/\\\*|\\_/g,te._comment=Y(ee._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),te.emStrong.lDelim=Y(te.emStrong.lDelim).replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimAst=Y(te.emStrong.rDelimAst,"g").replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimUnd=Y(te.emStrong.rDelimUnd,"g").replace(/punct/g,te._punctuation).getRegex(),te._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,te._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,te._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,te.autolink=Y(te.autolink).replace("scheme",te._scheme).replace("email",te._email).getRegex(),te._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,te.tag=Y(te.tag).replace("comment",te._comment).replace("attribute",te._attribute).getRegex(),te._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,te._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,te._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,te.link=Y(te.link).replace("label",te._label).replace("href",te._href).replace("title",te._title).getRegex(),te.reflink=Y(te.reflink).replace("label",te._label).getRegex(),te.reflinkSearch=Y(te.reflinkSearch,"g").replace("reflink",te.reflink).replace("nolink",te.nolink).getRegex(),te.normal=Q({},te),te.pedantic=Q({},te.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:Y(/^!?\[(label)\]\((.*?)\)/).replace("label",te._label).getRegex(),reflink:Y(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",te._label).getRegex()}),te.gfm=Q({},te.normal,{escape:Y(te.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),te.gfm.url=Y(te.gfm.url,"i").replace("email",te.gfm._extended_email).getRegex(),te.breaks=Q({},te.gfm,{br:Y(te.br).replace("{2,}","*").getRegex(),text:Y(te.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var ne={block:ee,inline:te};const{defaults:re}=S,{block:oe,inline:ie}=ne,{repeatString:se}=U;function ae(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function le(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var ce=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||re,this.options.tokenizer=this.options.tokenizer||new J,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:oe.normal,inline:ie.normal};this.options.pedantic?(t.block=oe.pedantic,t.inline=ie.pedantic):this.options.gfm&&(t.block=oe.gfm,this.options.breaks?t.inline=ie.breaks:t.inline=ie.gfm),this.tokenizer.rules=t}static get rules(){return{block:oe,inline:ie}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,i,s;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"paragraph"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),i=r.items.length,o=0;o<i;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,i,s;const a=e.length;for(t=0;t<a;t++)switch(s=e[t],s.type){case"paragraph":case"text":case"heading":s.tokens=[],this.inlineTokens(s.text,s.tokens);break;case"table":for(s.tokens={header:[],cells:[]},o=s.header.length,n=0;n<o;n++)s.tokens.header[n]=[],this.inlineTokens(s.header[n],s.tokens.header[n]);for(o=s.cells.length,n=0;n<o;n++)for(i=s.cells[n],s.tokens.cells[n]=[],r=0;r<i.length;r++)s.tokens.cells[n][r]=[],this.inlineTokens(i[r],s.tokens.cells[n][r]);break;case"blockquote":this.inline(s.tokens);break;case"list":for(o=s.items.length,n=0;n<o;n++)this.inline(s.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,i,s,a,l,c=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(c));)e.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(c));)c=c.slice(0,s.index)+"++"+c.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(l=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const i=t[t.length-1];i&&"text"===o.type&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,c,l))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,le))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,le))){if(o=this.tokenizer.inlineText(e,r,ae))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(l=o.raw.slice(-1)),a=!0,i=t[t.length-1],i&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:ue}=S,{cleanUrl:de,escape:pe}=U;var fe=class{constructor(e){this.options=e||ue}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+pe(r,!0)+'">'+(n?e:pe(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:pe(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+pe(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},he=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},me=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:ge}=S,{unescape:be}=U;var we=class e{constructor(e){this.options=e||ge,this.options.renderer=this.options.renderer||new fe,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new he,this.slugger=new me}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,i,s,a,l,c,u,d,p,f,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,be(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(c="",l="",i=d.header.length,r=0;r<i;r++)l+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(c+=this.renderer.tablerow(l),u="",i=d.cells.length,r=0;r<i;r++){for(a=d.tokens.cells[r],l="",s=a.length,o=0;o<s;o++)l+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(l)}v+=this.renderer.table(c,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(p=d.ordered,f=d.start,h=d.loose,i=d.items.length,u="",r=0;r<i;r++)g=d.items[r],b=g.checked,w=g.task,m="",g.task&&(y=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,p,f);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const i=e.length;for(n=0;n<i;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:ye,checkSanitizeDeprecation:ve,escape:ke}=U,{getDefaults:xe,changeDefaults:$e,defaults:_e}=S;function Se(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=ye({},Se.defaults,t||{}),ve(t),n){const r=t.highlight;let o;try{o=ce.lex(e,t)}catch(e){return n(e)}const i=function(e){let i;if(!e)try{i=we.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,i)};if(!r||r.length<3)return i();if(delete t.highlight,!o.length)return i();let s=0;return Se.walkTokens(o,(function(e){"code"===e.type&&(s++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),s--,0===s&&i()}))},0))})),void(0===s&&i())}try{const n=ce.lex(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}}Se.options=Se.setOptions=function(e){return ye(Se.defaults,e),$e(Se.defaults),Se},Se.getDefaults=xe,Se.defaults=_e,Se.use=function(e){const t=ye({},e);if(e.renderer){const n=Se.defaults.renderer||new fe;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let i=e.renderer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.renderer=n}if(e.tokenizer){const n=Se.defaults.tokenizer||new J;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let i=e.tokenizer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.tokenizer=n}if(e.walkTokens){const n=Se.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Se.setOptions(t)},Se.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Se.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Se.walkTokens(n,t);break;case"list":Se.walkTokens(n.items,t);break;default:n.tokens&&Se.walkTokens(n.tokens,t)}},Se.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=ye({},Se.defaults,t||{}),ve(t);try{const n=ce.lexInline(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}},Se.Parser=we,Se.parser=we.parse,Se.Renderer=fe,Se.TextRenderer=he,Se.Lexer=ce,Se.lexer=ce.lex,Se.Tokenizer=J,Se.Slugger=me,Se.parse=Se;var Ee=Se;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ce=function(e){var t={exports:{}};return e(t,t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function i(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function s(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function l(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return s(""===n?e[r-1]:n,o)}))}function c(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var i=r[o];if(i[0].test(t))return l(t,i)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?s(r,o):e.hasOwnProperty(o)?s(r,e[o]):c(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&c(o,o,n)===o}}function p(e,t,n){return(n?t+" ":"")+(1===t?p.singular(e):p.plural(e))}return p.plural=u(o,r,e),p.isPlural=d(o,r,e),p.singular=u(r,o,t),p.isSingular=d(r,o,t),p.addPluralRule=function(t,n){e.push([i(t),n])},p.addSingularRule=function(e,n){t.push([i(e),n])},p.addUncountableRule=function(e){"string"!=typeof e?(p.addPluralRule(e,"$0"),p.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},p.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return p.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return p.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return p.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(p.addUncountableRule),p}))})),Ae=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=i.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},i;function i(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(s,this)}function s(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,i){for(var s=("selectedIndex"in t),a=s;r<o;){var l,c=e(n[r],1);t.insertBefore(c,i),s&&a&&c.selected&&(a=!a,l=t.selectedIndex,t.selectedIndex=l<0?r:d.call(t.querySelectorAll("option"),c)),r++}}function i(e,t){return e==t}function s(e){return e}function a(e,t,n,r,o,i,s){var a=i-o;if(a<1)return-1;for(;a<=n-t;){for(var l=t,c=o;l<n&&c<i&&s(e[l],r[c]);)l++,c++;if(c===i)return t;t=l+1}return-1}function l(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function c(e,t,n,r){for(;n<r;)f(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,p=function(e,t,n){for(var r=1,o=t;r<o;){var i=(r+o)/2>>>0;n<e[i]?o=i:r=1+i}return r},f=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||i,d=r.node||s,f=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,w=0;g<m&&w<b&&u(t[g],n[w]);)g++,w++;for(;g<m&&w<b&&u(t[m-1],n[b-1]);)m--,b--;var y=g===m,v=w===b;if(y&&v)return n;if(y&&w<b)return o(d,e,n,w,b,l(d,t,g,h,f)),n;if(v&&g<m)return c(d,t,g,m),n;var k=m-g,x=b-w,$=-1;if(k<x){if(-1<($=a(n,w,b,t,g,m,u)))return o(d,e,n,w,$,d(t[g],0)),o(d,e,n,$+k,b,l(d,t,m,h,f)),n}else if(x<k&&-1<($=a(t,g,m,n,w,b,u)))return c(d,t,g,$),c(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,w,b,d(t[g],0)),c(d,t,g,m)):k==x&&function(e,t,n,r,o,i){for(;r<o&&i(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,w,b,l(d,t,m,h,f)):function(e,t,n,r,i,s,a,l,u,d,f,h,m){!function(e,t,n,r,i,s,a,l,u){for(var d=[],p=e.length,f=a,h=0;h<p;)switch(e[h++]){case 0:i++,f++;break;case 1:d.push(r[i]),o(t,n,r,i++,i,f<l?t(s[f],0):u);break;case-1:f++}for(h=0;h<p;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(s[a])?a++:c(t,s,a++,a)}}(function(e,t,n,r,o,i,s){var a,l,c,u,d,p,f=n+i,h=[];e:for(b=0;b<=f;b++){if(50<b)return null;for(p=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(l=(c=a===-b||a!==b&&u[p+a-1]<u[p+a+1]?u[p+a+1]:u[p+a-1]+1)-a;c<i&&l<n&&s(r[o+c],e[t+l]);)c++,l++;if(c===i&&l===n)break e;d[b+a]=c}}for(var m=Array(b/2+f/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<c&&0<l&&s(r[o+c-1],e[t+l-1]);)m[g--]=0,c--,l--;if(!b)break;p=b-1,u=b?h[b-1]:[0,0],(a=c-l)==-b||a!==b&&u[p+a-1]<u[p+a+1]?(l--,m[g--]=1):(c--,m[g--]=-1)}return m}(n,r,s,a,l,d,h)||function(e,t,n,r,o,i,s,a){var l=0,c=r<a?r:a,u=Array(c++),d=Array(c);d[0]=-1;for(var f=1;f<c;f++)d[f]=s;for(var h=o.slice(i,s),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(l=p(d,c,g=b+i))&&(d[l]=g,u[l]={newi:m,oldi:g,prev:u[l-1]})}for(l=--c,--s;d[l]>s;)--l;c=a+r-l;var w=Array(c),y=u[l];for(--n;y;){for(var v=y.newi,k=y.oldi;v<n;)w[--c]=1,--n;for(;k<s;)w[--c]=-1,--s;w[--c]=0,--n,--s,y=y.prev}for(;t<=n;)w[--c]=1,--n;for(;i<=s;)w[--c]=-1,--s;return w}(n,r,i,s,a,l,u,d),e,t,n,r,a,l,f,m)}(d,e,n,w,b,x,t,g,m,k,h,u,f),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,w={};try{w.Map=Map}catch(u){w.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var i=r(o);return i&&(t.splice(e,1),n.splice(e,1)),i},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,i){return n[r(o)?e:t.push(o)-1]=i,this}};function r(n){return-1<(e=t.indexOf(n))}}}var y=w.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,_,S,E,C,A,L={},N={},T=[],R=N.hasOwnProperty,j=0,z={attributes:L,define:function(e,t){e.indexOf("-")<0?(e in N||(j=T.push(e)),N[e]=t):L[e]=t},invoke:function(e,t){for(var n=0;n<j;n++){var r=T[n];if(R.call(e,r))return N[r](e[r],t)}}},P=Array.isArray||(_=($={}.toString).call([]),function(e){return $.call(e)===_}),O=(S=e,E="fragment",A="content"in D(C="template")?function(e){var t=D(C);return t.innerHTML=e,t.content}:function(e){var t,n=D(E),r=D(C);return I(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=D(E),n=D("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",I(t,n.firstChild.childNodes),t}:A)(e)});function I(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function D(e){return e===E?S.createDocumentFragment():S.createElementNS("http://www.w3.org/1999/xhtml",e)}var q,M,B,F,U,W,H,G,V,Z=(M="appendChild",B="cloneNode",F="createTextNode",W=(U="importNode")in(q=e),(H=q.createDocumentFragment())[M](q[F]("g")),H[M](q[F]("")),(W?q[U](H,!0):H[B](!0)).childNodes.length<2?function e(t,n){for(var r=t[B](),o=t.childNodes||[],i=o.length,s=0;n&&s<i;s++)r[M](e(o[s],n));return r}:W?q[U]:function(e,t){return e[B](!!t)}),K="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},J="-"+Math.random().toFixed(6)+"%",X=!1;try{G=e.createElement("template"),V="tabindex","content"in G&&(G.innerHTML="<p "+V+'="'+J+'"></p>',G.content.childNodes[0].getAttribute(V)==J)||(J="_dt: "+J.slice(1,-1)+";",X=!0)}catch(u){}var Y="\x3c!--"+J+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",ie="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",se=new RegExp(oe+re+ie+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+ie+"*)(["+te+"]*/>)","g"),le=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+Y+"\\2","gi");function ce(e,t,n,r){return"<"+t+n.replace(le,ue)+r}function ue(e,t,n){return t+(n||'"')+J+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var pe=X?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function fe(t,n,r,o){for(var i=t.childNodes,s=i.length,a=0;a<s;){var l=i[a];switch(l.nodeType){case 1:var c=o.concat(a);!function(t,n,r,o){for(var i,s=t.attributes,a=[],l=[],c=pe(s,r),u=c.length,d=0;d<u;){var p=c[d++],f=p.value===J;if(f||1<(i=p.value.split(Y)).length){var h=p.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(f?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=s[m]||s[m.toLowerCase()];if(f)n.push(he(g,o,m,null));else{for(var b=i.length-2;b--;)r.shift();n.push(he(g,o,m,i))}}l.push(p)}}for(var w=((d=0)<(u=l.length)&&X&&!("ownerSVGElement"in t));d<u;){var y=l[d++];w&&(y.value=""),t.removeAttribute(y.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=s.length,d=0;d<u;)k.setAttributeNode(s[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(l,n,r,c),fe(l,n,r,c);break;case 8:var u=l.textContent;if(u===J)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:l,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(l),a--,s--}break;case 3:Q.test(t.nodeName)&&K.call(l.textContent)===Y&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function we(e,t){var n=(e.convert||function(e){return e.join(Y).replace(ae,de).replace(se,ce)})(t),r=e.transform;r&&(n=r(n));var o=O(n,e.type);ve(o);var i=[];return fe(o,i,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=i.length,s=0,a=0;s<o;){var l=i[s++],c=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,l.path);switch(l.type){case"any":r.push({fn:e.any(c,[]),sparse:!1});break;case"attr":var u=l.sparse,d=e.attribute(c,l.name,l.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(c),sparse:!1}),c.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var i=1,s=1;i<e;){var a=r[i-s];if(a.sparse){var l=a.values,c=l[0],u=1,d=l.length;for(s+=d-2;u<d;)c+=arguments[i++]+l[u++];a.fn(c)}else a.fn(arguments[i++])}return n}}}}var ye=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===K.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),Se(n,!0)}(e,t):Se(e.style,!1)});function _e(e,t,n){return t+"-"+n.toLowerCase()}function Se(e,t){var n,r;return function(o){var i,s,a,l;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(s in r)s in o||(e[s]="")}else t?e.value="":e.cssText="";for(s in i=t?{}:e,o)a="number"!=typeof(l=o[s])||ke.test(s)?l:l+"px",!t&&/^--/.test(s)?i.setProperty(s,a):i[s]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,_e),":",e[t],";");return n.join("")}(r=i):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ee,Ce,Ae=(Ee=[].slice,(Ce=Le.prototype).ELEMENT_NODE=1,Ce.nodeType=111,Ce.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ce.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,i=r.length;o<i;o++)t.appendChild(r[o]);return t},Le);function Le(e){var t=this.childNodes=Ee.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Ne(e){return{html:e}}function Te(e,t){switch(e.nodeType){case Be:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Te(e.render(),t);default:return e}}function Re(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Ne).then(t):Promise.resolve(z.invoke(e,t)).then(t)}function je(e){return null!=e&&"then"in e}var ze,Pe,Oe,Ie,De,qe="ownerSVGElement",Me=v.prototype.nodeType,Be=Ae.prototype.nodeType,Fe=(Pe=(ze={Event:b,WeakSet:u}).Event,Oe=ze.WeakSet,Ie=!0,De=null,function(e){return Ie&&(Ie=!Ie,De=new Oe,function(e){var t=new Oe,n=new Oe;try{new MutationObserver(s).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],i=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){s(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){i({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){i({addedNodes:[e.target],removedNodes:[]})}),!0)}function s(e){for(var r,o=e.length,i=0;i<o;i++)a((r=e[i]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,i=new Pe(t),s=e.length,a=0;a<s;1===(o=e[a++]).nodeType&&function e(t,n,r,o,i){De.has(t)&&!o.has(t)&&(i.delete(t),o.add(t),t.dispatchEvent(n));for(var s=t.children||[],a=s.length,l=0;l<a;e(s[l++],n,r,o,i));}(o,i,t,n,r));}}(e.ownerDocument)),De.add(e),e}),Ue=/^(?:form|list)$/i,We=[].slice;function He(t){return this.type=t,function(t){var n=ye,r=ve;return function(o){var i,s,a;return n!==o&&(i=t,s=n=o,a=be.get(s)||be.set(s,we(i,s)),r=a.updates(Z.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ge=!(He.prototype={attribute:function(e,t,n){var r,o=qe in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return c=e,u=t.slice(1),o?function(e){try{c[u]=e}catch(t){c.setAttribute(u,e)}}:function(e){c[u]=e};if("?"===t.slice(0,1))return s=e,a=t.slice(1),function(e){l!==!!e&&((l=!!e)?s.setAttribute(a,""):s.removeAttribute(a))};if(/^on/.test(t)){var i=t.slice(2);return"connected"===i||"disconnected"===i?Fe(e):t.toLowerCase()in e&&(i=i.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(i,r,!1),(r=t)&&e.addEventListener(i,t,!1))}}if("data"===t||!o&&t in e&&!Ue.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in z.attributes)return function(n){var o=z.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var s,a,l,c,u,d=!1,p=n.cloneNode(!0);return function(t){r!==t&&(r=t,p.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(p)),p.value=t):(p.value=t,d||(d=!0,e.setAttributeNode(p)))))}},any:function(e,t){var n,r={node:Te,before:e},o=qe in e?"svg":"html",i=!1;return function s(a){switch(typeof a){case"string":case"number":case"boolean":i?n!==a&&(n=a,t[0].textContent=a):(i=!0,n=a,t=h(e.parentNode,t,[(l=a,e.ownerDocument.createTextNode(l))],r));break;case"function":s(a(e));break;case"object":case"undefined":if(null==a){i=!1,t=h(e.parentNode,t,[],r);break}default:if(i=!1,P(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":s({html:a});break;case"object":if(P(a[0])&&(a=a.concat.apply([],a)),je(a[0])){Promise.all(a).then(s);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?We.call(a.childNodes):[a],r):je(a)?a.then(s):"placeholder"in a?Re(a,s):"text"in a?s(String(a.text)):"any"in a?s(a.any):"html"in a?t=h(e.parentNode,t,We.call(O([].concat(a.html).join(""),o).childNodes),r):s("length"in a?We.call(a):z.invoke(a,s))}var l}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?je(r)?r.then(n):"placeholder"in r?Re(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?We.call(r).join(""):z.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,i,s,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),l=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||l?(o={},i=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=l?i:(s=new n,function(e){return s.get(e)||(n=i(t=e),s.set(t,n),n);var t,n})):Ge=!0,Ze(t)};function Ze(e){return Ge?e:Ve(e)}function Ke(e){for(var t=arguments.length,n=[Ze(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Je=new n,Xe=function(e){var t,n,r;return function(){var o=Ke.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Ye=function(e,t){var n=t.indexOf(":"),r=Je.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Je.set(e,r={}),r[o]||(r[o]=Xe(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Ae(t):e},et=new n;function tt(){var e=et.get(this),t=Ke.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(qe in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,it,st=z.define,at=He.prototype;function lt(e){return arguments.length<2?null==e?Xe("html"):"string"==typeof e?lt.wire(null,e):"raw"in e?Xe("html")(e):"nodeType"in e?lt.bind(e):Ye(e,"html"):("raw"in e?Xe("html"):lt.wire).apply(null,arguments)}return lt.Component=v,lt.bind=function(e){return tt.bind(e)},lt.define=st,lt.diff=h,(lt.hyper=lt).observe=Fe,lt.tagger=at,lt.wire=function(e,t){return null==e?Xe(t||"html"):Ye(e,t||"html")},lt._={WeakMap:n,WeakSet:u},nt=Xe,rt=new n,ot=Object.create,it=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var i,s,a,l=t.get(e)||it(e,t);switch(typeof o){case"object":case"function":var c=l.w||(l.w=new n);return c.get(o)||(i=c,s=o,a=new e(r),i.set(s,a),a);default:var u=l.p||(l.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new y,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),lt}(document); +/*! (c) Andrea Giammarchi (ISC) */const Le=$,Ne=Ae,Te=Ee,Re=Ce,je=De({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}});function ze(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Pe(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function Oe(e=[],t=(e=>e),n=i){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(je.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=je.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function Ie(e){return e.trim().replace(/\s+/g," ")}function De(e,t=i){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function qe(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){et(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}function Me(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function Be(e){const t=new Set,n="ltNodefault"in e.dataset?"":Ie(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>Ie(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(Ie(e)))}return[...t]}function Fe(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function Ue(e,t){const n=t.closest(".informative, .note, .issue, .example, .ednote, .practice, .introductory");let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function We(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function He(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function Ge(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class Ve extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function Ze(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>Fe(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),Ke(t),t}function Ke(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...Je(t)])e.remove()}function*Je(e){for(;e.nextNode();)yield e.currentNode}class Xe extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class Ye extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||Me(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:i,title:s,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:i,title:s,details:a,stack:n}}}function Qe(e,t,n={}){const r={...n,isWarning:!1};rt("error",new Ye(e,t,r))}function et(e,t,n={}){const r={...n,isWarning:!0};rt("warn",new Ye(e,t,r))}const tt="core/pubsubhub",nt=new Map;function rt(e,...t){if(!nt.has(e))return;if(Array.from(nt.get(e)).forEach(e=>{try{e(...t)}catch(t){Qe(`Error when calling function ${e.name}.`,tt,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function ot(e,t,n={once:!1}){return n.once?ot(e,(function n(...r){!function({topic:e,cb:t}){const n=nt.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(nt.has(e)?nt.get(e).add(t):nt.set(e,new Set([t])),{topic:e,cb:t})}n(tt,{sub:ot});const it=["githubToken","githubUser"];class st{constructor(){this._respecDonePromise=new Promise(e=>{ot("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],ot("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),ot("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}}const at="core/post-process";const lt="core/pre-process";const ct="core/base-runner";var ut=Object.freeze({__proto__:null,name:ct,runAll:async function(e){!function(){const e=new st;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(et("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),rt("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),ot("amend-user-config",n),ot("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of it)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),rt("amend-user-config",r)}(respecConfig),performance.mark(ct+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||Qe("Every item in `preProcess` must be a JS function.",lt),t}).map(async t=>{try{return await t(e,document)}catch(e){Qe(`Function ${t.name} threw an error during \`preProcess\`.`,lt,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const i=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(i),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},rt("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||Qe("Every item in `postProcess` must be a JS function.",at),t}).map(async t=>{try{return await t(e,document)}catch(e){Qe(`Function ${t.name} threw an error during \`postProcess\`.`,at,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),rt("end-all"),Pe(document),performance.mark(ct+"-end"),performance.measure(ct,ct+"-start",ct+"-end")}});var dt=String.raw`.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0} +#respec-ui{position:fixed;display:flex;flex-direction:row-reverse;top:20px;right:20px;width:202px;text-align:right;z-index:9000} +#respec-pill,.respec-info-button{background:#fff;height:2.5em;color:#787878;border:1px solid #ccc;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5)} +.respec-info-button{border:none;opacity:.75;border-radius:2em;margin-right:1em;min-width:3.5em} +.respec-info-button:focus,.respec-info-button:hover{opacity:1;transition:opacity .2s} +#respec-pill:disabled{font-size:2.8px;text-indent:-9999em;border-top:1.1em solid rgba(40,40,40,.2);border-right:1.1em solid rgba(40,40,40,.2);border-bottom:1.1em solid rgba(40,40,40,.2);border-left:1.1em solid #fff;transform:translateZ(0);animation:respec-spin .5s infinite linear;box-shadow:none} +#respec-pill:disabled,#respec-pill:disabled:after{border-radius:50%;width:10em;height:10em} +@keyframes respec-spin{ +0%{transform:rotate(0)} +100%{transform:rotate(360deg)} +} +.respec-hidden{visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s linear} +.respec-visible{visibility:visible;opacity:1;transition:opacity .2s linear} +#respec-pill:focus,#respec-pill:hover{color:#000;background-color:#f5f5f5;transition:color .2s} +#respec-menu{position:absolute;margin:0;padding:0;font-family:sans-serif;background:#fff;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5);width:200px;display:none;text-align:left;margin-top:32px;font-size:.8em} +#respec-menu:not([hidden]){display:block} +#respec-menu li{list-style-type:none;margin:0;padding:0} +.respec-save-buttons{display:grid;grid-template-columns:repeat(auto-fill,minmax(47%,2fr));grid-gap:.5cm;padding:.5cm} +.respec-save-button:link{padding-top:16px;color:#f0f0f0;background:#2a5aa8;justify-self:stretch;height:1cm;text-decoration:none;text-align:center;font-size:inherit;border:none;border-radius:.2cm} +.respec-save-button:link:hover{color:#fff;background:#2a5aa8;padding:0;margin:0;border:0;padding-top:16px} +.respec-save-button:link:focus{background:#193766} +#respec-pill:focus,#respec-ui button:focus,.respec-option:focus{outline:0;outline-style:none} +#respec-pill-error{background-color:red;color:#fff} +#respec-pill-warning{background-color:orange;color:#fff} +.respec-error-list,.respec-warning-list{margin:0;padding:0;list-style:none;font-family:sans-serif;background-color:#fffbe6;font-size:.85em} +.respec-error-list>li,.respec-warning-list>li{padding:.4em .7em} +.respec-warning-list>li::before{content:"⚠️";padding-right:.5em} +.respec-error-list p,.respec-warning-list p{padding:0;margin:0} +.respec-warning-list li{color:#5c3b00;border-bottom:thin solid #fff5c2} +.respec-error-list,.respec-error-list li{background-color:#fff0f0} +.respec-error-list li::before{content:"💥";padding-right:.5em} +.respec-error-list li{padding:.4em .7em;color:#5c3b00;border-bottom:thin solid #ffd7d7} +.respec-error-list li>p{margin:0;padding:0;display:inline-block} +.respec-error-list li>p:first-child,.respec-warning-list li>p:first-child{display:inline} +.respec-error-list>li li,.respec-warning-list>li li{margin:0;list-style:disc} +#respec-overlay{display:block;position:fixed;z-index:10000;top:0;left:0;height:100%;width:100%;background:#000} +.respec-show-overlay{transition:opacity .2s linear;opacity:.5} +.respec-hide-overlay{transition:opacity .2s linear;opacity:0} +.respec-modal{display:block;position:fixed;z-index:11000;margin:auto;top:10%;background:#fff;border:5px solid #666;min-width:20%;width:79%;padding:0;max-height:80%;overflow-y:auto;margin:0 -.5cm} +@media screen and (min-width:78em){ +.respec-modal{width:62%} +} +.respec-modal h3{margin:0;padding:.2em;text-align:center;color:#000;background:linear-gradient(to bottom,#eee 0,#eee 50%,#ccc 100%);font-size:1em} +.respec-modal .inside div p{padding-left:1cm} +#respec-menu button.respec-option{background:#fff;padding:0 .2cm;border:none;width:100%;text-align:left;font-size:inherit;padding:1.2em 1.2em} +#respec-menu button.respec-option:hover,#respec-menu button:focus{background-color:#eee} +.respec-cmd-icon{padding-right:.5em} +#respec-ui button.respec-option:last-child{border:none;border-radius:inherit} +.respec-button-copy-paste{position:absolute;height:28px;width:40px;cursor:pointer;background-image:linear-gradient(#fcfcfc,#eee);border:1px solid #90b8de;border-left:0;border-radius:0 0 3px 0;-webkit-user-select:none;user-select:none;-webkit-appearance:none;top:0;left:127px} +@media print{ +#respec-ui{display:none} +} +.respec-iframe{width:100%;min-height:550px;height:100%;overflow:hidden;padding:0;margin:0;border:0} +.respec-iframe:not(.ready){background:url(https://respec.org/xref/loader.gif) no-repeat center} +.respec-iframe+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}`;function pt(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var ft=Object.freeze({__proto__:null,name:"core/reindent",reindent:pt,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=pt(e.innerHTML)}});const ht=/>/gm,mt=/&/gm;class gt extends Te.Renderer{code(e,t,n){const{language:r,...o}=gt.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const i=super.code(e,r,n),{example:s,illegalExample:a}=o;if(!s&&!a)return i;const l=s||a,c=`${r} ${s?"example":"illegal-example"}`;return i.replace("<pre>",`<pre title="${l}" class="${c}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function bt(e){const t=pt(e).replace(ht,">").replace(mt,"&");return Te(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new gt})}function wt(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=bt(e.innerHTML)}class yt{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function vt(e,t){return function e(n){const r=new yt(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function kt(e){const t=vt(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const xt=($t="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll($t);return t.forEach(wt),Array.from(t)});var $t;var _t=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:bt,restructure:kt,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of xt(document.body))kt(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=Ge(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),wt(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const i=vt(o,document);o.append(r,i),document.body.replaceWith(o)}});function St(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=dt,e.classList.add("removeOnSave"),document.head.appendChild(e)}();const Et=Ne`<div id="respec-ui" class="removeOnSave" hidden></div>`,Ct=Ne`<ul id="respec-menu" role="menu" aria-labelledby="respec-pill" hidden -></ul>`,Lt=Re`<button +></ul>`,At=Ne`<button class="close-button" - onclick=${()=>Mt.closeModal()} + onclick=${()=>qt.closeModal()} title="Close" > ❌ -</button>`;let Rt,Tt;window.addEventListener("load",()=>It(At));const Nt=[],jt=[],zt={};ot("start-all",()=>document.body.prepend(Ct),{once:!0}),ot("end-all",()=>document.body.prepend(Ct),{once:!0});const Pt=Re`<button id="respec-pill" disabled>ReSpec</button>`;function Ot(){At.classList.toggle("respec-hidden"),At.classList.toggle("respec-visible"),At.hidden=!At.hidden}function It(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}Ct.appendChild(Pt),Pt.addEventListener("click",e=>{e.stopPropagation(),Pt.setAttribute("aria-expanded",String(At.hidden)),Ot(),At.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{At.hidden||Ot()}),Ct.appendChild(At),At.addEventListener("keydown",e=>{"Escape"!==e.key||At.hidden||(Pt.setAttribute("aria-expanded",String(At.hidden)),Ot(),Pt.focus())});const Dt=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function qt(e,t,n,r){t.push(e),zt.hasOwnProperty(n)||(zt[n]=function(e,t,n){const r=Re`<button +</button>`;let Lt,Nt;window.addEventListener("load",()=>Ot(Ct));const Tt=[],Rt=[],jt={};ot("start-all",()=>document.body.prepend(Et),{once:!0}),ot("end-all",()=>document.body.prepend(Et),{once:!0});const zt=Ne`<button id="respec-pill" disabled>ReSpec</button>`;function Pt(){Ct.classList.toggle("respec-hidden"),Ct.classList.toggle("respec-visible"),Ct.hidden=!Ct.hidden}function Ot(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}Et.appendChild(zt),zt.addEventListener("click",e=>{e.stopPropagation(),zt.setAttribute("aria-expanded",String(Ct.hidden)),Pt(),Ct.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{Ct.hidden||Pt()}),Et.appendChild(Ct),Ct.addEventListener("keydown",e=>{"Escape"!==e.key||Ct.hidden||(zt.setAttribute("aria-expanded",String(Ct.hidden)),Pt(),zt.focus())});const It=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function Dt(e,t,n,r){t.push(e),jt.hasOwnProperty(n)||(jt[n]=function(e,t,n){const r=Ne`<button id="${"respec-pill-"+e}" class="respec-info-button" - ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Re`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(Bt(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}Mt.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return Et(r,o),r}(n,t,r),Ct.appendChild(zt[n]));const o=zt[n];o.textContent=t.length;const i=1===t.length?Ne.singular(r):r;Et(o,new Map([["label",`${t.length} ${i}`]]))}Et(Pt,Dt);const Mt={show(){try{Ct.hidden=!1}catch(e){console.error(e)}},hide(){Ct.hidden=!0},enable(){Pt.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),i=Re`<button id="${o}" class="respec-option"> + ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Ne`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(Mt(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}qt.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return St(r,o),r}(n,t,r),Et.appendChild(jt[n]));const o=jt[n];o.textContent=t.length;const i=1===t.length?Re.singular(r):r;St(o,new Map([["label",`${t.length} ${i}`]]))}St(zt,It);const qt={show(){try{Et.hidden=!1}catch(e){console.error(e)}},hide(){Et.hidden=!0},enable(){zt.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),i=Ne`<button id="${o}" class="respec-option"> <span class="respec-cmd-icon" aria-hidden="true">${r}</span> ${e}… - </button>`,s=Re`<li role="menuitem">${i}</li>`;return s.addEventListener("click",t),At.appendChild(s),i},error(e){qt(e,Nt,"error","ReSpec Errors")},warning(e){qt(e,jt,"warning","ReSpec Warnings")},closeModal(e){Tt&&(Tt.classList.remove("respec-show-overlay"),Tt.classList.add("respec-hide-overlay"),Tt.addEventListener("transitionend",()=>{Tt.remove(),Tt=null})),e&&e.setAttribute("aria-expanded","false"),Rt&&(Rt.remove(),Rt=null,Pt.focus())},freshModal(e,t,n){Rt&&Rt.remove(),Tt&&Tt.remove(),Tt=Re`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";Rt=Re`<div + </button>`,s=Ne`<li role="menuitem">${i}</li>`;return s.addEventListener("click",t),Ct.appendChild(s),i},error(e){Dt(e,Tt,"error","ReSpec Errors")},warning(e){Dt(e,Rt,"warning","ReSpec Warnings")},closeModal(e){Nt&&(Nt.classList.remove("respec-show-overlay"),Nt.classList.add("respec-hide-overlay"),Nt.addEventListener("transitionend",()=>{Nt.remove(),Nt=null})),e&&e.setAttribute("aria-expanded","false"),Lt&&(Lt.remove(),Lt=null,zt.focus())},freshModal(e,t,n){Lt&&Lt.remove(),Nt&&Nt.remove(),Nt=Ne`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";Lt=Ne`<div id="${r}" class="respec-modal removeOnSave" role="dialog" aria-labelledby="${o}" > - ${Lt} + ${At} <h3 id="${o}">${e}</h3> <div class="inside">${t}</div> - </div>`;const i=new Map([["labelledby",o]]);Et(Rt,i),document.body.append(Tt,Rt),Tt.addEventListener("click",()=>this.closeModal(n)),Tt.classList.toggle("respec-show-overlay"),Rt.hidden=!1,It(Rt)}};function Bt(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${Oe(e.elements.map(Ft))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return wt(`${t}${e.message}${n}${r}${o}`)}function Ft(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&Mt.closeModal()}),window.respecUI=Mt,ot("error",e=>Mt.error(e)),ot("warn",e=>Mt.warning(e));var Ut=Object.freeze({__proto__:null,name:"core/ui",ui:Mt});var Wt=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const Ht=new WeakMap;class Gt{constructor(e,t){Ht.set(this,{name:e,lintingFunction:t})}get name(){return Ht.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return Ht.get(this).lintingFunction(e,t)}}const Vt="check-charset",Zt={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},Kt=i in Zt?i:"en";const Jt=new Gt(Vt,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:Vt,occurrences:n.length,...Zt[Kt]}})),Yt="check-internal-slots",Xt={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},Qt=i in Xt?i:"en";const en=new Gt(Yt,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:Yt,offendingElements:n,occurrences:n.length,...Xt[Qt]}})),tn="check-punctuation",nn=[".",":","!","?"],rn={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${nn.map(e=>`"${e}"`).join(", ")}.`}},on=i in rn?i:"en";const sn=new Gt(tn,(function(e,t){const n=new RegExp(`[${nn.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:tn,offendingElements:r,occurrences:r.length,...rn[on]}})),an="core/linter",cn=new WeakMap;const ln=new class{constructor(){cn.set(this,{rules:new Set})}get rules(){return cn.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...cn.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...un,...t},{description:r,help:o,howToFix:i,name:s,occurrences:a,offendingElements:c}=n,l=c.length?r:`${r} (Count: ${a})`;et(l,`${an}/${s}`,{hint:`${i} ${o}`,elements:c})}(n.lint(e,t)));await n}},un={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var dn=Object.freeze({__proto__:null,name:an,default:ln,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await ln.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const fn="local-refs-exist",pn={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},hn=i in pn?i:"en";const mn=new Gt(fn,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(gn);if(n.length)return{name:fn,offendingElements:n,occurrences:n.length,...pn[hn]}}));function gn(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const bn="no-headingless-sections",wn={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},yn=i in wn?i:"en",vn=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const kn=new Gt(bn,(function(e,t){const n=[...t.querySelectorAll("section")].filter(vn);if(n.length)return{name:bn,offendingElements:n,occurrences:n.length,...wn[yn]}})),xn="no-http-props",$n={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},_n=i in $n?i:"en";const Sn=new Gt(xn,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:xn,occurrences:n.length,...$n[_n]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),En="no-unused-vars",Cn={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},An=i in Cn?i:"en";const Ln=new Gt(En,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=Ie(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:En,offendingElements:n,occurrences:n.length,...Cn[An]}})),Rn="privsec-section",Tn={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},Nn=i in Tn?i:"en";const jn=new Gt(Rn,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Rn,occurrences:1,...Tn[Nn]}}));ln.register(Sn,kn,Ln,sn,mn,en,Jt,jn);const zn={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0};ln.register(jn);const Pn=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}],["cc-by-nd",{name:"Creative Commons Attribution-NoDerivatives 4.0 International Public License",short:"CC-BY-ND",url:"https://creativecommons.org/licenses/by-nd/4.0/legalcode.nl"}]]),On={lint:{"privsec-section":!0},doJsonLd:!0,license:"cc-by",specStatus:"GN-BASIS",logos:[{src:"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg",alt:"Geonovum",id:"Geonovum",height:67,width:132,url:"https://www.geonovum.nl/"}]};var In=Object.freeze({__proto__:null,name:"geonovum/defaults",run:function(e){const t=!1!==e.lint&&{...zn.lint,...On.lint,...e.lint};Object.assign(e,{...zn,...On,...e,lint:t}),Object.assign(e,function(e){return{isCCBY:"cc-by"===e.license,licenseInfo:Pn.get(e.license),isBasic:"GN-BASIS"===e.specStatus,isRegular:"GN-BASIS"===e.specStatus}}(e))}});const Dn=async function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=await async function(){try{return(await Promise.resolve().then((function(){return vs}))).default}catch{return ft("respec.css")}}(),document.head.appendChild(e),e}();var qn=Object.freeze({__proto__:null,name:"core/style",run:async function(e){e.noReSpecCSS&&(await Dn).remove()}});const Mn="geonovum/style";function Bn(e){const t=document.createElement("link");return t.rel="stylesheet",t.href=`https://tools.geostandaarden.nl/respec/style/${e}.css`,t}const Fn=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preconnect",href:"https://tools.geostandaarden.nl/"},{hint:"preload",href:"https://tools.geostandaarden.nl/respec/style/base.css",as:"style"},{hint:"preload",href:"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg",as:"image"}],t=document.createDocumentFragment();for(const n of e.map(ze))t.appendChild(n);return t}(),Un=document.createElement("link");Un.rel="shortcut icon",Un.type="image/x-icon",Un.href="https://tools.geostandaarden.nl/respec/style/logos/Geonovum.ico",document.head.prepend(Un),document.head.querySelector("meta[name=viewport]")||Fn.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(Fn);var Wn=Object.freeze({__proto__:null,name:Mn,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'GN-BASIS'.";e.specStatus="GN-BASIS",et(t,Mn)}document.body.querySelector("figure.scalable")&&(document.head.appendChild(Bn("leaflet")),document.head.appendChild(Bn("font-awesome")));let t="";switch(e.specStatus.toUpperCase()){case"GN-WV":t+="GN-WV.css";break;case"GN-CV":t+="GN-CV.css";break;case"GN-VV":t+="GN-VV.css";break;case"GN-DEF":t+="GN-DEF.css";break;case"GN-BASIS":t+="GN-BASIS.css";break;default:t="base.css"}e.noToc||ot("end-all",()=>{!function(e,t){const n=e.createElement("script");n.addEventListener("load",()=>{window.location.hash&&(window.location.href=window.location.hash)},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,"2016")},{once:!0}),function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,"https://tools.geostandaarden.nl/respec/style/"+t)}});const Hn={en:{status_at_publication:Re`This section describes the status of this + </div>`;const i=new Map([["labelledby",o]]);St(Lt,i),document.body.append(Nt,Lt),Nt.addEventListener("click",()=>this.closeModal(n)),Nt.classList.toggle("respec-show-overlay"),Lt.hidden=!1,Ot(Lt)}};function Mt(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${Oe(e.elements.map(Bt))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return bt(`${t}${e.message}${n}${r}${o}`)}function Bt(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&qt.closeModal()}),window.respecUI=qt,ot("error",e=>qt.error(e)),ot("warn",e=>qt.warning(e));var Ft=Object.freeze({__proto__:null,name:"core/ui",ui:qt});var Ut=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const Wt=new WeakMap;class Ht{constructor(e,t){Wt.set(this,{name:e,lintingFunction:t})}get name(){return Wt.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return Wt.get(this).lintingFunction(e,t)}}const Gt="check-charset",Vt={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},Zt=i in Vt?i:"en";const Kt=new Ht(Gt,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:Gt,occurrences:n.length,...Vt[Zt]}})),Jt="check-internal-slots",Xt={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},Yt=i in Xt?i:"en";const Qt=new Ht(Jt,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:Jt,offendingElements:n,occurrences:n.length,...Xt[Yt]}})),en="check-punctuation",tn=[".",":","!","?"],nn={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${tn.map(e=>`"${e}"`).join(", ")}.`}},rn=i in nn?i:"en";const on=new Ht(en,(function(e,t){const n=new RegExp(`[${tn.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:en,offendingElements:r,occurrences:r.length,...nn[rn]}})),sn="core/linter",an=new WeakMap;const ln=new class{constructor(){an.set(this,{rules:new Set})}get rules(){return an.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...an.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...cn,...t},{description:r,help:o,howToFix:i,name:s,occurrences:a,offendingElements:l}=n,c=l.length?r:`${r} (Count: ${a})`;et(c,`${sn}/${s}`,{hint:`${i} ${o}`,elements:l})}(n.lint(e,t)));await n}},cn={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var un=Object.freeze({__proto__:null,name:sn,default:ln,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await ln.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const dn="local-refs-exist",pn={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},fn=i in pn?i:"en";const hn=new Ht(dn,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(mn);if(n.length)return{name:dn,offendingElements:n,occurrences:n.length,...pn[fn]}}));function mn(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const gn="no-headingless-sections",bn={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},wn=i in bn?i:"en",yn=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const vn=new Ht(gn,(function(e,t){const n=[...t.querySelectorAll("section")].filter(yn);if(n.length)return{name:gn,offendingElements:n,occurrences:n.length,...bn[wn]}})),kn="no-http-props",xn={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},$n=i in xn?i:"en";const _n=new Ht(kn,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:kn,occurrences:n.length,...xn[$n]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),Sn="no-unused-vars",En={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Cn=i in En?i:"en";const An=new Ht(Sn,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=Ie(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:Sn,offendingElements:n,occurrences:n.length,...En[Cn]}})),Ln="privsec-section",Nn={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},Tn=i in Nn?i:"en";const Rn=new Ht(Ln,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Ln,occurrences:1,...Nn[Tn]}}));ln.register(_n,vn,An,on,hn,Qt,Kt,Rn);const jn={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0};ln.register(Rn);const zn=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}],["cc-by-nd",{name:"Creative Commons Attribution-NoDerivatives 4.0 International Public License",short:"CC-BY-ND",url:"https://creativecommons.org/licenses/by-nd/4.0/legalcode.nl"}]]),Pn={lint:{"privsec-section":!0},doJsonLd:!0,license:"cc-by",specStatus:"GN-BASIS",logos:[{src:"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg",alt:"Geonovum",id:"Geonovum",height:67,width:132,url:"https://www.geonovum.nl/"}]};var On=Object.freeze({__proto__:null,name:"geonovum/defaults",run:function(e){const t=!1!==e.lint&&{...jn.lint,...Pn.lint,...e.lint};Object.assign(e,{...jn,...Pn,...e,lint:t}),Object.assign(e,function(e){return{isCCBY:"cc-by"===e.license,licenseInfo:zn.get(e.license),isBasic:"GN-BASIS"===e.specStatus,isRegular:"GN-BASIS"===e.specStatus}}(e))}});var In=String.raw`@keyframes pop{ +0%{transform:scale(1,1)} +25%{transform:scale(1.25,1.25);opacity:.75} +100%{transform:scale(1,1)} +} +.hljs{background:0 0!important} +a abbr,h1 abbr,h2 abbr,h3 abbr,h4 abbr,h5 abbr,h6 abbr{border:none} +dfn{font-weight:700} +a.internalDFN{color:inherit;border-bottom:1px solid #99c;text-decoration:none} +a.externalDFN{color:inherit;border-bottom:1px dotted #ccc;text-decoration:none} +a.bibref{text-decoration:none} +.respec-offending-element:target{animation:pop .25s ease-in-out 0s 1} +.respec-offending-element,a[href].respec-offending-element{text-decoration:red wavy underline} +@supports not (text-decoration:red wavy underline){ +.respec-offending-element:not(pre){display:inline-block} +.respec-offending-element{background:url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=) bottom repeat-x} +} +#references :target{background:#eaf3ff;animation:pop .4s ease-in-out 0s 1} +cite .bibref{font-style:normal} +code{color:#c63501} +th code{color:inherit} +a[href].orcid{padding-left:4px;padding-right:4px} +a[href].orcid>svg{margin-bottom:-2px} +.toc a,.tof a{text-decoration:none} +a .figno,a .secno{color:#000} +ol.tof,ul.tof{list-style:none outside none} +.caption{margin-top:.5em;font-style:italic} +table.simple{border-spacing:0;border-collapse:collapse;border-bottom:3px solid #005a9c} +.simple th{background:#005a9c;color:#fff;padding:3px 5px;text-align:left} +.simple th a{color:#fff;padding:3px 5px;text-align:left} +.simple th[scope=row]{background:inherit;color:inherit;border-top:1px solid #ddd} +.simple td{padding:3px 10px;border-top:1px solid #ddd} +.simple tr:nth-child(even){background:#f0f6ff} +.section dd>p:first-child{margin-top:0} +.section dd>p:last-child{margin-bottom:0} +.section dd{margin-bottom:1em} +.section dl.attrs dd,.section dl.eldef dd{margin-bottom:0} +#issue-summary>ul{column-count:2} +#issue-summary li{list-style:none;display:inline-block} +details.respec-tests-details{margin-left:1em;display:inline-block;vertical-align:top} +details.respec-tests-details>*{padding-right:2em} +details.respec-tests-details[open]{z-index:999999;position:absolute;border:thin solid #cad3e2;border-radius:.3em;background-color:#fff;padding-bottom:.5em} +details.respec-tests-details[open]>summary{border-bottom:thin solid #cad3e2;padding-left:1em;margin-bottom:1em;line-height:2em} +details.respec-tests-details>ul{width:100%;margin-top:-.3em} +details.respec-tests-details>li{padding-left:1em} +a[href].self-link:hover{opacity:1;text-decoration:none;background-color:transparent} +h2,h3,h4,h5,h6{position:relative} +aside.example .marker>a.self-link{color:inherit} +h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{border:none;color:inherit;font-size:83%;height:2em;left:-1.6em;opacity:.5;position:absolute;text-align:center;text-decoration:none;top:0;transition:opacity .2s;width:2em} +h2>a.self-link::before,h3>a.self-link::before,h4>a.self-link::before,h5>a.self-link::before,h6>a.self-link::before{content:"§";display:block} +@media (max-width:767px){ +dd{margin-left:0} +h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left:auto;top:auto} +} +@media print{ +.removeOnSave{display:none} +}`;const Dn=function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=In,document.head.appendChild(e),e}();var qn=Object.freeze({__proto__:null,name:"core/style",run:function(e){e.noReSpecCSS&&Dn.remove()}});const Mn="geonovum/style";function Bn(e){const t=document.createElement("link");return t.rel="stylesheet",t.href=`https://tools.geostandaarden.nl/respec/style/${e}.css`,t}const Fn=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preconnect",href:"https://tools.geostandaarden.nl/"},{hint:"preload",href:"https://tools.geostandaarden.nl/respec/style/base.css",as:"style"},{hint:"preload",href:"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg",as:"image"}],t=document.createDocumentFragment();for(const n of e.map(ze))t.appendChild(n);return t}(),Un=document.createElement("link");Un.rel="shortcut icon",Un.type="image/x-icon",Un.href="https://tools.geostandaarden.nl/respec/style/logos/Geonovum.ico",document.head.prepend(Un),document.head.querySelector("meta[name=viewport]")||Fn.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(Fn);var Wn=Object.freeze({__proto__:null,name:Mn,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'GN-BASIS'.";e.specStatus="GN-BASIS",et(t,Mn)}document.body.querySelector("figure.scalable")&&(document.head.appendChild(Bn("leaflet")),document.head.appendChild(Bn("font-awesome")));let t="";switch(e.specStatus.toUpperCase()){case"GN-WV":t+="GN-WV.css";break;case"GN-CV":t+="GN-CV.css";break;case"GN-VV":t+="GN-VV.css";break;case"GN-DEF":t+="GN-DEF.css";break;case"GN-BASIS":t+="GN-BASIS.css";break;default:t="base.css"}e.noToc||ot("end-all",()=>{!function(e,t){const n=e.createElement("script");n.addEventListener("load",()=>{window.location.hash&&(window.location.href=window.location.hash)},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,"2016")},{once:!0}),function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,"https://tools.geostandaarden.nl/respec/style/"+t)}});const Hn={en:{status_at_publication:Ne`This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current Geonovum publications and the latest revision of this document can be found via <a href="https://www.geonovum.nl/geo-standaarden/alle-standaarden" >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a - >(in Dutch).`},nl:{status_at_publication:Re`Deze paragraaf beschrijft de status van dit + >(in Dutch).`},nl:{status_at_publication:Ne`Deze paragraaf beschrijft de status van dit document ten tijde van publicatie. Het is mogelijk dat er actuelere versies van dit document bestaan. Een lijst van Geonovum publicaties en de laatste gepubliceerde versie van dit document zijn te vinden op <a href="https://www.geonovum.nl/geo-standaarden/alle-standaarden" >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a - >.`}};Object.keys(Hn).forEach(e=>{o[e]||(o[e]={}),Object.assign(o[e],Hn[e])});var Gn=Object.freeze({__proto__:null,name:"geonovum/l10n"});const Vn="core/github";let Zn,Kn;const Jn=new Promise((e,t)=>{Zn=e,Kn=e=>{Qe(e,Vn),t(new Error(e))}}),Yn=De({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});var Xn=Object.freeze({__proto__:null,name:Vn,github:Jn,run:async function(e){if(!e.hasOwnProperty("github")||!e.github)return void Zn(null);if("object"==typeof e.github&&!e.github.hasOwnProperty("repoURL")){return void Kn("Config option `[github](https://github.com/w3c/respec/wiki/github)` is missing property `repoURL`.")}let t,n=e.github.repoURL||e.github;n.endsWith("/")||(n+="/");try{t=new URL(n,"https://github.com")}catch{return void Kn(`\`respecConf.github\` is not a valid URL? (${t})`)}if("https://github.com"!==t.origin){return void Kn(`\`respecConf.github\` must be HTTPS and pointing to GitHub. (${t})`)}const[r,o]=t.pathname.split("/").filter(e=>e);if(!r||!o){return void Kn("`respecConf.github` URL needs a path with, for example, w3c/my-spec")}const i=e.github.branch||"gh-pages",s=new URL("./issues/",t).href,a={edDraftURI:`https://${r.toLowerCase()}.github.io/${o}/`,githubToken:void 0,githubUser:void 0,issueBase:s,atRiskBase:s,otherLinks:[],pullBase:new URL("./pulls/",t).href,shortName:o},c={key:Yn.participate,data:[{value:`GitHub ${r}/${o}`,href:t},{value:Yn.file_a_bug,href:a.issueBase},{value:Yn.commit_history,href:new URL("./commits/"+i,t.href).href},{value:"Pull requests",href:a.pullBase}]};let l="https://respec.org/github";if(e.githubAPI)if(new URL(e.githubAPI).hostname===window.parent.location.hostname)l=e.githubAPI;else{et("`respecConfig.githubAPI` should not be added manually.",Vn)}const u={branch:i,repoURL:t.href,apiBase:l,fullName:`${r}/${o}`};Zn(u);const d={...a,...e,github:u,githubAPI:l};Object.assign(e,d),e.otherLinks.unshift(c)}});const Qn="core/data-include";function er(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=qe(e,r.dataset.oninclude,n),i="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=wt(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&xt(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:i}),i||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var tr=Object.freeze({__proto__:null,name:Qn,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);er(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),Qe(r,Qn,{elements:[e]})}});await Promise.all(t)}});var nr=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=qe(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const rr=/^[a-z]+(\s+[a-z]+)+$/,or=/\B"([^"]*)"\B/,ir=/(\w+)\((.*)\)$/,sr=/^\[\[(\w+)\]\]$/,ar=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,cr=/^(\w+)\["([\w- ]*)"\]$/,lr=/\.?(\w+\(.*\)$)/;function ur(e){const{identifier:t,renderParent:n}=e;if(n)return Re`<a data-xref-type="_IDL_" data-link-type="idl" + >.`}};Object.keys(Hn).forEach(e=>{o[e]||(o[e]={}),Object.assign(o[e],Hn[e])});var Gn=Object.freeze({__proto__:null,name:"geonovum/l10n"});const Vn="core/github";let Zn,Kn;const Jn=new Promise((e,t)=>{Zn=e,Kn=e=>{Qe(e,Vn),t(new Error(e))}}),Xn=De({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});var Yn=Object.freeze({__proto__:null,name:Vn,github:Jn,run:async function(e){if(!e.hasOwnProperty("github")||!e.github)return void Zn(null);if("object"==typeof e.github&&!e.github.hasOwnProperty("repoURL")){return void Kn("Config option `[github](https://github.com/w3c/respec/wiki/github)` is missing property `repoURL`.")}let t,n=e.github.repoURL||e.github;n.endsWith("/")||(n+="/");try{t=new URL(n,"https://github.com")}catch{return void Kn(`\`respecConf.github\` is not a valid URL? (${t})`)}if("https://github.com"!==t.origin){return void Kn(`\`respecConf.github\` must be HTTPS and pointing to GitHub. (${t})`)}const[r,o]=t.pathname.split("/").filter(e=>e);if(!r||!o){return void Kn("`respecConf.github` URL needs a path with, for example, w3c/my-spec")}const i=e.github.branch||"gh-pages",s=new URL("./issues/",t).href,a={edDraftURI:`https://${r.toLowerCase()}.github.io/${o}/`,githubToken:void 0,githubUser:void 0,issueBase:s,atRiskBase:s,otherLinks:[],pullBase:new URL("./pulls/",t).href,shortName:o},l={key:Xn.participate,data:[{value:`GitHub ${r}/${o}`,href:t},{value:Xn.file_a_bug,href:a.issueBase},{value:Xn.commit_history,href:new URL("./commits/"+i,t.href).href},{value:"Pull requests",href:a.pullBase}]};let c="https://respec.org/github";if(e.githubAPI)if(new URL(e.githubAPI).hostname===window.parent.location.hostname)c=e.githubAPI;else{et("`respecConfig.githubAPI` should not be added manually.",Vn)}const u={branch:i,repoURL:t.href,apiBase:c,fullName:`${r}/${o}`};Zn(u);const d={...a,...e,github:u,githubAPI:c};Object.assign(e,d),e.otherLinks.unshift(l)}});const Qn="core/data-include";function er(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=qe(e,r.dataset.oninclude,n),i="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=bt(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&kt(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:i}),i||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var tr=Object.freeze({__proto__:null,name:Qn,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);er(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),Qe(r,Qn,{elements:[e]})}});await Promise.all(t)}});var nr=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=qe(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const rr=/^[a-z]+(\s+[a-z]+)+$/,or=/\B"([^"]*)"\B/,ir=/(\w+)\((.*)\)$/,sr=/^\[\[(\w+)\]\]$/,ar=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,lr=/^(\w+)\["([\w- ]*)"\]$/,cr=/\.?(\w+\(.*\)$)/;function ur(e){const{identifier:t,renderParent:n}=e;if(n)return Ne`<a data-xref-type="_IDL_" data-link-type="idl" ><code>${t}</code></a - >`}function dr(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Re`${n&&r?".":""}<a + >`}function dr(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Ne`${n&&r?".":""}<a data-xref-type="attribute" data-link-for=${o} data-xref-for=${o} data-lt="${`[[${t}]]`}" ><code>[[${t}]]</code></a - >`}function fr(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Re`${r?".":""}<a + >`}function pr(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Ne`${r?".":""}<a data-link-type="idl" data-xref-type="attribute|dict-member" data-link-for="${o}" data-xref-for="${o}" ><code>${n}</code></a - >`}function pr(e){const{args:t,identifier:n,type:r,parent:o,renderParent:i}=e,{identifier:s}=o||{},a=function(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Re`${e}, `);return Re`${r}${n[n.length-1]}`}(t,e=>Re`<var>${e}</var>`),c=`${n}(${t.join(", ")})`;return Re`${o&&i?".":""}<a + >`}function fr(e){const{args:t,identifier:n,type:r,parent:o,renderParent:i}=e,{identifier:s}=o||{},a=function(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Ne`${e}, `);return Ne`${r}${n[n.length-1]}`}(t,e=>Ne`<var>${e}</var>`),l=`${n}(${t.join(", ")})`;return Ne`${o&&i?".":""}<a data-link-type="idl" data-xref-type="${r}" data-link-for="${s}" data-xref-for="${s}" - data-lt="${c}" + data-lt="${l}" ><code>${n}</code></a - ><code>(${a})</code>`}function hr(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Re`"<a + ><code>(${a})</code>`}function hr(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Ne`"<a data-link-type="idl" data-xref-type="enum-value" data-link-for="${o}" data-xref-for="${o}" data-lt="${n?null:"the-empty-string"}" ><code>${n}</code></a - >"`}function mr(e){const{identifier:t}=e;return Re`"<a + >"`}function mr(e){const{identifier:t}=e;return Ne`"<a data-link-type="idl" data-cite="WebIDL" data-xref-type="exception" ><code>${t}</code></a - >"`}function gr(e){const{identifier:t}=e;return Re`<a + >"`}function gr(e){const{identifier:t}=e;return Ne`<a data-link-type="idl" data-cite="WebIDL" data-xref-type="interface" ><code>${t}</code></a - >`}function br(e){let t;try{t=function(e){const[t,n]=e.split(lr),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),i=[];for(;r.length;){const t=r.pop();if(ir.test(t)){const[,e,n]=t.match(ir),r=n.split(/,\s*/).filter(e=>e);i.push({type:"method",identifier:e,args:r,renderParent:o})}else if(cr.test(t)){const[,e,n]=t.match(cr);i.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(or.test(t)){const[,e]=t.match(or);o?i.push({type:"exception",identifier:e}):i.push({type:"enum",enumValue:e,renderParent:o})}else if(sr.test(t)){const[,e]=t.match(sr);i.push({type:"internal-slot",identifier:e,renderParent:o})}else if(ar.test(t)&&r.length){const[,e]=t.match(ar);i.push({type:"attribute",identifier:e,renderParent:o})}else if(rr.test(t))i.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!ar.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);i.push({type:"base",identifier:t,renderParent:o})}}return i.forEach((e,t,n)=>{e.parent=n[t+1]||null}),i.reverse()}(e)}catch(t){const n=Re`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return Qe(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Re(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=ur(e);t&&r.push(t);break}case"attribute":r.push(fr(e));break;case"internal-slot":r.push(dr(e));break;case"method":r.push(pr(e));break;case"enum":r.push(hr(e));break;case"exception":r.push(mr(e));break;case"idl-primitive":r.push(gr(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const wr=new Set(["alias","reference"]),yr=async function(){return await Le.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const vr={get ready(){return yr},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!wr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!wr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...wr].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!wr.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...wr],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},kr={},xr=new URL("https://specref.herokuapp.com/bibrefs?refs="),$r=ze({hint:"dns-prefetch",href:xr.origin});let _r;document.head.appendChild($r);const Sr=new Promise(e=>{_r=e});async function Er(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(xr.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await vr.addAll(o)}catch(e){console.error(e)}return o}async function Cr(e){const t=await Sr;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await Cr(n.aliasOf):n}var Ar=Object.freeze({__proto__:null,biblio:kr,name:"core/biblio",updateFromNetwork:Er,resolveRef:Cr,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=kr;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await vr.ready;const n=e.map(async e=>({id:e,data:await vr.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{kr[e.id]=e.data});const i=o.noData.map(e=>e.id);if(i.length){const e=await Er(i,{forceUpdate:!0});Object.assign(kr,e)}Object.assign(kr,this.conf.localBiblio),(()=>{_r(this.conf.biblio)})()}},wireReference:qr,stringifyReference:Mr});const Lr="core/render-biblio",Rr=De({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),Tr=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),Nr=Object.freeze({authors:[],date:"",href:"",publisher:"",status:"",title:"",etAl:!1}),jr=(zr=".",e=>{const t=e.trim();return!t||t.endsWith(zr)?t:t+zr});var zr;function Pr(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(Or)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),i=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),s=Re`<section> + >`}function br(e){let t;try{t=function(e){const[t,n]=e.split(cr),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),i=[];for(;r.length;){const t=r.pop();if(ir.test(t)){const[,e,n]=t.match(ir),r=n.split(/,\s*/).filter(e=>e);i.push({type:"method",identifier:e,args:r,renderParent:o})}else if(lr.test(t)){const[,e,n]=t.match(lr);i.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(or.test(t)){const[,e]=t.match(or);o?i.push({type:"exception",identifier:e}):i.push({type:"enum",enumValue:e,renderParent:o})}else if(sr.test(t)){const[,e]=t.match(sr);i.push({type:"internal-slot",identifier:e,renderParent:o})}else if(ar.test(t)&&r.length){const[,e]=t.match(ar);i.push({type:"attribute",identifier:e,renderParent:o})}else if(rr.test(t))i.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!ar.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);i.push({type:"base",identifier:t,renderParent:o})}}return i.forEach((e,t,n)=>{e.parent=n[t+1]||null}),i.reverse()}(e)}catch(t){const n=Ne`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return Qe(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Ne(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=ur(e);t&&r.push(t);break}case"attribute":r.push(pr(e));break;case"internal-slot":r.push(dr(e));break;case"method":r.push(fr(e));break;case"enum":r.push(hr(e));break;case"exception":r.push(mr(e));break;case"idl-primitive":r.push(gr(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const wr=new Set(["alias","reference"]),yr=async function(){return await Le.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const vr={get ready(){return yr},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!wr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!wr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...wr].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!wr.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...wr],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},kr={},xr=new URL("https://api.specref.org/bibrefs?refs="),$r=ze({hint:"dns-prefetch",href:xr.origin});let _r;document.head.appendChild($r);const Sr=new Promise(e=>{_r=e});async function Er(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(xr.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await vr.addAll(o)}catch(e){console.error(e)}return o}async function Cr(e){const t=await Sr;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await Cr(n.aliasOf):n}var Ar=Object.freeze({__proto__:null,biblio:kr,name:"core/biblio",updateFromNetwork:Er,resolveRef:Cr,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=kr;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await vr.ready;const n=e.map(async e=>({id:e,data:await vr.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{kr[e.id]=e.data});const i=o.noData.map(e=>e.id);if(i.length){const e=await Er(i,{forceUpdate:!0});Object.assign(kr,e)}Object.assign(kr,this.conf.localBiblio),(()=>{_r(this.conf.biblio)})()}}});const Lr="core/render-biblio",Nr=De({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),Tr=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),Rr=(jr=".",e=>{const t=e.trim();return!t||t.endsWith(jr)?t:t+jr});var jr;function zr(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(Pr)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),i=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),s=Ne`<section> <h3>${t}</h3> - <dl class="bibliography">${i.map(Dr)}</dl> - </section>`;Me(s,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());Qe(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,Lr),console.warn("Bad references: ",t)})}(r),s}function Or(e){let t=kr[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;Qe(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,Lr)}else n=t.aliasOf,t=kr[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function Ir(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Re`<cite + <dl class="bibliography">${i.map(Ir)}</dl> + </section>`;Me(s,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());Qe(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,Lr),console.warn("Bad references: ",t)})}(r),s}function Pr(e){let t=kr[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;Qe(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,Lr)}else n=t.aliasOf,t=kr[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function Or(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Ne`<cite ><a class="bibref" href="${r}" data-link-type="biblio">${t||n}</a></cite - >`;return t?o:Re`[${o}]`}function Dr({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Re` + >`;return t?o:Ne`[${o}]`}function Ir({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Ne` <dt id="${n}">[${e}]</dt> - <dd>${{html:Mr(t)}}</dd> - `:Re` + <dd>${{html:Dr(t)}}</dd> + `:Ne` <dt id="${n}">[${e}]</dt> <dd><em class="respec-offending-element">Reference not found.</em></dd> - `}function qr(e,t="_blank"){if("object"!=typeof e)throw new TypeError("Only modern object references are allowed");const n=Object.assign({},Nr,e),r=n.authors.join("; ")+(n.etAl?" et al":""),o=Tr.get(n.status)||n.status;return Re.wire(n)` - <cite> - <a - href="${n.href}" - target="${t}" - rel="noopener noreferrer"> - ${n.title.trim()}</a>. - </cite> - <span class="authors"> - ${jr(r)} - </span> - <span class="publisher"> - ${jr(n.publisher)} - </span> - <span class="pubDate"> - ${jr(n.date)} - </span> - <span class="pubStatus"> - ${jr(o)} - </span> - `}function Mr(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${jr(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(Tr.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var Br=Object.freeze({__proto__:null,name:Lr,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Re`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Re`<h2>${Rr.references}</h2>`),r.classList.add("appendix"),n.length){const e=Pr(n,Rr.norm_references);r.appendChild(e)}if(t.length){const e=Pr(t,Rr.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:Ir,wireReference:qr,stringifyReference:Mr});const Fr="core/inlines",Ur={},Wr=De({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),Hr=/(?:`[^`]+`)(?!`)/,Gr=/(?:{{[^}]+}})/,Vr=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,Zr=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,Kr=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,Jr=/(?:\[=[^=]+=\])/,Yr=/(?:\[\^[^^]+\^\])/;function Xr(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[i,s,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Re`<code + `}function Dr(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${Rr(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(Tr.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var qr=Object.freeze({__proto__:null,name:Lr,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Ne`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Ne`<h2>${Nr.references}</h2>`),r.classList.add("appendix"),n.length){const e=zr(n,Nr.norm_references);r.appendChild(e)}if(t.length){const e=zr(t,Nr.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:Or});const Mr="core/inlines",Br={},Fr=De({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),Ur=/(?:`[^`]+`)(?!`)/,Wr=/(?:{{[^}]+}})/,Hr=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,Gr=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,Vr=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,Zr=/(?:\[=[^=]+=\])/,Kr=/(?:\[\^[^^]+\^\])/;function Jr(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[i,s,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Ne`<code ><a data-xref-type="${i}" data-xref-for="${s}" >${a}</a ></code - >`}function Qr(e){const t=Ie(e),n=Re`<em class="rfc2119">${t}</em>`;return Ur[t]=!0,n}function eo(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Re`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Re`<a href="${t}"></a>`;const n=Re`<span>${e}</span>`;return Qe(`Wasn't able to expand ${e} as it didn't match any id in the document.`,Fr,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function to(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):br(Ie(t))}function no(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,i]=r.split("|").map(Ie),{type:s,illegal:a}=Ue(o,t.parentNode),c=Ir(o,i),l=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(l)){const e=c.childNodes[1]||c;et("Normative references in informative sections are not allowed. ",Fr,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==s||a?n.normativeReferences.add(l):n.informativeReferences.add(l),c.childNodes[1]?c.childNodes:[c]}function ro(e,t,n){return"ABBR"===t.parentElement.tagName?e:Re`<abbr title="${n.get(e)}">${e}</abbr>`}function oo(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Re`<var data-type="${r}">${n}</var>`}function io(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,i]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],s=ao(i),a=n?Ie(n):null;return Re`<a + >`}function Xr(e){const t=Ie(e),n=Ne`<em class="rfc2119">${t}</em>`;return Br[t]=!0,n}function Yr(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Ne`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Ne`<a href="${t}"></a>`;const n=Ne`<span>${e}</span>`;return Qe(`Wasn't able to expand ${e} as it didn't match any id in the document.`,Mr,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function Qr(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):br(Ie(t))}function eo(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,i]=r.split("|").map(Ie),{type:s,illegal:a}=Ue(o,t.parentNode),l=Or(o,i),c=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(c)){const e=l.childNodes[1]||l;et("Normative references in informative sections are not allowed. ",Mr,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==s||a?n.normativeReferences.add(c):n.informativeReferences.add(c),l.childNodes[1]?l.childNodes:[l]}function to(e,t,n){return"ABBR"===t.parentElement.tagName?e:Ne`<abbr title="${n.get(e)}">${e}</abbr>`}function no(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Ne`<var data-type="${r}">${n}</var>`}function ro(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,i]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],s=io(i),a=n?Ie(n):null;return Ne`<a data-link-type="dfn" data-link-for="${a}" data-xref-for="${a}" data-lt="${o}" >${s}</a - >`}function so(e){const t=e.slice(1,-1);return Re`<code>${t}</code>`}function ao(e){return Hr.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?so(e):ao(e)):document.createTextNode(e)}var co=Object.freeze({__proto__:null,name:Fr,rfc2119Usage:Ur,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new Ve,e.informativeReferences=new Ve,e.respecRFC2119||(e.respecRFC2119=Ur);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,i=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),i=[];let s;for(;s=o.nextNode();)i.push(s);return i}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),s=Wr.rfc2119Keywords(),a=new RegExp(`(${[s.source,Gr.source,Vr.source,Zr.source,Kr.source,Jr.source,Hr.source,Yr.source,...o?[o]:[]].join("|")})`);for(const n of i){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let i=!0;for(const a of r)if(i=!i,i)if(a.startsWith("{{")){const e=to(a);o.append(e)}else if(a.startsWith("[[[")){const e=eo(a);o.append(e)}else if(a.startsWith("[[")){const t=no(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=oo(a);o.append(e)}else if(a.startsWith("[=")){const e=io(a);o.append(e)}else if(a.startsWith("`")){const e=so(a);o.append(e)}else if(a.startsWith("[^")){const e=Xr(a);o.append(e)}else if(t.has(a)){const e=ro(a,n,t);o.append(e)}else{if(!s.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=Qr(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const lo=new Ye;function uo(e,t){for(const n of t)lo.has(n)||lo.set(n,new Set),lo.get(n).add(e)}var fo=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=Be(e);uo(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===Ie(e.textContent)||(e.dataset.lt=t.join("|"))})}});var po=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=Ie(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=Ie(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=Ie(n).toLowerCase(),o=Ne.isSingular(r)?Ne.plural(r):Ne.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),uo(e,n)}})}});const ho=De({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}}),mo=async function(){try{return(await Promise.resolve().then((function(){return ks}))).default}catch{return ft("examples.css")}}();function go(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Re`<span class="example-title">: ${n.title}</span>`:"";return Re`<div class="marker"> - <a class="self-link">${ho.example}<bdi>${r}</bdi></a + >`}function oo(e){const t=e.slice(1,-1);return Ne`<code>${t}</code>`}function io(e){return Ur.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?oo(e):io(e)):document.createTextNode(e)}var so=Object.freeze({__proto__:null,name:Mr,rfc2119Usage:Br,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new Ve,e.informativeReferences=new Ve,e.respecRFC2119||(e.respecRFC2119=Br);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,i=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),i=[];let s;for(;s=o.nextNode();)i.push(s);return i}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),s=Fr.rfc2119Keywords(),a=new RegExp(`(${[s.source,Wr.source,Hr.source,Gr.source,Vr.source,Zr.source,Ur.source,Kr.source,...o?[o]:[]].join("|")})`);for(const n of i){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let i=!0;for(const a of r)if(i=!i,i)if(a.startsWith("{{")){const e=Qr(a);o.append(e)}else if(a.startsWith("[[[")){const e=Yr(a);o.append(e)}else if(a.startsWith("[[")){const t=eo(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=no(a);o.append(e)}else if(a.startsWith("[=")){const e=ro(a);o.append(e)}else if(a.startsWith("`")){const e=oo(a);o.append(e)}else if(a.startsWith("[^")){const e=Jr(a);o.append(e)}else if(t.has(a)){const e=to(a,n,t);o.append(e)}else{if(!s.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=Xr(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const ao=new Xe;function lo(e,t){for(const n of t)ao.has(n)||ao.set(n,new Set),ao.get(n).add(e)}var co=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=Be(e);lo(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===Ie(e.textContent)||(e.dataset.lt=t.join("|"))})}});var uo=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=Ie(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=Ie(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=Ie(n).toLowerCase(),o=Re.isSingular(r)?Re.plural(r):Re.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),lo(e,n)}})}});var po=String.raw`span.example-title{text-transform:none} +aside.example,div.example,div.illegal-example{padding:.5em;margin:1em 0;position:relative;clear:both} +div.illegal-example{color:red} +div.illegal-example p{color:#000} +aside.example,div.example{padding:.5em;border-left-width:.5em;border-left-style:solid;border-color:#e0cb52;background:#fcfaee} +aside.example div.example{border-left-width:.1em;border-color:#999;background:#fff} +aside.example div.example span.example-title{color:#999} +.example pre{background-color:rgba(0,0,0,.03)}`;const fo=De({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}});function ho(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Ne`<span class="example-title">: ${n.title}</span>`:"";return Ne`<div class="marker"> + <a class="self-link">${fo.example}<bdi>${r}</bdi></a >${o} - </div>`}var bo=Object.freeze({__proto__:null,name:"core/examples",run:async function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;const t=await mo;document.head.insertBefore(Re`<style> - ${t} - </style>`,document.querySelector("link"));let n=0;e.forEach(e=>{const t=e.classList.contains("illegal-example"),r={number:n,illegal:t},{title:o}=e;if("aside"===e.localName){++n;const t=go(e,n,r);e.prepend(t),o?Me(e,"example-"+n,o):Me(e,"example",String(n));const{id:i}=e;t.querySelector("a.self-link").href="#"+i,rt("example",r)}else{const t=!!e.closest("aside");t||++n,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const i=e.id?e.id:null;i&&e.removeAttribute("id");const s=go(e,t?0:n,r),a=Re`<div class="example" id="${i}"> + </div>`}var mo=Object.freeze({__proto__:null,name:"core/examples",run:function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;document.head.insertBefore(Ne`<style> + ${po} + </style>`,document.querySelector("link"));let t=0;e.forEach(e=>{const n=e.classList.contains("illegal-example"),r={number:t,illegal:n},{title:o}=e;if("aside"===e.localName){++t;const n=ho(e,t,r);e.prepend(n),o?Me(e,"example-"+t,o):Me(e,"example",String(t));const{id:i}=e;n.querySelector("a.self-link").href="#"+i,rt("example",r)}else{const n=!!e.closest("aside");n||++t,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const i=e.id?e.id:null;i&&e.removeAttribute("id");const s=ho(e,n?0:t,r),a=Ne`<div class="example" id="${i}"> ${s} ${e.cloneNode(!0)} - </div>`;o&&Me(a,"example-"+n,o),Me(a,"example",String(n));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),t||rt("example",r)}})}});const wo="core/issues-notes",yo=async function(){try{return(await Promise.resolve().then((function(){return xs}))).default}catch{return ft("issues-notes.css")}}();const vo=De({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function ko(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:i,displayType:s,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),i=t?"issue":n?"warning":r?"ednote":"note",s=t?o?vo.feature_at_risk:vo.issue:n?vo.warning:r?vo.editors_note:vo.note;return{type:i,displayType:s,isFeatureAtRisk:o}}(e),c="issue"===i,l="span"===e.localName,{number:u}=e.dataset,d={type:i,inline:l,title:e.title,number:r(e)};if(!l){const r=Re`<div class="${a?i+" atrisk":i}" role="${"note"===i?"note":null}"></div>`,l=document.createElement("span"),f=Re`<div role="heading" class="${i+"-title marker"}">${l}</div>`;Me(f,"h",i);let p,h=s;if(e.id?(r.id=e.id,e.removeAttribute("id")):Me(r,"issue-container",d.number?"number-"+d.number:""),c){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Re`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Re`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(l.before(e),e.append(l)),l.classList.add("issue-number"),p=t.get(u),!p){et(`Failed to fetch issue number ${u}.`,wo)}p&&!d.title&&(d.title=p.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Re`<span style="text-transform: none">: ${t.title}</span>`:"";return Re`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(vo.issue,d,r.id))}if(l.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=p?p.labels:[];p&&"CLOSED"===p.state&&r.classList.add("closed"),f.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const i=(s=n,parseInt(s,16)>8388607.5?"#000":"#fff");var s;return Re`<a + </div>`;o&&Me(a,"example-"+t,o),Me(a,"example",String(t));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),n||rt("example",r)}})}});var go=String.raw`.issue-label{text-transform:initial} +.warning>p:first-child{margin-top:0} +.warning{padding:.5em;border-left-width:.5em;border-left-style:solid} +span.warning{padding:.1em .5em .15em} +.issue.closed span.issue-number{text-decoration:line-through} +.warning{border-color:#f11;border-width:.2em;border-style:solid;background:#fbe9e9} +.warning-title:before{content:"⚠";font-size:1.3em;float:left;padding-right:.3em;margin-top:-.3em} +li.task-list-item{list-style:none} +input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} +.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}`;const bo="core/issues-notes",wo=De({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function yo(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:i,displayType:s,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),i=t?"issue":n?"warning":r?"ednote":"note",s=t?o?wo.feature_at_risk:wo.issue:n?wo.warning:r?wo.editors_note:wo.note;return{type:i,displayType:s,isFeatureAtRisk:o}}(e),l="issue"===i,c="span"===e.localName,{number:u}=e.dataset,d={type:i,inline:c,title:e.title,number:r(e)};if(!c){const r=Ne`<div class="${a?i+" atrisk":i}" role="${"note"===i?"note":null}"></div>`,c=document.createElement("span"),p=Ne`<div role="heading" class="${i+"-title marker"}">${c}</div>`;Me(p,"h",i);let f,h=s;if(e.id?(r.id=e.id,e.removeAttribute("id")):Me(r,"issue-container",d.number?"number-"+d.number:""),l){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Ne`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Ne`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(c.before(e),e.append(c)),c.classList.add("issue-number"),f=t.get(u),!f){et(`Failed to fetch issue number ${u}.`,bo)}f&&!d.title&&(d.title=f.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Ne`<span style="text-transform: none">: ${t.title}</span>`:"";return Ne`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(wo.issue,d,r.id))}if(c.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=f?f.labels:[];f&&"CLOSED"===f.state&&r.classList.add("closed"),p.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const i=(s=n,parseInt(s,16)>8388607.5?"#000":"#fff");var s;return Ne`<a class="respec-gh-label" style="${`background-color: #${n}; color: ${i}`}" href="${o.href}" >${r}</a - >`}(e,n)),o=e.map(e=>e.name),i=Oe(o);r.length&&r.unshift(document.createTextNode(" "));if(o.length){return Re`<span class="issue-label" aria-label="${`This issue is labelled as ${i}.`}" + >`}(e,n)),o=e.map(e=>e.name),i=Oe(o);r.length&&r.unshift(document.createTextNode(" "));if(o.length){return Ne`<span class="issue-label" aria-label="${`This issue is labelled as ${i}.`}" >: ${t}${r}</span - >`}return Re`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(i),m.removeAttribute("data-number"),p&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(p.bodyHTML)),r.append(f,m);const g=He(f,"section").length+2;f.setAttribute("aria-level",g)}rt(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Re`<p>${vo.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${vo.issue_summary}</h2>`)}(o)}var xo=Object.freeze({__proto__:null,name:wo,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return Qe(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,wo),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),r=await yo,{head:o}=document;o.insertBefore(Re`<style> - ${r} - </style>`,o.querySelector("link")),ko(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const $o="core/best-practices",_o={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},So=De(_o),Eo=i in _o?i:"en";var Co=Object.freeze({__proto__:null,name:$o,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=Me(e,"bp"),o=Re`<a class="marker self-link" href="${"#"+r}" - ><bdi lang="${Eo}">${So.best_practice}${t+1}</bdi></a - >`;if(n){const t=Re`<li>${o}: ${Ze(e)}</li>`;n.appendChild(t)}const i=e.closest("div");if(!i)return void e.classList.add("advisement");i.classList.add("advisement");const s=Re`${o.cloneNode(!0)}: ${e}`;i.prepend(...s.childNodes)}),e.length)t&&(t.appendChild(Re`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){et("Using best practices summary (#bp-summary) but no best practices found.",$o),t.remove()}}});const Ao="core/figures",Lo=De({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var Ro=Object.freeze({__proto__:null,name:Ao,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;Me(e,"fig",r),We(t,Re`<span class="fig-title"></span>`),t.prepend(Lo.fig,Re`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{Fe(e,"span").removeAttribute("href")}),Re`<li class="tofline"> + >`}return Ne`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(i),m.removeAttribute("data-number"),f&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(f.bodyHTML)),r.append(p,m);const g=He(p,"section").length+2;p.setAttribute("aria-level",g)}rt(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Ne`<p>${wo.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${wo.issue_summary}</h2>`)}(o)}var vo=Object.freeze({__proto__:null,name:bo,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return Qe(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,bo),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),{head:r}=document;r.insertBefore(Ne`<style> + ${go} + </style>`,r.querySelector("link")),yo(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const ko="core/best-practices",xo={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},$o=De(xo),_o=i in xo?i:"en";var So=Object.freeze({__proto__:null,name:ko,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=Me(e,"bp"),o=Ne`<a class="marker self-link" href="${"#"+r}" + ><bdi lang="${_o}">${$o.best_practice}${t+1}</bdi></a + >`;if(n){const t=Ne`<li>${o}: ${Ze(e)}</li>`;n.appendChild(t)}const i=e.closest("div");if(!i)return void e.classList.add("advisement");i.classList.add("advisement");const s=Ne`${o.cloneNode(!0)}: ${e}`;i.prepend(...s.childNodes)}),e.length)t&&(t.appendChild(Ne`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){et("Using best practices summary (#bp-summary) but no best practices found.",ko),t.remove()}}});const Eo="core/figures",Co=De({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var Ao=Object.freeze({__proto__:null,name:Eo,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;Me(e,"fig",r),We(t,Ne`<span class="fig-title"></span>`),t.prepend(Co.fig,Ne`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{Fe(e,"span").removeAttribute("href")}),Ne`<li class="tofline"> <a class="tocxref" href="${"#"+e}">${n.childNodes}</a> - </li>`}(t.id,r));else{et("Found a `<figure>` without a `<figcaption>`.",Ao,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Re`<h2>${Lo.list_of_figures}</h2>`,Re`<ul class="tof"> + </li>`}(t.id,r));else{et("Found a `<figure>` without a `<figcaption>`.",Eo,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Ne`<h2>${Co.list_of_figures}</h2>`,Ne`<ul class="tof"> ${e} - </ul>`))}});const To="core/data-cite",No="__SPEC__";async function jo(e){const{key:t,frag:n,path:r}=e;let o="",i="";if(t===No)o=document.location.href;else{const e=await Cr(t);if(!e)return null;o=e.href,i=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:i}}function zo(e,t,n){const{href:r,title:o}=t,i=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?We(e,t):(t.textContent=o,e.append(t)),i){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){Qe("Exporting an linked external definition is not allowed.",To,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,i){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function Po(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const Oo=Po("#"),Io=Po("/");function Do(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:i}=r?Do(r):{key:No,isNormative:!1};return t.cite=i?o:"?"+o,t.citeFrag=n.replace("#",""),Do(e)}const i=r?"#"+r:Oo(n),s=o||Io(n).split("#")[0],{type:a}=Ue(n,e),c="normative"===a,l=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(l)),isNormative:c,frag:i,path:s}}function qo(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var Mo=Object.freeze({__proto__:null,name:To,THIS_SPEC:No,toCiteDetails:Do,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(Do).map(async e=>({entry:e,result:await Cr(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await Er(n);r&&Object.assign(kr,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=Do(t),r=await jo(n);if(r)zo(t,r,n);else{et(`Couldn't find a match for "${e}"`,To,{elements:[t]})}}ot("beforesave",qo)}});const Bo="core/link-to-dfn",Fo=[],Uo=De({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function Wo(e){const t=new Map,n=[];for(const r of lo.get(e)){const{dfnFor:o="",dfnType:i="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(i)){const e=t.get(o).get(i),s="dfn"===e.localName,a="dfn"===r.localName,c=i===(e.dataset.dfnType||"dfn"),l=o===(e.dataset.dfnFor||"");if(s&&a&&c&&l){n.push(r);continue}}const s="idl"in r.dataset||"dfn"!==i?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(s,r),Me(r,"dfn",e)}return{result:t,duplicates:n}}function Ho(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return Be(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function Go(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:i}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==i)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=Vo(e)&&Vo(t,n);r&&!o||We(e,document.createElement("code"))}(e,t),!r}function Vo(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function Zo(e){e.forEach(e=>{et(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,Bo,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var Ko=Object.freeze({__proto__:null,name:Bo,possibleExternalLinks:Fo,run:async function(e){const t=function(){const e=new Ye;for(const t of lo.keys()){const{result:n,duplicates:r}=Wo(t);e.set(t,n),r.length>0&&Qe(Uo.duplicateMsg(t),Bo,{title:Uo.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=Ho(e,t);if(r){Go(e,r,t)||Fo.push(e)}else""===e.dataset.cite?n.push(e):Fo.push(e)}Zo(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=Do(t);r!==No&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||Zo(Fo)}});const Jo="core/contrib";var Yo=Object.freeze({__proto__:null,name:Jo,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void Qe("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",Jo)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Re(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=Oe(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await async function(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,i;if("caches"in window)try{if(o=await caches.open(r.origin),i=await o.match(n),i&&new Date(i.headers.get("Expires"))>new Date)return i}catch(e){console.error("Failed to use Cache API.",e)}const s=await fetch(n);if(!s.ok&&i)return console.warn("Returning a stale cached response for "+r),i;if(o&&s.ok){const e=s.clone(),r=new Headers(s.headers),i=new Date(Date.now()+t);r.set("Expires",i.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return s}(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return Qe("Error loading contributors from GitHub.",Jo),console.error(e),null}}}(t,n)}});var Xo=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{Fe(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const Qo=["h2","h3","h4","h5","h6"],ei=["h1",...Qo],ti="core/structure",ni=De({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function ri(e,t,{prefix:n=""}={}){let r=!1,o=0,i=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const s=Re`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=i,r=!0);let e=a.isIntro?"":r?oi(i-o+1):n+i;const c=e.split(".").length;if(1===c&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(i+=1,a.header.prepend(Re`<bdi class="secno">${e} </bdi>`)),c<=t){const n=a.header.id||a.element.id,r=si(a.header,n),o=ri(a.subsections,t,{prefix:e});o&&r.append(o),s.append(r)}}return s}function oi(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function ii(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!Qo.includes(o.localName))continue;const i=o.textContent;Me(e,null,i),r.push({element:e,header:o,title:i,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:ii(e,{tocIntroductory:t})})}return r}function si(e,t){const n=Re`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=Fe(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{Fe(e,"span").removeAttribute("id")}),Re`<li class="tocline">${n}</li>`}var ai=Object.freeze({__proto__:null,name:ti,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=ei.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(He(e,"section").length+1,6);e.localName!==t&&Fe(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){Qe("`data-max-toc` must have a value between 0-6 (inclusive).",ti,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=ri(ii(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Re`<nav id="toc"></nav>`,n=Re`<h2 class="introductory">${ni.toc}</h2>`;Me(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Re`<p role="navigation" id="back-to-top"> + </ul>`))}});const Lo="core/data-cite",No="__SPEC__";async function To(e){const{key:t,frag:n,path:r}=e;let o="",i="";if(t===No)o=document.location.href;else{const e=await Cr(t);if(!e)return null;o=e.href,i=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:i}}function Ro(e,t,n){const{href:r,title:o}=t,i=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?We(e,t):(t.textContent=o,e.append(t)),i){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){Qe("Exporting an linked external definition is not allowed.",Lo,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,i){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function jo(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const zo=jo("#"),Po=jo("/");function Oo(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:i}=r?Oo(r):{key:No,isNormative:!1};return t.cite=i?o:"?"+o,t.citeFrag=n.replace("#",""),Oo(e)}const i=r?"#"+r:zo(n),s=o||Po(n).split("#")[0],{type:a}=Ue(n,e),l="normative"===a,c=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(c)),isNormative:l,frag:i,path:s}}function Io(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var Do=Object.freeze({__proto__:null,name:Lo,THIS_SPEC:No,toCiteDetails:Oo,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(Oo).map(async e=>({entry:e,result:await Cr(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await Er(n);r&&Object.assign(kr,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=Oo(t),r=await To(n);if(r)Ro(t,r,n);else{et(`Couldn't find a match for "${e}"`,Lo,{elements:[t]})}}ot("beforesave",Io)}});const qo="core/link-to-dfn",Mo=[],Bo=De({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function Fo(e){const t=new Map,n=[];for(const r of ao.get(e)){const{dfnFor:o="",dfnType:i="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(i)){const e=t.get(o).get(i),s="dfn"===e.localName,a="dfn"===r.localName,l=i===(e.dataset.dfnType||"dfn"),c=o===(e.dataset.dfnFor||"");if(s&&a&&l&&c){n.push(r);continue}}const s="idl"in r.dataset||"dfn"!==i?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(s,r),Me(r,"dfn",e)}return{result:t,duplicates:n}}function Uo(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return Be(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function Wo(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:i}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==i)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=Ho(e)&&Ho(t,n);r&&!o||We(e,document.createElement("code"))}(e,t),!r}function Ho(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function Go(e){e.forEach(e=>{et(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,qo,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var Vo=Object.freeze({__proto__:null,name:qo,possibleExternalLinks:Mo,run:async function(e){const t=function(){const e=new Xe;for(const t of ao.keys()){const{result:n,duplicates:r}=Fo(t);e.set(t,n),r.length>0&&Qe(Bo.duplicateMsg(t),qo,{title:Bo.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=Uo(e,t);if(r){Wo(e,r,t)||Mo.push(e)}else""===e.dataset.cite?n.push(e):Mo.push(e)}Go(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=Oo(t);r!==No&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||Go(Mo)}});const Zo="core/contrib";var Ko=Object.freeze({__proto__:null,name:Zo,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void Qe("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",Zo)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Ne(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=Oe(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await async function(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,i;if("caches"in window)try{if(o=await caches.open(r.origin),i=await o.match(n),i&&new Date(i.headers.get("Expires"))>new Date)return i}catch(e){console.error("Failed to use Cache API.",e)}const s=await fetch(n);if(!s.ok&&i)return console.warn("Returning a stale cached response for "+r),i;if(o&&s.ok){const e=s.clone(),r=new Headers(s.headers),i=new Date(Date.now()+t);r.set("Expires",i.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return s}(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return Qe("Error loading contributors from GitHub.",Zo),console.error(e),null}}}(t,n)}});var Jo=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{Fe(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const Xo=["h2","h3","h4","h5","h6"],Yo=["h1",...Xo],Qo="core/structure",ei=De({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function ti(e,t,{prefix:n=""}={}){let r=!1,o=0,i=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const s=Ne`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=i,r=!0);let e=a.isIntro?"":r?ni(i-o+1):n+i;const l=e.split(".").length;if(1===l&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(i+=1,a.header.prepend(Ne`<bdi class="secno">${e} </bdi>`)),l<=t){const n=a.header.id||a.element.id,r=oi(a.header,n),o=ti(a.subsections,t,{prefix:e});o&&r.append(o),s.append(r)}}return s}function ni(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function ri(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!Xo.includes(o.localName))continue;const i=o.textContent;Me(e,null,i),r.push({element:e,header:o,title:i,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:ri(e,{tocIntroductory:t})})}return r}function oi(e,t){const n=Ne`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=Fe(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{Fe(e,"span").removeAttribute("id")}),Ne`<li class="tocline">${n}</li>`}var ii=Object.freeze({__proto__:null,name:Qo,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=Yo.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(He(e,"section").length+1,6);e.localName!==t&&Fe(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){Qe("`data-max-toc` must have a value between 0-6 (inclusive).",Qo,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=ti(ri(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Ne`<nav id="toc"></nav>`,n=Ne`<h2 class="introductory">${ei.toc}</h2>`;Me(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Ne`<p role="navigation" id="back-to-top"> <a href="#title"><abbr title="Back to Top">↑</abbr></a> - </p>`;document.body.append(o)}(t)}rt("toc")}});const ci=De({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var li=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Re`<p><em>${ci.informative}</em></p>`)})}});var ui=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(Me(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Re` + </p>`;document.body.append(o)}(t)}rt("toc")}});const si=De({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var ai=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Ne`<p><em>${si.informative}</em></p>`)})}});var li=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(Me(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Ne` <a href="${"#"+t}" class="self-link" aria-label="§"></a> - `)}}});var di=Object.freeze({__proto__:null,name:"geonovum/conformance",run:function(){const e=document.querySelector("section#conformance");e&&function(e){const t=Re` + `)}}});var ci=Object.freeze({__proto__:null,name:"geonovum/conformance",run:function(){const e=document.querySelector("section#conformance");e&&function(e){const t=Ne` <h2>Conformiteit</h2> <p> Naast onderdelen die als niet normatief gemarkeerd zijn, zijn ook alle @@ -149,63 +255,22 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e is alles in dit document normatief. </p> <p>Informatief en normatief.</p> - `;e.prepend(...t.childNodes)}(e)}});const fi=new Map([["text/html","html"],["application/xml","xml"]]);function pi(e,t=document){const n=fi.get(e);if(!n){const t=[...fi.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=function(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;Ke(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Pe(r);const o=e.createDocumentFragment(),i=e.querySelector("meta[name='viewport']");i&&t.firstChild!==i&&o.appendChild(i);let s=e.querySelector("meta[charset], meta[content*='charset=']");s||(s=Re`<meta charset="utf-8" />`);o.appendChild(s);const a="ReSpec "+(window.respecVersion||"Developer Channel"),c=Re` + `;e.prepend(...t.childNodes)}(e)}});const ui=new Map([["text/html","html"],["application/xml","xml"]]);function di(e,t=document){const n=ui.get(e);if(!n){const t=[...ui.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=function(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;Ke(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Pe(r);const o=e.createDocumentFragment(),i=e.querySelector("meta[name='viewport']");i&&t.firstChild!==i&&o.appendChild(i);let s=e.querySelector("meta[charset], meta[content*='charset=']");s||(s=Ne`<meta charset="utf-8" />`);o.appendChild(s);const a="ReSpec "+(window.respecVersion||"Developer Channel"),l=Ne` <meta name="generator" content="${a}" /> - `;o.appendChild(c),t.prepend(o),rt("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}n("core/exporter",{rsDocToDataURL:pi});const hi="ui/save-html",mi=De({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),gi=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return pi(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return pi(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function bi(e){const{id:t,href:n,fileName:r,title:o,type:i}=e;return Re`<a + `;o.appendChild(l),t.prepend(o),rt("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}n("core/exporter",{rsDocToDataURL:di});const pi="ui/save-html",fi=De({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),hi=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return di(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return di(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function mi(e){const{id:t,href:n,fileName:r,title:o,type:i}=e;return Ne`<a href="${n}" id="${t}" download="${r}" type="${i}" class="respec-save-button" - onclick=${()=>Mt.closeModal()} + onclick=${()=>qt.closeModal()} >${o}</a - >`}const wi={async show(e){await document.respec.ready;const t=Re`<div class="respec-save-buttons"> - ${gi.map(bi)} - </div>`;Mt.freshModal(mi.save_snapshot,t,e)}},yi="download"in HTMLAnchorElement.prototype;let vi;yi&&(vi=Mt.addCommand(mi.save_snapshot,(function(){if(!yi)return;wi.show(vi)}),"Ctrl+Shift+Alt+S","💾"));var ki=Object.freeze({__proto__:null,name:hi,exportDocument:function(e,t){return et("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",hi,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),pi(t)}});const xi=De({en:{search_specref:"Search Specref"},nl:{search_specref:"Doorzoek Specref"},ja:{search_specref:"仕様検索"},de:{search_specref:"Spezifikationen durchsuchen"},zh:{search_specref:"搜索 Specref"}}),$i=Mt.addCommand(xi.search_specref,(function(){Li(),Mt.freshModal(xi.search_specref,_i,$i);_i.querySelector("input[type=search]").focus()}),"Ctrl+Shift+Alt+space","🔎"),_i=document.createElement("form"),Si=Re.bind(_i),Ei=Re.bind(document.createElement("div"));function Ci([e,t]){return Re.wire(t)` - <dt> - [${e}] - </dt> - <dd>${qr(t)}</dd> - `}_i.id="specref-ui",_i.addEventListener("submit",async e=>{e.preventDefault();const{searchBox:t}=_i,n=t.value;if(!n)return void t.focus();Li({state:"Searching Specref…"});const r=new URL("https://specref.herokuapp.com/search-refs");r.searchParams.set("q",n);const o=new URL("https://specref.herokuapp.com/reverse-lookup");o.searchParams.set("urls",n);try{const e=performance.now(),i=await Promise.all([fetch(r).then(e=>e.json()),fetch(o).then(e=>e.json())]),{checked:s}=_i.includeVersions,a=function({includeVersions:e=!1}={}){return(...t)=>{const n=Object.assign({},...t),r=new Map(Object.entries(n));return Array.from(r).filter(([,e])=>e.aliasOf).map(([e])=>e).reduce((e,t)=>e.delete(t)&&e,r),e||Array.from(r.values()).filter(e=>"object"==typeof e&&"versions"in e).flat().forEach(e=>{r.delete(e)}),Array.from(r).filter(([,e])=>"object"!=typeof e).forEach(([e])=>r.delete(e)),r}}({includeVersions:s});Li({query:n,results:a(...i),state:"",timeTaken:Math.round(performance.now()-e)/1e3})}catch(e){console.error(e),Li({state:"Error! Couldn't do search."})}finally{t.focus()}});const Ai=Re.wire()` - <header> - <p> - An Open-Source, Community-Maintained Database of - Web Standards & Related References. - </p> - </header> - <div class="searchcomponent"> - <input - name="searchBox" - type="search" - aria-label="Search" - autocomplete="off" - placeholder="Keywords, titles, authors, urls…"> - <button - type="submit"> - Search - </button> - <label> - <input type="checkbox" name="includeVersions"> Include all versions. - </label> - </div> -`;function Li({state:e="",results:t,timeTaken:n,query:r}={}){t?Si` - <div>${Ai}</div> - <p class="state" hidden="${!e}"> - ${e} - </p> - <section hidden="${!t}" aria-live="polite">${t?function(e,t,n){if(!e.size)return Ei` - <p class="state"> - Your search - <strong> ${t} </strong> - - did not match any references. - </p> - `;const r=Array.from(e).slice(0,99).map(Ci).reduce((e,t)=>e.concat(t),[]);return Ei` - <p class="result-stats"> - ${e.size} results (${n} seconds). - ${e.size>99?"First 100 results.":""} - </p> - <dl class="specref-results">${r}</dl> - `}(t,r,n):[]}</section> - `:Si`<div>${Ai}</div>`}var Ri=Object.freeze({__proto__:null});const Ti=De({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const Ni=document.createElement("div"),ji=Re.bind(Ni),zi=Mt.addCommand(`${Ti.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(Pi).forEach(t=>{e.push(t)});ji` + >`}const gi={async show(e){await document.respec.ready;const t=Ne`<div class="respec-save-buttons"> + ${hi.map(mi)} + </div>`;qt.freshModal(fi.save_snapshot,t,e)}},bi="download"in HTMLAnchorElement.prototype;let wi;bi&&(wi=qt.addCommand(fi.save_snapshot,(function(){if(!bi)return;gi.show(wi)}),"Ctrl+Shift+Alt+S","💾"));var yi=Object.freeze({__proto__:null,name:pi,exportDocument:function(e,t){return et("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",pi,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),di(t)}});const vi="https://respec.org/specref/",ki=De({en:{search_specref:"Search Specref"},nl:{search_specref:"Doorzoek Specref"},ja:{search_specref:"仕様検索"},de:{search_specref:"Spezifikationen durchsuchen"},zh:{search_specref:"搜索 Specref"}}),xi=qt.addCommand(ki.search_specref,(function(){const e=Ne` + <iframe class="respec-iframe" src="${vi}" onload=${e=>e.target.classList.add("ready")}></iframe> + <a href="${vi}" target="_blank">Open Search UI in a new tab</a> + `;qt.freshModal(ki.search_specref,e,xi)}),"Ctrl+Shift+Alt+space","🔎");var $i=Object.freeze({__proto__:null});const _i=De({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const Si=document.createElement("div"),Ei=Ne.bind(Si),Ci=qt.addCommand(`${_i.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(Ai).forEach(t=>{e.push(t)});Ei` <p> ReSpec is a document production toolchain, with a notable focus on W3C specifications. </p> @@ -229,35 +294,74 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </thead> <tbody>${e}</tbody> </table> -`,Mt.freshModal(`${Ti.about_respec} - ${window.respecVersion}`,Ni,zi)}),"Ctrl+Shift+Alt+A","ℹ️");function Pi({name:e,duration:t}){return Re` +`,qt.freshModal(`${_i.about_respec} - ${window.respecVersion}`,Si,Ci)}),"Ctrl+Shift+Alt+A","ℹ️");function Ai({name:e,duration:t}){return Ne` <tr> <td><a href="${`https://github.com/w3c/respec/blob/develop/src/${e}.js`}">${e}</a></td> <td>${t}</td> </tr> - `}var Oi=Object.freeze({__proto__:null});var Ii=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});const Di=ze({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(Di);const qi=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return $s}))).default}catch{return dt("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",qi.then(e=>({worker:e})));const Mi=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight"),Bi=async function(){try{return(await Promise.resolve().then((function(){return _s}))).default}catch{return ft("highlight.css")}}();async function Fi(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Mi(),languages:t},r=await qi;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(i){const{data:{id:s,language:a,value:c}}=i;s===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:c}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:i}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${i}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=i,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Ui=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Fi),r=await Bi;document.head.appendChild(Re`<style> - ${r} - </style>`),await Promise.all(n)}});const Wi=De({en:{missing_test_suite_uri:"Found tests in your spec, but missing '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.",tests:"tests",test:"test"},ja:{missing_test_suite_uri:"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.",tests:"テスト",test:"テスト"},de:{missing_test_suite_uri:"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.",tests:"Tests",test:"Test"},zh:{missing_test_suite_uri:"本规范中包含测试,但在 ReSpec 配置中缺少 '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。",tests:"测试",test:"测试"}}),Hi="core/data-tests";function Gi(e){const t=[],[n]=new URL(e).pathname.split("/").reverse(),r=n.split(".");let[o]=r;if(r.find(e=>"https"===e)){const e=document.createElement("span");e.textContent="🔒",e.setAttribute("aria-label","requires a secure connection"),e.setAttribute("title","Test requires HTTPS"),o=o.replace(".https",""),t.push(e)}if(o.split(".").join("-").split("-").find(e=>"manual"===e)){const e=document.createElement("span");e.textContent="💪",e.setAttribute("aria-label","the test must be run manually"),e.setAttribute("title","Manual test"),o=o.replace("-manual",""),t.push(e)}return Re` + `}var Li=Object.freeze({__proto__:null});var Ni=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});var Ti=String.raw`.hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa} +.hljs-comment,.hljs-quote{color:#717277;font-style:italic} +.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4} +.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#ca4706;font-weight:700} +.hljs-literal{color:#0b76c5} +.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#42803c} +.hljs-built_in,.hljs-class .hljs-title{color:#9a6a01} +.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801} +.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#336ae3} +.hljs-emphasis{font-style:italic} +.hljs-strong{font-weight:700} +.hljs-link{text-decoration:underline}`;async function Ri(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-geonovum.js",document.baseURI).href));return await t.text()}const ji=ze({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(ji);const zi=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return hs}))).default}catch{return Ri("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",zi.then(e=>({worker:e})));const Pi=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight");async function Oi(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Pi(),languages:t},r=await zi;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(i){const{data:{id:s,language:a,value:l}}=i;s===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:l}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:i}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${i}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=i,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Ii=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Oi);document.head.appendChild(Ne`<style> + ${Ti} + </style>`),await Promise.all(n)}});const Di=De({en:{missing_test_suite_uri:"Found tests in your spec, but missing '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.",tests:"tests",test:"test"},ja:{missing_test_suite_uri:"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.",tests:"テスト",test:"テスト"},de:{missing_test_suite_uri:"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.",tests:"Tests",test:"Test"},zh:{missing_test_suite_uri:"本规范中包含测试,但在 ReSpec 配置中缺少 '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。",tests:"测试",test:"测试"}}),qi="core/data-tests";function Mi(e){const t=[],[n]=new URL(e).pathname.split("/").reverse(),r=n.split(".");let[o]=r;if(r.find(e=>"https"===e)){const e=document.createElement("span");e.textContent="🔒",e.setAttribute("aria-label","requires a secure connection"),e.setAttribute("title","Test requires HTTPS"),o=o.replace(".https",""),t.push(e)}if(o.split(".").join("-").split("-").find(e=>"manual"===e)){const e=document.createElement("span");e.textContent="💪",e.setAttribute("aria-label","the test must be run manually"),e.setAttribute("title","Manual test"),o=o.replace("-manual",""),t.push(e)}return Ne` <li> <a href="${e}">${o}</a> ${t} </li> - `}function Vi(e,t){return e.map(e=>{try{return new URL(e,t).href}catch{et("Bad URI: "+e,Hi)}}).filter(e=>e)}function Zi(e,t){const n=e.filter((e,t,n)=>n.indexOf(e)!==t);if(n.length){const e="Duplicate tests found",r='To fix, remove duplicates from "data-tests": '+n.map(e=>new URL(e).pathname).join(", ");et(e,Hi,{hint:r,elements:[t]})}}function Ki(e){const t=[...new Set(e)];return Re` + `}function Bi(e,t){return e.map(e=>{try{return new URL(e,t).href}catch{et("Bad URI: "+e,qi)}}).filter(e=>e)}function Fi(e,t){const n=e.filter((e,t,n)=>n.indexOf(e)!==t);if(n.length){const e="Duplicate tests found",r='To fix, remove duplicates from "data-tests": '+n.map(e=>new URL(e).pathname).join(", ");et(e,qi,{hint:r,elements:[t]})}}function Ui(e){const t=[...new Set(e)];return Ne` <details class="respec-tests-details removeOnSave"> <summary>tests: ${t.length}</summary> <ul> - ${t.map(Gi)} + ${t.map(Mi)} </ul> </details> - `}var Ji=Object.freeze({__proto__:null,name:Hi,run:function(e){const t=[...document.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);if(t.length)if(e.testSuiteURI)for(const n of t){const t=Vi(n.dataset.tests.split(/,/gm).map(e=>e.trim()),e.testSuiteURI);Zi(t,n);const r=Ki(t);n.append(r)}else Qe(Wi.missing_test_suite_uri,Hi)}});const Yi="core/list-sorter";function Xi(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function Qi(e,t){return[...e.querySelectorAll(":scope > li")].sort(Xi(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function es(e,t){return[...e.querySelectorAll(":scope > dt")].sort(Xi(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:i}=t;for(;i&&i.nextSibling;){o.appendChild(i.cloneNode(!0));const{nodeType:e,nodeName:t}=i.nextSibling;if(e===n&&t===r)break;i=i.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var ts=Object.freeze({__proto__:null,name:Yi,sortListItems:Qi,sortDefinitionTerms:es,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=es(t,n);break;case"ol":case"ul":e=Qi(t,n);break;default:et(`ReSpec can't sort ${t.localName} elements.`,Yi,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});const ns=async function(){try{return(await Promise.resolve().then((function(){return Ss}))).default}catch{return ft("var.css")}}();function rs(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=Ie(e.textContent),n=e.closest("section"),r=is(e),o=[...n.querySelectorAll("var")].filter(e=>Ie(e.textContent)===t&&e.closest("section")===n),i=o[0].classList.contains("respec-hl");if(os.set(r,i),i)return o.forEach(e=>ss(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=is(t);n.forEach(t=>ss(t,e)),[...os.keys()].forEach(e=>os.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const os=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function is(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===os.get("respec-hl-c1")?"respec-hl-c1":[...os.keys()].find(e=>os.get(e))||"respec-hl-c1"}function ss(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var as=Object.freeze({__proto__:null,name:"core/highlight-vars",run:async function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=await ns,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",rs)),ot("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(ss)})}});function cs(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Re` + `}var Wi=Object.freeze({__proto__:null,name:qi,run:function(e){const t=[...document.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);if(t.length)if(e.testSuiteURI)for(const n of t){const t=Bi(n.dataset.tests.split(/,/gm).map(e=>e.trim()),e.testSuiteURI);Fi(t,n);const r=Ui(t);n.append(r)}else Qe(Di.missing_test_suite_uri,qi)}});const Hi="core/list-sorter";function Gi(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function Vi(e,t){return[...e.querySelectorAll(":scope > li")].sort(Gi(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function Zi(e,t){return[...e.querySelectorAll(":scope > dt")].sort(Gi(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:i}=t;for(;i&&i.nextSibling;){o.appendChild(i.cloneNode(!0));const{nodeType:e,nodeName:t}=i.nextSibling;if(e===n&&t===r)break;i=i.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var Ki=Object.freeze({__proto__:null,name:Hi,sortListItems:Vi,sortDefinitionTerms:Zi,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=Zi(t,n);break;case"ol":case"ul":e=Vi(t,n);break;default:et(`ReSpec can't sort ${t.localName} elements.`,Hi,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});var Ji=String.raw`var:hover{text-decoration:underline;cursor:pointer} +var.respec-hl{color:var(--color,#000);background-color:var(--bg-color);box-shadow:0 0 0 2px var(--bg-color)} +var.respec-hl-c1{--bg-color:#f4d200} +var.respec-hl-c2{--bg-color:#ff87a2} +var.respec-hl-c3{--bg-color:#96e885} +var.respec-hl-c4{--bg-color:#3eeed2} +var.respec-hl-c5{--bg-color:#eacfb6} +var.respec-hl-c6{--bg-color:#82ddff} +var.respec-hl-c7{--bg-color:#ffbcf2} +@media print{ +var.respec-hl{background:0 0;color:#000;box-shadow:unset} +}`;function Xi(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=Ie(e.textContent),n=e.closest("section"),r=Qi(e),o=[...n.querySelectorAll("var")].filter(e=>Ie(e.textContent)===t&&e.closest("section")===n),i=o[0].classList.contains("respec-hl");if(Yi.set(r,i),i)return o.forEach(e=>es(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=Qi(t);n.forEach(t=>es(t,e)),[...Yi.keys()].forEach(e=>Yi.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const Yi=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function Qi(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===Yi.get("respec-hl-c1")?"respec-hl-c1":[...Yi.keys()].find(e=>Yi.get(e))||"respec-hl-c1"}function es(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var ts=Object.freeze({__proto__:null,name:"core/highlight-vars",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=Ji,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",Xi)),ot("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(es)})}});var ns=String.raw`dfn{cursor:pointer} +.dfn-panel{position:absolute;z-index:35;min-width:300px;max-width:500px;padding:.5em .75em;margin-top:.6em;font:small Helvetica Neue,sans-serif,Droid Sans Fallback;background:#fff;color:#000;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px} +.dfn-panel:not(.docked)>.caret{position:absolute;top:-9px} +.dfn-panel:not(.docked)>.caret::after,.dfn-panel:not(.docked)>.caret::before{content:"";position:absolute;border:10px solid transparent;border-top:0;border-bottom:10px solid #fff;top:0} +.dfn-panel:not(.docked)>.caret::before{border-bottom:9px solid #a2a9b1} +.dfn-panel *{margin:0} +.dfn-panel b{display:block;color:#000;margin-top:.25em} +.dfn-panel ul a[href]{color:#333} +.dfn-panel>div{display:flex} +.dfn-panel a.self-link{font-weight:700;margin-right:auto} +.dfn-panel .marker{padding:.1em;margin-left:.5em;border-radius:.2em;text-align:center;white-space:nowrap;font-size:90%;color:#040b1c} +.dfn-panel .marker.dfn-exported{background:#d1edfd;box-shadow:0 0 0 .125em #1ca5f940} +.dfn-panel .marker.idl-block{background:#8ccbf2;box-shadow:0 0 0 .125em #0670b161} +.dfn-panel a:not(:hover){text-decoration:none!important;border-bottom:none!important} +.dfn-panel a[href]:hover{border-bottom-width:1px} +.dfn-panel ul{padding:0} +.dfn-panel li{margin-left:1em} +.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}`;function rs(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Ne` <aside class="dfn-panel" id="${o}" hidden> <span class="caret"></span> <div> <a class="self-link" href="${n}">Permalink</a> - ${function(e){return e.matches("dfn[data-export]")?Re`<span + ${function(e){return e.matches("dfn[data-export]")?Ne`<span class="marker dfn-exported" title="Definition can be referenced by other specifications" >exported</span - >`:null}(e)} ${function(e,t){if(!e.hasAttribute("data-idl"))return null;for(const n of t){if(n.dataset.linkType!==e.dataset.dfnType)continue;const t=n.closest("pre.idl");if(t&&t.id){const e="#"+t.id;return Re`<a + >`:null}(e)} ${function(e,t){if(!e.hasAttribute("data-idl"))return null;for(const n of t){if(n.dataset.linkType!==e.dataset.dfnType)continue;const t=n.closest("pre.idl");if(t&&t.id){const e="#"+t.id;return Ne`<a href="${e}" class="marker idl-block" title="Jump to IDL declaration" @@ -265,15 +369,15 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e >`}}return null}(e,r)} </div> <b>Referenced in:</b> - ${function(e,t){if(!t.length)return Re`<ul> + ${function(e,t){if(!t.length)return Ne`<ul> <li>Not referenced in this document.</li> - </ul>`;const n=new Map;t.forEach((t,r)=>{const o=t.id||`ref-for-${e}-${r+1}`;t.id||(t.id=o);const i=function(e){const t=e.closest("section");if(!t)return null;const n=t.querySelector("h1, h2, h3, h4, h5, h6");return n?Ie(n.textContent):null}(t);(n.get(i)||n.set(i,[]).get(i)).push(o)});const r=([e,t])=>[{title:e,id:t[0]}].concat(t.slice(1).map((e,t)=>({title:`(${t+2})`,id:e}))),o=e=>Re`<li> - ${r(e).map(e=>Re`<a href="#${e.id}">${e.title}</a>${" "}`)} - </li>`;return Re`<ul> + </ul>`;const n=new Map;t.forEach((t,r)=>{const o=t.id||`ref-for-${e}-${r+1}`;t.id||(t.id=o);const i=function(e){const t=e.closest("section");if(!t)return null;const n=t.querySelector("h1, h2, h3, h4, h5, h6");return n?Ie(n.textContent):null}(t);(n.get(i)||n.set(i,[]).get(i)).push(o)});const r=([e,t])=>[{title:e,id:t[0]}].concat(t.slice(1).map((e,t)=>({title:`(${t+2})`,id:e}))),o=e=>Ne`<li> + ${r(e).map(e=>Ne`<a href="#${e.id}">${e.title}</a>${" "}`)} + </li>`;return Ne`<ul> ${[...n].map(o)} </ul>`}(t,r)} </aside> - `}var ls=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return Es}))).default}catch{return ft("dfn-panel.css")}}();document.head.insertBefore(Re`<style> - ${e} - </style>`,document.querySelector("link"));const t=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),n=document.createDocumentFragment();for(const e of t)n.append(cs(e));document.body.append(n);const r=document.createElement("script");r.id="respec-dfn-panel",r.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Cs}))).default}catch{return dt("./src/core/dfn-panel.runtime.js")}}(),document.body.append(r)}});const us=async function(){try{return(await Promise.resolve().then((function(){return As}))).default}catch{return ft("algorithms.css")}}();var ds=Object.freeze({__proto__:null,name:"core/algorithms",run:async function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=await us,document.head.appendChild(e)}}});const fs="core/anchor-expander";function ps(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void Qe(`Found matching element "${t}", but it has no title or marker.`,fs,{title:"Missing title.",elements:[n]})}const o=Ze(r);n.append(...o.childNodes),n.classList.add("box-ref")}function hs(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void Qe(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,fs,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...Ze(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const i=r.querySelector(".fig-title");!n.hasAttribute("title")&&i&&(n.title=Ie(i.textContent))}function ms(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)gs(r,n),bs(r,n);else{n.textContent=n.getAttribute("href");Qe("Found matching section, but the section was lacking a heading element.",fs,{title:`No matching id in document: "${t}".`,elements:[n]})}}function gs(e,t){const n=e.querySelector(".self-link"),r=[...Ze(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=Fe(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function bs(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var ws=Object.freeze({__proto__:null,name:fs,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":gs(n,t);break;case"section":ms(n,e,t);break;case"figure":hs(n,e,t);break;case"aside":case"div":ps(n,e,t);break;default:t.textContent=t.getAttribute("href");Qe("ReSpec doesn't support expanding this kind of reference.",fs,{title:`Can't expand "#${e}".`,elements:[t]})}bs(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");Qe(`Couldn't expand inline reference. The id "${e}" is not in the document.`,fs,{title:`No matching id in document: ${e}.`,elements:[t]})}}}}),ys=Object.freeze({__proto__:null,default:'.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0}\n#respec-ui{position:fixed;display:flex;flex-direction:row-reverse;top:20px;right:20px;width:202px;text-align:right;z-index:9000}\n#respec-pill,.respec-info-button{background:#fff;height:2.5em;color:#787878;border:1px solid #ccc;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5)}\n.respec-info-button{border:none;opacity:.75;border-radius:2em;margin-right:1em;min-width:3.5em}\n.respec-info-button:focus,.respec-info-button:hover{opacity:1;transition:opacity .2s}\n#respec-pill:disabled{font-size:2.8px;text-indent:-9999em;border-top:1.1em solid rgba(40,40,40,.2);border-right:1.1em solid rgba(40,40,40,.2);border-bottom:1.1em solid rgba(40,40,40,.2);border-left:1.1em solid #fff;transform:translateZ(0);animation:respec-spin .5s infinite linear;box-shadow:none}\n#respec-pill:disabled,#respec-pill:disabled:after{border-radius:50%;width:10em;height:10em}\n@keyframes respec-spin{\n0%{transform:rotate(0)}\n100%{transform:rotate(360deg)}\n}\n.respec-hidden{visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s linear}\n.respec-visible{visibility:visible;opacity:1;transition:opacity .2s linear}\n#respec-pill:focus,#respec-pill:hover{color:#000;background-color:#f5f5f5;transition:color .2s}\n#respec-menu{position:absolute;margin:0;padding:0;font-family:sans-serif;background:#fff;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5);width:200px;display:none;text-align:left;margin-top:32px;font-size:.8em}\n#respec-menu:not([hidden]){display:block}\n#respec-menu li{list-style-type:none;margin:0;padding:0}\n.respec-save-buttons{display:grid;grid-template-columns:repeat(auto-fill,minmax(47%,2fr));grid-gap:0.5cm;padding:.5cm}\n.respec-save-button:link{padding-top:16px;color:#f0f0f0;background:#2a5aa8;justify-self:stretch;height:1cm;text-decoration:none;text-align:center;font-size:inherit;border:none;border-radius:.2cm}\n.respec-save-button:link:hover{color:#fff;background:#2a5aa8;padding:0;margin:0;border:0;padding-top:16px}\n.respec-save-button:link:focus{background:#193766}\n#respec-pill:focus,#respec-ui button:focus,.respec-option:focus{outline:0;outline-style:none}\n#respec-pill-error{background-color:red;color:#fff}\n#respec-pill-warning{background-color:orange;color:#fff}\n.respec-error-list,.respec-warning-list{margin:0;padding:0;list-style:none;font-family:sans-serif;background-color:#fffbe6;font-size:.85em}\n.respec-error-list>li,.respec-warning-list>li{padding:.4em .7em}\n.respec-warning-list>li::before{content:"⚠️";padding-right:.5em}\n.respec-error-list p,.respec-warning-list p{padding:0;margin:0}\n.respec-warning-list li{color:#5c3b00;border-bottom:thin solid #fff5c2}\n.respec-error-list,.respec-error-list li{background-color:#fff0f0}\n.respec-error-list li::before{content:"💥";padding-right:.5em}\n.respec-error-list li{padding:.4em .7em;color:#5c3b00;border-bottom:thin solid #ffd7d7}\n.respec-error-list li>p{margin:0;padding:0;display:inline-block}\n.respec-error-list li>p:first-child,.respec-warning-list li>p:first-child{display:inline}\n.respec-error-list>li li,.respec-warning-list>li li{margin:0;list-style:disc}\n#respec-overlay{display:block;position:fixed;z-index:10000;top:0;left:0;height:100%;width:100%;background:#000}\n.respec-show-overlay{transition:opacity .2s linear;opacity:.5}\n.respec-hide-overlay{transition:opacity .2s linear;opacity:0}\n.respec-modal{display:block;position:fixed;z-index:11000;margin:auto;top:10%;background:#fff;border:5px solid #666;min-width:20%;width:79%;padding:0;max-height:80%;overflow-y:auto;margin:0 -.5cm}\n@media screen and (min-width:78em){\n.respec-modal{width:62%}\n}\n.respec-modal h3{margin:0;padding:.2em;text-align:center;color:#000;background:linear-gradient(to bottom,#eee 0,#eee 50%,#ccc 100%);font-size:1em}\n.respec-modal .inside div p{padding-left:1cm}\n#respec-menu button.respec-option{background:#fff;padding:0 .2cm;border:none;width:100%;text-align:left;font-size:inherit;padding:1.2em 1.2em}\n#respec-menu button.respec-option:hover,#respec-menu button:focus{background-color:#eee}\n.respec-cmd-icon{padding-right:.5em}\n#respec-ui button.respec-option:last-child{border:none;border-radius:inherit}\n.respec-button-copy-paste{position:absolute;height:28px;width:40px;cursor:pointer;background-image:linear-gradient(#fcfcfc,#eee);border:1px solid #90b8de;border-left:0;border-radius:0 0 3px 0;-webkit-user-select:none;user-select:none;-webkit-appearance:none;top:0;left:127px}\n#specref-ui{margin:0 2%;margin-bottom:.5cm}\n#specref-ui header{font-size:.7em;background-color:#eee;text-align:center;padding:.2cm;margin-bottom:.5cm;border-radius:0 0 .2cm .2cm}\n#specref-ui header h1{padding:0;margin:0;color:#000}\n#specref-ui p{padding:0;margin:0;font-size:.8em;text-align:center}\n#specref-ui p.state{margin:1cm}\n#specref-ui .searchcomponent{font-size:16px;display:grid;grid-template-columns:auto 2cm}\n#specref-ui button,#specref-ui input{border:0;padding:6px 12px}\n#specref-ui label{font-size:.6em;grid-column-end:3;text-align:right;grid-column-start:1}\n#specref-ui input[type=search]{-webkit-appearance:none;font-size:16px;border-radius:.1cm 0 0 .1cm;border:1px solid #ccc}\n#specref-ui button[type=submit]{color:#fff;border-radius:0 .1cm .1cm 0;background-color:#337ab7}\n#specref-ui button[type=submit]:hover{background-color:#286090;border-color:#204d74}\n#specref-ui .result-stats{margin:0;padding:0;color:grey;font-size:.7em;font-weight:700}\n#specref-ui .specref-results{font-size:.8em}\n#specref-ui .specref-results dd+dt{margin-top:.51cm}\n#specref-ui .specref-results a{text-transform:capitalize}\n#specref-ui .specref-results .authors{display:block;color:#006621}\n@media print{\n#respec-ui{display:none}\n}\n#xref-ui{width:100%;min-height:550px;height:100%;overflow:hidden;padding:0;margin:0;border:0}\n#xref-ui:not(.ready){background:url("https://respec.org/xref/loader.gif") no-repeat center}\n#xref-ui+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}'}),vs=Object.freeze({__proto__:null,default:'@keyframes pop{\n0%{transform:scale(1,1)}\n25%{transform:scale(1.25,1.25);opacity:.75}\n100%{transform:scale(1,1)}\n}\n.hljs{background:0 0!important}\na abbr,h1 abbr,h2 abbr,h3 abbr,h4 abbr,h5 abbr,h6 abbr{border:none}\ndfn{font-weight:700}\na.internalDFN{color:inherit;border-bottom:1px solid #99c;text-decoration:none}\na.externalDFN{color:inherit;border-bottom:1px dotted #ccc;text-decoration:none}\na.bibref{text-decoration:none}\n.respec-offending-element:target{animation:pop .25s ease-in-out 0s 1}\n.respec-offending-element,a[href].respec-offending-element{text-decoration:red wavy underline}\n@supports not (text-decoration:red wavy underline){\n.respec-offending-element:not(pre){display:inline-block}\n.respec-offending-element{background:url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=) bottom repeat-x}\n}\n#references :target{background:#eaf3ff;animation:pop .4s ease-in-out 0s 1}\ncite .bibref{font-style:normal}\ncode{color:#c63501}\nth code{color:inherit}\na[href].orcid{padding-left:4px;padding-right:4px}\na[href].orcid>svg{margin-bottom:-2px}\n.toc a,.tof a{text-decoration:none}\na .figno,a .secno{color:#000}\nol.tof,ul.tof{list-style:none outside none}\n.caption{margin-top:.5em;font-style:italic}\ntable.simple{border-spacing:0;border-collapse:collapse;border-bottom:3px solid #005a9c}\n.simple th{background:#005a9c;color:#fff;padding:3px 5px;text-align:left}\n.simple th a{color:#fff;padding:3px 5px;text-align:left}\n.simple th[scope=row]{background:inherit;color:inherit;border-top:1px solid #ddd}\n.simple td{padding:3px 10px;border-top:1px solid #ddd}\n.simple tr:nth-child(even){background:#f0f6ff}\n.section dd>p:first-child{margin-top:0}\n.section dd>p:last-child{margin-bottom:0}\n.section dd{margin-bottom:1em}\n.section dl.attrs dd,.section dl.eldef dd{margin-bottom:0}\n#issue-summary>ul{column-count:2}\n#issue-summary li{list-style:none;display:inline-block}\ndetails.respec-tests-details{margin-left:1em;display:inline-block;vertical-align:top}\ndetails.respec-tests-details>*{padding-right:2em}\ndetails.respec-tests-details[open]{z-index:999999;position:absolute;border:thin solid #cad3e2;border-radius:.3em;background-color:#fff;padding-bottom:.5em}\ndetails.respec-tests-details[open]>summary{border-bottom:thin solid #cad3e2;padding-left:1em;margin-bottom:1em;line-height:2em}\ndetails.respec-tests-details>ul{width:100%;margin-top:-.3em}\ndetails.respec-tests-details>li{padding-left:1em}\na[href].self-link:hover{opacity:1;text-decoration:none;background-color:transparent}\nh2,h3,h4,h5,h6{position:relative}\naside.example .marker>a.self-link{color:inherit}\nh2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{border:none;color:inherit;font-size:83%;height:2em;left:-1.6em;opacity:.5;position:absolute;text-align:center;text-decoration:none;top:0;transition:opacity .2s;width:2em}\nh2>a.self-link::before,h3>a.self-link::before,h4>a.self-link::before,h5>a.self-link::before,h6>a.self-link::before{content:"§";display:block}\n@media (max-width:767px){\ndd{margin-left:0}\nh2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left:auto;top:auto}\n}\n@media print{\n.removeOnSave{display:none}\n}'}),ks=Object.freeze({__proto__:null,default:"span.example-title{text-transform:none}\naside.example,div.example,div.illegal-example{padding:.5em;margin:1em 0;position:relative;clear:both}\ndiv.illegal-example{color:red}\ndiv.illegal-example p{color:#000}\naside.example,div.example{padding:.5em;border-left-width:.5em;border-left-style:solid;border-color:#e0cb52;background:#fcfaee}\naside.example div.example{border-left-width:.1em;border-color:#999;background:#fff}\naside.example div.example span.example-title{color:#999}\n.example pre{background-color:rgba(0,0,0,.03)}"}),xs=Object.freeze({__proto__:null,default:'.issue-label{text-transform:initial}\n.warning>p:first-child{margin-top:0}\n.warning{padding:.5em;border-left-width:.5em;border-left-style:solid}\nspan.warning{padding:.1em .5em .15em}\n.issue.closed span.issue-number{text-decoration:line-through}\n.warning{border-color:#f11;border-width:.2em;border-style:solid;background:#fbe9e9}\n.warning-title:before{content:"⚠";font-size:1.3em;float:left;padding-right:.3em;margin-top:-.3em}\nli.task-list-item{list-style:none}\ninput.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle}\n.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}'}),$s=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),_s=Object.freeze({__proto__:null,default:".hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa}\n.hljs-comment,.hljs-quote{color:#717277;font-style:italic}\n.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}\n.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#ca4706;font-weight:700}\n.hljs-literal{color:#0b76c5}\n.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#42803c}\n.hljs-built_in,.hljs-class .hljs-title{color:#9a6a01}\n.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}\n.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#336ae3}\n.hljs-emphasis{font-style:italic}\n.hljs-strong{font-weight:700}\n.hljs-link{text-decoration:underline}"}),Ss=Object.freeze({__proto__:null,default:"var:hover{text-decoration:underline;cursor:pointer}\nvar.respec-hl{color:var(--color,#000);background-color:var(--bg-color);box-shadow:0 0 0 2px var(--bg-color)}\nvar.respec-hl-c1{--bg-color:#f4d200}\nvar.respec-hl-c2{--bg-color:#ff87a2}\nvar.respec-hl-c3{--bg-color:#96e885}\nvar.respec-hl-c4{--bg-color:#3eeed2}\nvar.respec-hl-c5{--bg-color:#eacfb6}\nvar.respec-hl-c6{--bg-color:#82ddff}\nvar.respec-hl-c7{--bg-color:#ffbcf2}\n@media print{\nvar.respec-hl{background:0 0;color:#000;box-shadow:unset}\n}"}),Es=Object.freeze({__proto__:null,default:'dfn{cursor:pointer}\n.dfn-panel{position:absolute;z-index:35;min-width:300px;max-width:500px;padding:.5em .75em;margin-top:.6em;font:small Helvetica Neue,sans-serif,Droid Sans Fallback;background:#fff;color:#000;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px}\n.dfn-panel:not(.docked)>.caret{position:absolute;top:-9px}\n.dfn-panel:not(.docked)>.caret::after,.dfn-panel:not(.docked)>.caret::before{content:"";position:absolute;border:10px solid transparent;border-top:0;border-bottom:10px solid #fff;top:0}\n.dfn-panel:not(.docked)>.caret::before{border-bottom:9px solid #a2a9b1}\n.dfn-panel *{margin:0}\n.dfn-panel b{display:block;color:#000;margin-top:.25em}\n.dfn-panel ul a[href]{color:#333}\n.dfn-panel>div{display:flex}\n.dfn-panel a.self-link{font-weight:700;margin-right:auto}\n.dfn-panel .marker{padding:.1em;margin-left:.5em;border-radius:.2em;text-align:center;white-space:nowrap;font-size:90%;color:#040b1c}\n.dfn-panel .marker.dfn-exported{background:#d1edfd;box-shadow:0 0 0 .125em #1ca5f940}\n.dfn-panel .marker.idl-block{background:#8ccbf2;box-shadow:0 0 0 .125em #0670b161}\n.dfn-panel a:not(:hover){text-decoration:none!important;border-bottom:none!important}\n.dfn-panel a[href]:hover{border-bottom-width:1px}\n.dfn-panel ul{padding:0}\n.dfn-panel li{margin-left:1em}\n.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}'}),Cs=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'}),As=Object.freeze({__proto__:null,default:".assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}"})}(); + `}var os=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){document.head.insertBefore(Ne`<style> + ${ns} + </style>`,document.querySelector("link"));const e=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),t=document.createDocumentFragment();for(const n of e)t.append(rs(n));document.body.append(t);const n=document.createElement("script");n.id="respec-dfn-panel",n.textContent=await async function(){try{return(await Promise.resolve().then((function(){return ms}))).default}catch{return Ri("./src/core/dfn-panel.runtime.js")}}(),document.body.append(n)}});var is=String.raw`.assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}`;var ss=Object.freeze({__proto__:null,name:"core/algorithms",run:function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=is,document.head.appendChild(e)}}});const as="core/anchor-expander";function ls(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void Qe(`Found matching element "${t}", but it has no title or marker.`,as,{title:"Missing title.",elements:[n]})}const o=Ze(r);n.append(...o.childNodes),n.classList.add("box-ref")}function cs(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void Qe(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,as,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...Ze(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const i=r.querySelector(".fig-title");!n.hasAttribute("title")&&i&&(n.title=Ie(i.textContent))}function us(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)ds(r,n),ps(r,n);else{n.textContent=n.getAttribute("href");Qe("Found matching section, but the section was lacking a heading element.",as,{title:`No matching id in document: "${t}".`,elements:[n]})}}function ds(e,t){const n=e.querySelector(".self-link"),r=[...Ze(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=Fe(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function ps(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var fs=Object.freeze({__proto__:null,name:as,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":ds(n,t);break;case"section":us(n,e,t);break;case"figure":cs(n,e,t);break;case"aside":case"div":ls(n,e,t);break;default:t.textContent=t.getAttribute("href");Qe("ReSpec doesn't support expanding this kind of reference.",as,{title:`Can't expand "#${e}".`,elements:[t]})}ps(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");Qe(`Couldn't expand inline reference. The id "${e}" is not in the document.`,as,{title:`No matching id in document: ${e}.`,elements:[t]})}}}}),hs=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),ms=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'})}(); //# sourceMappingURL=respec-geonovum.js.map diff --git a/builds/respec-geonovum.js.map b/builds/respec-geonovum.js.map index 691b868574..5e7e8a9fac 100644 --- a/builds/respec-geonovum.js.map +++ b/builds/respec-geonovum.js.map @@ -1 +1 @@ -{"version":3,"file":"respec-geonovum.js","sources":["../profiles/geonovum.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/core/text-loader.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/geonovum/defaults.js","../src/core/style.js","../src/geonovum/style.js","../src/geonovum/l10n.js","../src/core/github.js","../src/core/data-include.js","../src/core/data-transform.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/core/examples.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/geonovum/conformance.js","../src/core/exporter.js","../src/ui/save-html.js","../src/ui/search-specref.js","../src/ui/about-respec.js","../src/core/seo.js","../src/core/worker.js","../src/core/highlight.js","../src/core/data-tests.js","../src/core/list-sorter.js","../src/core/highlight-vars.js","../src/core/dfn-panel.js","../src/core/algorithms.js","../src/core/anchor-expander.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/geonovum/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/geonovum/style.js\"),\n import(\"../src/geonovum/l10n.js\"),\n import(\"../src/core/github.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/geonovum/conformance.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/search-specref.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/data-tests.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n /* Linter must be the last thing to run */\n import(\"../src/core/linter.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n/* global define */\n\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n\n/**\n * @param {string} fileName\n */\nexport async function fetchAsset(fileName) {\n return fetchBase(`assets/${fileName}`);\n}\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n/* jshint laxcomma:true */\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/ui.css\")).default;\n } catch {\n return fetchAsset(\"ui.css\");\n }\n}\n\nasync function insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = await loadStyle();\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Sets the defaults for Geonovum documents\n */\nexport const name = \"geonovum/defaults\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\n\nlinter.register(privsecSectionRule);\n\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n [\n \"cc-by-nd\",\n {\n name:\n \"Creative Commons Attribution-NoDerivatives 4.0 International Public License\",\n short: \"CC-BY-ND\",\n url: \"https://creativecommons.org/licenses/by-nd/4.0/legalcode.nl\",\n },\n ],\n]);\n\nconst geonovumDefaults = {\n lint: {\n \"privsec-section\": true,\n },\n doJsonLd: true,\n license: \"cc-by\",\n specStatus: \"GN-BASIS\",\n logos: [\n {\n src: \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg\",\n alt: \"Geonovum\",\n id: \"Geonovum\",\n height: 67,\n width: 132,\n url: \"https://www.geonovum.nl/\",\n },\n ],\n};\n\nfunction computeProps(conf) {\n return {\n isCCBY: conf.license === \"cc-by\",\n licenseInfo: licenses.get(conf.license),\n isBasic: conf.specStatus === \"GN-BASIS\",\n isRegular: conf.specStatus === \"GN-BASIS\",\n };\n}\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...geonovumDefaults.lint,\n ...conf.lint,\n };\n Object.assign(conf, {\n ...coreDefaults,\n ...geonovumDefaults,\n ...conf,\n lint,\n });\n // computed properties\n Object.assign(conf, computeProps(conf));\n}\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport { fetchAsset } from \"./text-loader.js\";\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/respec.css\")).default;\n } catch {\n return fetchAsset(\"respec.css\");\n }\n}\n\nasync function insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = await loadStyle();\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport async function run(conf) {\n if (conf.noReSpecCSS) {\n (await styleElement).remove();\n }\n}\n","// @ts-check\n// Module geonovum/style\n// Inserts a link to the appropriate Geonovum style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"geonovum/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n script.addEventListener(\n \"load\",\n () => {\n if (window.location.hash) {\n window.location.href = window.location.hash;\n }\n },\n { once: true }\n );\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createStyle(css_name) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = `https://tools.geostandaarden.nl/respec/style/${css_name}.css`;\n return link;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C fixup.js\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preconnect\", // for Geonovum styles and scripts.\n href: \"https://tools.geostandaarden.nl/\",\n },\n {\n hint: \"preload\", // all Geonovum specs import base.css.\n href: \"https://tools.geostandaarden.nl/respec/style/base.css\",\n as: \"style\",\n },\n {\n hint: \"preload\", // all Geonovum specs show the logo.\n href: \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg\",\n as: \"image\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// add favicon for Geonovum\nconst favicon = document.createElement(\"link\");\nfavicon.rel = \"shortcut icon\";\nfavicon.type = \"image/x-icon\";\nfavicon.href =\n \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.ico\";\ndocument.head.prepend(favicon);\n\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\n// export function run(conf, doc, cb) {\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'GN-BASIS'.\";\n conf.specStatus = \"GN-BASIS\";\n showWarning(msg, name);\n }\n\n if (document.body.querySelector(\"figure.scalable\")) {\n // Apply leaflet style if class scalable is present\n document.head.appendChild(createStyle(\"leaflet\"));\n document.head.appendChild(createStyle(\"font-awesome\"));\n }\n\n let styleFile = \"\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"GN-WV\":\n styleFile += \"GN-WV.css\";\n break;\n case \"GN-CV\":\n styleFile += \"GN-CV.css\";\n break;\n case \"GN-VV\":\n styleFile += \"GN-VV.css\";\n break;\n case \"GN-DEF\":\n styleFile += \"GN-DEF.css\";\n break;\n case \"GN-BASIS\":\n styleFile += \"GN-BASIS.css\";\n break;\n default:\n styleFile = \"base.css\";\n }\n\n if (!conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, \"2016\");\n },\n { once: true }\n );\n }\n const finalStyleURL = `https://tools.geostandaarden.nl/respec/style/${styleFile}`;\n linkCSS(document, finalStyleURL);\n}\n","// @ts-check\n// Module geonovum/l10n\n// Looks at the lang attribute on the root element and uses it to manage the config.l10n object so\n// that other parts of the system can localise their text\nimport { html } from \"../core/import-maps.js\";\nimport { l10n } from \"../core/l10n.js\";\nexport const name = \"geonovum/l10n\";\nconst additions = {\n en: {\n status_at_publication: html`This section describes the status of this\n document at the time of its publication. Other documents may supersede\n this document. A list of current Geonovum publications and the latest\n revision of this document can be found via\n <a href=\"https://www.geonovum.nl/geo-standaarden/alle-standaarden\"\n >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a\n >(in Dutch).`,\n },\n nl: {\n status_at_publication: html`Deze paragraaf beschrijft de status van dit\n document ten tijde van publicatie. Het is mogelijk dat er actuelere\n versies van dit document bestaan. Een lijst van Geonovum publicaties en de\n laatste gepubliceerde versie van dit document zijn te vinden op\n <a href=\"https://www.geonovum.nl/geo-standaarden/alle-standaarden\"\n >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a\n >.`,\n },\n};\n\nObject.keys(additions).forEach(key => {\n if (!l10n[key]) l10n[key] = {};\n Object.assign(l10n[key], additions[key]);\n});\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\n/* jshint jquery: true */\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\n// for backward compatibity\nexport { wireReference, stringifyReference } from \"./render-biblio.js\";\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://specref.herokuapp.com/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst defaultsReference = Object.freeze({\n authors: [],\n date: \"\",\n href: \"\",\n publisher: \"\",\n status: \"\",\n title: \"\",\n etAl: false,\n});\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\nexport function wireReference(rawRef, target = \"_blank\") {\n if (typeof rawRef !== \"object\") {\n throw new TypeError(\"Only modern object references are allowed\");\n }\n const ref = Object.assign({}, defaultsReference, rawRef);\n const authors = ref.authors.join(\"; \") + (ref.etAl ? \" et al\" : \"\");\n const status = REF_STATUSES.get(ref.status) || ref.status;\n return html.wire(ref)`\n <cite>\n <a\n href=\"${ref.href}\"\n target=\"${target}\"\n rel=\"noopener noreferrer\">\n ${ref.title.trim()}</a>.\n </cite>\n <span class=\"authors\">\n ${endWithDot(authors)}\n </span>\n <span class=\"publisher\">\n ${endWithDot(ref.publisher)}\n </span>\n <span class=\"pubDate\">\n ${endWithDot(ref.date)}\n </span>\n <span class=\"pubStatus\">\n ${endWithDot(status)}\n </span>\n `;\n}\n\n/** @param {BiblioData|string} ref */\nexport function stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/examples.css\")).default;\n } catch {\n return fetchAsset(\"examples.css\");\n }\n}\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n const css = await cssPromise;\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/issues-notes.css\")).default;\n } catch {\n return fetchAsset(\"issues-notes.css\");\n }\n}\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const css = await cssPromise;\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","// @ts-check\n// Module geonovum/conformance\n// Handle the conformance section properly.\n// based on W3C conformance, but because Geonovum has different requirements, have a separate module\nimport { html } from \"../core/import-maps.js\";\nexport const name = \"geonovum/conformance\";\n\n/**\n * @param {Element} conformance\n */\nfunction processConformance(conformance) {\n const content = html`\n <h2>Conformiteit</h2>\n <p>\n Naast onderdelen die als niet normatief gemarkeerd zijn, zijn ook alle\n diagrammen, voorbeelden, en noten in dit document niet normatief. Verder\n is alles in dit document normatief.\n </p>\n <p>Informatief en normatief.</p>\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run() {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance) {\n processConformance(conformance);\n }\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nfunction serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/search-specref\n// Search Specref database\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\nimport { wireReference } from \"../core/biblio.js\";\n\nconst localizationStrings = {\n en: {\n search_specref: \"Search Specref\",\n },\n nl: {\n search_specref: \"Doorzoek Specref\",\n },\n ja: {\n search_specref: \"仕様検索\",\n },\n de: {\n search_specref: \"Spezifikationen durchsuchen\",\n },\n zh: {\n search_specref: \"搜索 Specref\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst button = ui.addCommand(\n l10n.search_specref,\n show,\n \"Ctrl+Shift+Alt+space\",\n \"🔎\"\n);\nconst specrefURL = \"https://specref.herokuapp.com/\";\nconst refSearchURL = `${specrefURL}search-refs`;\nconst reveseLookupURL = `${specrefURL}reverse-lookup`;\nconst form = document.createElement(\"form\");\nconst renderer = html.bind(form);\nconst resultList = html.bind(document.createElement(\"div\"));\n\nform.id = \"specref-ui\";\n\n/**\n * @param {Map<string, string>} resultMap\n * @param {string} query\n * @param {number} timeTaken\n */\nfunction renderResults(resultMap, query, timeTaken) {\n if (!resultMap.size) {\n return resultList`\n <p class=\"state\">\n Your search - <strong> ${query} </strong> -\n did not match any references.\n </p>\n `;\n }\n const wires = Array.from(resultMap)\n .slice(0, 99)\n .map(toDefinitionPair)\n .reduce((collector, pair) => collector.concat(pair), []);\n return resultList`\n <p class=\"result-stats\">\n ${resultMap.size} results (${timeTaken} seconds).\n ${resultMap.size > 99 ? \"First 100 results.\" : \"\"}\n </p>\n <dl class=\"specref-results\">${wires}</dl>\n `;\n}\n\nfunction toDefinitionPair([key, entry]) {\n return html.wire(entry)`\n <dt>\n [${key}]\n </dt>\n <dd>${wireReference(entry)}</dd>\n `;\n}\n\nfunction resultProcessor({ includeVersions = false } = {}) {\n return (...fetchedData) => {\n /** @type {{ [key: string]: any }} */\n const combinedResults = Object.assign({}, ...fetchedData);\n const results = new Map(Object.entries(combinedResults));\n // remove aliases\n Array.from(results)\n .filter(([, entry]) => entry.aliasOf)\n .map(([key]) => key)\n .reduce((results, key) => results.delete(key) && results, results);\n // Remove versions, if asked to\n if (!includeVersions) {\n Array.from(results.values())\n .filter(entry => typeof entry === \"object\" && \"versions\" in entry)\n .flat()\n .forEach(version => {\n results.delete(version);\n });\n }\n // Remove legacy string entries\n Array.from(results)\n .filter(([, value]) => typeof value !== \"object\")\n .forEach(([key]) => results.delete(key));\n return results;\n };\n}\n\nform.addEventListener(\"submit\", async ev => {\n ev.preventDefault();\n const { searchBox } = form;\n const query = searchBox.value;\n if (!query) {\n searchBox.focus();\n return;\n }\n render({ state: \"Searching Specref…\" });\n const refSearch = new URL(refSearchURL);\n refSearch.searchParams.set(\"q\", query);\n const reverseLookup = new URL(reveseLookupURL);\n reverseLookup.searchParams.set(\"urls\", query);\n try {\n const startTime = performance.now();\n const jsonData = await Promise.all([\n fetch(refSearch).then(response => response.json()),\n fetch(reverseLookup).then(response => response.json()),\n ]);\n const { checked: includeVersions } = form.includeVersions;\n const processResults = resultProcessor({ includeVersions });\n const results = processResults(...jsonData);\n render({\n query,\n results,\n state: \"\",\n timeTaken: Math.round(performance.now() - startTime) / 1000,\n });\n } catch (err) {\n console.error(err);\n render({ state: \"Error! Couldn't do search.\" });\n } finally {\n searchBox.focus();\n }\n});\n\nfunction show() {\n render();\n ui.freshModal(l10n.search_specref, form, button);\n /** @type {HTMLElement} */\n const input = form.querySelector(\"input[type=search]\");\n input.focus();\n}\n\nconst mast = html.wire()`\n <header>\n <p>\n An Open-Source, Community-Maintained Database of\n Web Standards & Related References.\n </p>\n </header>\n <div class=\"searchcomponent\">\n <input\n name=\"searchBox\"\n type=\"search\"\n aria-label=\"Search\"\n autocomplete=\"off\"\n placeholder=\"Keywords, titles, authors, urls…\">\n <button\n type=\"submit\">\n Search\n </button>\n <label>\n <input type=\"checkbox\" name=\"includeVersions\"> Include all versions.\n </label>\n </div>\n`;\n\n/**\n * @param {object} options\n * @param {string} [options.state]\n * @param {Map<string, string>} [options.results]\n * @param {number} [options.timeTaken]\n * @param {string} [options.query]\n */\nfunction render({ state = \"\", results, timeTaken, query } = {}) {\n if (!results) {\n renderer`<div>${mast}</div>`;\n return;\n }\n renderer`\n <div>${mast}</div>\n <p class=\"state\" hidden=\"${!state}\">\n ${state}\n </p>\n <section hidden=\"${!results}\" aria-live=\"polite\">${\n results ? renderResults(results, query, timeTaken) : []\n }</section>\n `;\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nconst ghCssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/highlight.css\")).default;\n } catch {\n return fetchAsset(\"highlight.css\");\n }\n}\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n const ghCss = await ghCssPromise;\n document.head.appendChild(\n html`<style>\n ${ghCss}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\n/**\n * Module core/data-tests\n *\n * Allows specs to link to test files in a test suite, by adding `details` of where\n * particular tests for a testable assertion can be found.\n *\n * `data-tests` takes a space separated list of URLs, e.g. data-test=\"foo.html bar.html\".\n *\n * Docs: https://github.com/w3c/respec/wiki/data-tests\n */\nimport { getIntlData, showError, showWarning } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst localizationStrings = {\n en: {\n missing_test_suite_uri:\n \"Found tests in your spec, but missing '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.\",\n tests: \"tests\",\n test: \"test\",\n },\n ja: {\n missing_test_suite_uri:\n \"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.\",\n tests: \"テスト\",\n test: \"テスト\",\n },\n de: {\n missing_test_suite_uri:\n \"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.\",\n tests: \"Tests\",\n test: \"Test\",\n },\n zh: {\n missing_test_suite_uri:\n \"本规范中包含测试,但在 ReSpec 配置中缺少 '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。\",\n tests: \"测试\",\n test: \"测试\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport const name = \"core/data-tests\";\n\nfunction toListItem(href) {\n const emojiList = [];\n const [testFile] = new URL(href).pathname.split(\"/\").reverse();\n const testParts = testFile.split(\".\");\n let [testFileName] = testParts;\n\n const isSecureTest = testParts.find(part => part === \"https\");\n if (isSecureTest) {\n const requiresConnectionEmoji = document.createElement(\"span\");\n requiresConnectionEmoji.textContent = \"🔒\";\n requiresConnectionEmoji.setAttribute(\n \"aria-label\",\n \"requires a secure connection\"\n );\n requiresConnectionEmoji.setAttribute(\"title\", \"Test requires HTTPS\");\n testFileName = testFileName.replace(\".https\", \"\");\n emojiList.push(requiresConnectionEmoji);\n }\n\n const isManualTest = testFileName\n .split(\".\")\n .join(\"-\")\n .split(\"-\")\n .find(part => part === \"manual\");\n if (isManualTest) {\n const manualPerformEmoji = document.createElement(\"span\");\n manualPerformEmoji.textContent = \"💪\";\n manualPerformEmoji.setAttribute(\n \"aria-label\",\n \"the test must be run manually\"\n );\n manualPerformEmoji.setAttribute(\"title\", \"Manual test\");\n testFileName = testFileName.replace(\"-manual\", \"\");\n emojiList.push(manualPerformEmoji);\n }\n\n const testList = html`\n <li>\n <a href=\"${href}\">${testFileName}</a>\n ${emojiList}\n </li>\n `;\n return testList;\n}\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n if (!testables.length) {\n return;\n }\n if (!conf.testSuiteURI) {\n showError(l10n.missing_test_suite_uri, name);\n return;\n }\n\n for (const elem of testables) {\n const tests = elem.dataset.tests.split(/,/gm).map(url => url.trim());\n const testURLs = toTestURLs(tests, conf.testSuiteURI);\n handleDuplicates(testURLs, elem);\n const details = toHTML(testURLs);\n elem.append(details);\n }\n}\n\n/**\n * @param {string[]} tests\n * @param {string} testSuiteURI\n */\nfunction toTestURLs(tests, testSuiteURI) {\n return tests\n .map(test => {\n try {\n return new URL(test, testSuiteURI).href;\n } catch {\n const msg = `Bad URI: ${test}`;\n showWarning(msg, name);\n }\n })\n .filter(href => href);\n}\n\n/**\n * @param {string[]} testURLs\n * @param {HTMLElement} elem\n */\nfunction handleDuplicates(testURLs, elem) {\n const duplicates = testURLs.filter(\n (link, i, self) => self.indexOf(link) !== i\n );\n if (duplicates.length) {\n const msg = `Duplicate tests found`;\n const hint = `To fix, remove duplicates from \"data-tests\": ${duplicates\n .map(url => new URL(url).pathname)\n .join(\", \")}`;\n showWarning(msg, name, { hint, elements: [elem] });\n }\n}\n\n/**\n * @param {string[]} testURLs\n */\nfunction toHTML(testURLs) {\n const uniqueList = [...new Set(testURLs)];\n const details = html`\n <details class=\"respec-tests-details removeOnSave\">\n <summary>tests: ${uniqueList.length}</summary>\n <ul>\n ${uniqueList.map(toListItem)}\n </ul>\n </details>\n `;\n return details;\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport { fetchAsset } from \"./text-loader.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nconst hlVarsPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/var.css\")).default;\n } catch {\n return fetchAsset(\"var.css\");\n }\n}\n\nexport async function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = await hlVarsPromise;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport { fetchAsset, fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n const css = await loadStyle();\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/dfn-panel.css\")).default;\n } catch {\n return fetchAsset(\"dfn-panel.css\");\n }\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\n\nimport { fetchAsset } from \"./text-loader.js\";\n\nexport const name = \"core/algorithms\";\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/algorithms.css\")).default;\n } catch {\n return fetchAsset(\"algorithms.css\");\n }\n}\n\nexport async function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = await cssPromise;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","test","rtrim","relativeBase","indexOf","str","invert","l","length","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","source","obj","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","key","i","arguments","Object","hasOwnProperty","splitCells","tableRow","count","cells","match","offset","escaped","curr","split","splice","push","trim","findClosingBracket","b","level","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","raw","title","text","type","Tokenizer_1","options","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","slice","join","indentCodeCompensation","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","def","tag","table","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","nextChar","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","lastIndex","Math","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","tokens","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","token","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","body","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parse","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","unshift","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","t","defineProperty","r","a","delete","configurable","o","s","WeakSet","add","m","u","insertBefore","selected","selectedIndex","f","querySelectorAll","y","w","x","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","v","p","g","Array","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","constructor","_wire$","defineProperties","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","isArray","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","concat","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","attribute","values","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","it","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","dispatch","component","setState","idb","_idb","_marked","_pluralize","getIntlData","x_and_y","x_y_and_z","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","array","mapper","docLang","Intl","ListFormat","format","lastComma","and","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","data","runTransforms","flist","funcArgs","methods","meth","showWarning","addId","pfx","txt","noLC","id","normalize","getElementById","nextId","getDfnTitles","titleSet","Set","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","ref","element","closestInformative","closest","isInformative","querySelector","startsWith","illegal","wrapInner","outer","wrapper","parents","selector","parent","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","super","getCanonicalKey","existingKey","find","makeSafeCopy","clone","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","comment","walkTree","nextNode","CaseInsensitiveMap","entries","RespecError","plugin","isWarning","assign","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","subscriptions","topic","from","cb","arg","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","respecVersion","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","head","includeConfig","params","URLSearchParams","search","overrideEntries","filter","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","fetchBase","response","fetch","fetchAsset","fileName","reindent","lines","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","prepend","Builder","current","tagName","position","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","indentation","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","default","loadStyle","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hash","hasLink","isLegacyFrag","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","zh","defaultLang","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","nl","hasNoHeading","offendingMembers","getOwnPropertyNames","endsWith","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","isRecTrack","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","specStatus","highlightVars","addSectionLinks","privsecSectionRule","licenses","short","geonovumDefaults","doJsonLd","license","logos","alt","height","width","isCCBY","licenseInfo","isBasic","isRegular","computeProps","insertStyle","noReSpecCSS","createStyle","css_name","resourceHints","createResourceHints","favicon","delimiter","separator","toKeyValuePairs","initial-scale","shrink-to-fit","createMetaViewport","styleFile","noToc","attachFixupScript","styles","frag","reduce","nextLink","linkCSS","additions","status_at_publication","resolveGithubPromise","rejectGithubPromise","github","file_a_bug","participate","commit_history","ko","ja","es","ghURL","tempURL","repoURL","org","repo","pathname","branch","issueBase","newProps","edDraftURI","githubToken","githubUser","atRiskBase","otherLinks","pullBase","shortName","otherLink","githubAPI","hostname","normalizedGHObj","apiBase","fullName","normalizedConfig","processResponse","rawData","el","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","include","includeId","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","identifier","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","joined","htmlJoinComma","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","pop","allArgs","SyntaxError","reverse","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","unique","openIdb","biblioDB","isAlias","resolveAlias","TypeError","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","reference","promisesToAdd","flatMap","isInDB","put","close","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","ok","status","json","addAll","resolveRef","entry","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","defaultsReference","freeze","authors","date","publisher","etAl","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","wireReference","rawRef","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","abbr","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","terms","plurals","size","userDefinedPlurals","uniquePlurals","cssPromise","makeTitle","num","report","number","examples","css","contains","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","note","handleIssues","ins","ghIssues","getIssueNumber","Number","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","searchParams","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","hasChildNodes","insertAdjacentHTML","makeIssueSectionSummary","issuesAndNotes","issueNumbers","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","container","list_of_figures","fig","img","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","every","decorateTableOfFigures","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","cleanup","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","duplicates","dfnFor","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","idl","first","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","xref","editors","editor","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","res","input","maxAge","Request","cache","cachedResponse","caches","Date","headers","clonedResponse","customHeaders","Headers","expiryDate","now","toISOString","cacheResponse","Response","blob","fetchAndCache","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","prefix","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","span","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","isNaN","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","conformance","processConformance","mimeTypes","rsDocToDataURL","mimeType","validTypes","cloneDoc","insertions","metaViewport","metaCharset","metaGenerator","XMLSerializer","serializeToString","outerHTML","prettify","doctype","encodeURIComponent","save_snapshot","downloadLinks","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","search_specref","form","resultList","toDefinitionPair","searchBox","query","refSearch","reverseLookup","startTime","jsonData","includeVersions","processResults","fetchedData","combinedResults","flat","resultProcessor","timeTaken","round","mast","resultMap","wires","collector","pair","renderResults","about_respec","getEntriesByType","duration","perfEntryToTR","firstParagraph","metaElem","workerPromise","workerScript","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","namespace","counter","gen","idGenerator","msgIdGenerator","ghCssPromise","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","ghCss","missing_test_suite_uri","tests","toListItem","emojiList","testFile","testParts","testFileName","requiresConnectionEmoji","manualPerformEmoji","toTestURLs","testSuiteURI","handleDuplicates","testURLs","uniqueList","testables","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","hlVarsPromise","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","re","activeClass","outputDoc","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors"],"mappings":"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CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC3f6BkC,GAAU,SAASC,GAAgB,IAAIC,EAAE,GAAG,IAAIA,EAAE5b,QAAQA,QAAQ,MAAMuK,GAAGqR,EAAE5b,QAAQ,SAAS4b,EAAErR,GAAG,IAAI1C,EAAE0C,EAAEsR,eAAeC,EAAEvR,EAAES,eAAeH,EAAEkR,EAAEza,UAAU,OAAOuJ,EAAEmR,OAAO,SAASzR,GAAG,OAAOvI,KAAKd,IAAIqJ,WAAWA,EAAEvI,KAAK4F,IAAIiD,EAAElK,IAAI,SAAS4J,GAAG,OAAOvI,KAAKd,IAAIqJ,GAAGA,EAAEvI,KAA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"} \ No newline at end of file +{"version":3,"file":"respec-geonovum.js","sources":["../profiles/geonovum.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/styles/ui.css.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/geonovum/defaults.js","../src/styles/respec.css.js","../src/core/style.js","../src/geonovum/style.js","../src/geonovum/l10n.js","../src/core/github.js","../src/core/data-include.js","../src/core/data-transform.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/styles/examples.css.js","../src/core/examples.js","../src/styles/issues-notes.css.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/geonovum/conformance.js","../src/core/exporter.js","../src/ui/save-html.js","../src/ui/search-specref.js","../src/ui/about-respec.js","../src/core/seo.js","../src/styles/highlight.css.js","../src/core/text-loader.js","../src/core/worker.js","../src/core/highlight.js","../src/core/data-tests.js","../src/core/list-sorter.js","../src/styles/var.css.js","../src/core/highlight-vars.js","../src/styles/dfn-panel.css.js","../src/core/dfn-panel.js","../src/styles/algorithms.css.js","../src/core/algorithms.js","../src/core/anchor-expander.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/geonovum/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/geonovum/style.js\"),\n import(\"../src/geonovum/l10n.js\"),\n import(\"../src/core/github.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/geonovum/conformance.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/search-specref.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/data-tests.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n /* Linter must be the last thing to run */\n import(\"../src/core/linter.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/* global define */\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.respec-modal .close-button {\n position: absolute;\n z-index: inherit;\n padding: 0.2em;\n font-weight: bold;\n cursor: pointer;\n margin-left: 5px;\n border: none;\n background: transparent;\n}\n\n#respec-ui {\n position: fixed;\n display: flex;\n flex-direction: row-reverse;\n top: 20px;\n right: 20px;\n width: 202px;\n text-align: right;\n z-index: 9000;\n}\n\n#respec-pill,\n.respec-info-button {\n background: #fff;\n height: 2.5em;\n color: rgb(120, 120, 120);\n border: 1px solid #ccc;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n}\n\n.respec-info-button {\n border: none;\n opacity: 0.75;\n border-radius: 2em;\n margin-right: 1em;\n min-width: 3.5em;\n}\n\n.respec-info-button:focus,\n.respec-info-button:hover {\n opacity: 1;\n transition: opacity 0.2s;\n}\n\n#respec-pill:disabled {\n font-size: 2.8px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(40, 40, 40, 0.2);\n border-right: 1.1em solid rgba(40, 40, 40, 0.2);\n border-bottom: 1.1em solid rgba(40, 40, 40, 0.2);\n border-left: 1.1em solid #ffffff;\n transform: translateZ(0);\n animation: respec-spin 0.5s infinite linear;\n box-shadow: none;\n}\n\n#respec-pill:disabled,\n#respec-pill:disabled:after {\n border-radius: 50%;\n width: 10em;\n height: 10em;\n}\n\n@keyframes respec-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.respec-hidden {\n visibility: hidden;\n opacity: 0;\n transition: visibility 0s 0.2s, opacity 0.2s linear;\n}\n\n.respec-visible {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.2s linear;\n}\n\n#respec-pill:hover,\n#respec-pill:focus {\n color: rgb(0, 0, 0);\n background-color: rgb(245, 245, 245);\n transition: color 0.2s;\n}\n\n#respec-menu {\n position: absolute;\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n background: #fff;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n width: 200px;\n display: none;\n text-align: left;\n margin-top: 32px;\n font-size: 0.8em;\n}\n\n#respec-menu:not([hidden]) {\n display: block;\n}\n\n#respec-menu li {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n.respec-save-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(47%, 2fr));\n grid-gap: 0.5cm;\n padding: 0.5cm;\n}\n\n.respec-save-button:link {\n padding-top: 16px;\n color: rgb(240, 240, 240);\n background: rgb(42, 90, 168);\n justify-self: stretch;\n height: 1cm;\n text-decoration: none;\n text-align: center;\n font-size: inherit;\n border: none;\n border-radius: 0.2cm;\n}\n\n.respec-save-button:link:hover {\n color: white;\n background: rgb(42, 90, 168);\n padding: 0;\n margin: 0;\n border: 0;\n padding-top: 16px;\n}\n\n.respec-save-button:link:focus {\n background: #193766;\n}\n\n#respec-ui button:focus,\n#respec-pill:focus,\n.respec-option:focus {\n outline: 0;\n outline-style: none;\n}\n\n#respec-pill-error {\n background-color: red;\n color: white;\n}\n\n#respec-pill-warning {\n background-color: orange;\n color: white;\n}\n\n.respec-warning-list,\n.respec-error-list {\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: sans-serif;\n background-color: rgb(255, 251, 230);\n font-size: 0.85em;\n}\n\n.respec-warning-list > li,\n.respec-error-list > li {\n padding: 0.4em 0.7em;\n}\n\n.respec-warning-list > li::before {\n content: \"⚠️\";\n padding-right: 0.5em;\n}\n.respec-warning-list p,\n.respec-error-list p {\n padding: 0;\n margin: 0;\n}\n\n.respec-warning-list li {\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 245, 194);\n}\n\n.respec-error-list,\n.respec-error-list li {\n background-color: rgb(255, 240, 240);\n}\n\n.respec-error-list li::before {\n content: \"💥\";\n padding-right: 0.5em;\n}\n\n.respec-error-list li {\n padding: 0.4em 0.7em;\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 215, 215);\n}\n\n.respec-error-list li > p {\n margin: 0;\n padding: 0;\n display: inline-block;\n}\n\n.respec-error-list li > p:first-child,\n.respec-warning-list li > p:first-child {\n display: inline;\n}\n\n.respec-warning-list > li li,\n.respec-error-list > li li {\n margin: 0;\n list-style: disc;\n}\n\n#respec-overlay {\n display: block;\n position: fixed;\n z-index: 10000;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n background: #000;\n}\n\n.respec-show-overlay {\n transition: opacity 0.2s linear;\n opacity: 0.5;\n}\n\n.respec-hide-overlay {\n transition: opacity 0.2s linear;\n opacity: 0;\n}\n\n.respec-modal {\n display: block;\n position: fixed;\n z-index: 11000;\n margin: auto;\n top: 10%;\n background: #fff;\n border: 5px solid #666;\n min-width: 20%;\n width: 79%;\n padding: 0;\n max-height: 80%;\n overflow-y: auto;\n margin: 0 -0.5cm;\n}\n\n@media screen and (min-width: 78em) {\n .respec-modal {\n width: 62%;\n }\n}\n\n.respec-modal h3 {\n margin: 0;\n padding: 0.2em;\n text-align: center;\n color: black;\n background: linear-gradient(\n to bottom,\n rgba(238, 238, 238, 1) 0%,\n rgba(238, 238, 238, 1) 50%,\n rgba(204, 204, 204, 1) 100%\n );\n font-size: 1em;\n}\n\n.respec-modal .inside div p {\n padding-left: 1cm;\n}\n\n#respec-menu button.respec-option {\n background: white;\n padding: 0 0.2cm;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n padding: 1.2em 1.2em;\n}\n\n#respec-menu button.respec-option:hover,\n#respec-menu button:focus {\n background-color: #eeeeee;\n}\n\n.respec-cmd-icon {\n padding-right: 0.5em;\n}\n\n#respec-ui button.respec-option:last-child {\n border: none;\n border-radius: inherit;\n}\n\n.respec-button-copy-paste {\n position: absolute;\n height: 28px;\n width: 40px;\n cursor: pointer;\n background-image: linear-gradient(#fcfcfc, #eee);\n border: 1px solid rgb(144, 184, 222);\n border-left: 0;\n border-radius: 0px 0px 3px 0;\n -webkit-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n top: 0;\n left: 127px;\n}\n\n@media print {\n #respec-ui {\n display: none;\n }\n}\n\n.respec-iframe {\n width: 100%;\n min-height: 550px;\n height: 100%;\n overflow: hidden;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n.respec-iframe:not(.ready) {\n background: url(\"https://respec.org/xref/loader.gif\") no-repeat center;\n}\n\n.respec-iframe + a[href] {\n font-size: 0.9rem;\n float: right;\n margin: 0 0.5em 0.5em;\n border-bottom-width: 1px;\n}\n`;\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport css from \"../styles/ui.css.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Sets the defaults for Geonovum documents\n */\nexport const name = \"geonovum/defaults\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\n\nlinter.register(privsecSectionRule);\n\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n [\n \"cc-by-nd\",\n {\n name:\n \"Creative Commons Attribution-NoDerivatives 4.0 International Public License\",\n short: \"CC-BY-ND\",\n url: \"https://creativecommons.org/licenses/by-nd/4.0/legalcode.nl\",\n },\n ],\n]);\n\nconst geonovumDefaults = {\n lint: {\n \"privsec-section\": true,\n },\n doJsonLd: true,\n license: \"cc-by\",\n specStatus: \"GN-BASIS\",\n logos: [\n {\n src: \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg\",\n alt: \"Geonovum\",\n id: \"Geonovum\",\n height: 67,\n width: 132,\n url: \"https://www.geonovum.nl/\",\n },\n ],\n};\n\nfunction computeProps(conf) {\n return {\n isCCBY: conf.license === \"cc-by\",\n licenseInfo: licenses.get(conf.license),\n isBasic: conf.specStatus === \"GN-BASIS\",\n isRegular: conf.specStatus === \"GN-BASIS\",\n };\n}\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...geonovumDefaults.lint,\n ...conf.lint,\n };\n Object.assign(conf, {\n ...coreDefaults,\n ...geonovumDefaults,\n ...conf,\n lint,\n });\n // computed properties\n Object.assign(conf, computeProps(conf));\n}\n","/* ReSpec specific CSS */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n@keyframes pop {\n 0% {\n transform: scale(1, 1);\n }\n 25% {\n transform: scale(1.25, 1.25);\n opacity: 0.75;\n }\n 100% {\n transform: scale(1, 1);\n }\n}\n\n/* Override code highlighter background */\n.hljs {\n background: transparent !important;\n}\n\n/* --- INLINES --- */\nh1 abbr,\nh2 abbr,\nh3 abbr,\nh4 abbr,\nh5 abbr,\nh6 abbr,\na abbr {\n border: none;\n}\n\ndfn {\n font-weight: bold;\n}\n\na.internalDFN {\n color: inherit;\n border-bottom: 1px solid #99c;\n text-decoration: none;\n}\n\na.externalDFN {\n color: inherit;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\na.bibref {\n text-decoration: none;\n}\n\n.respec-offending-element:target {\n animation: pop 0.25s ease-in-out 0s 1;\n}\n\n.respec-offending-element,\na[href].respec-offending-element {\n text-decoration: red wavy underline;\n}\n@supports not (text-decoration: red wavy underline) {\n .respec-offending-element:not(pre) {\n display: inline-block;\n }\n .respec-offending-element {\n /* Red squiggly line */\n background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=)\n bottom repeat-x;\n }\n}\n\n#references :target {\n background: #eaf3ff;\n animation: pop 0.4s ease-in-out 0s 1;\n}\n\ncite .bibref {\n font-style: normal;\n}\n\ncode {\n color: #c63501;\n}\n\nth code {\n color: inherit;\n}\n\na[href].orcid {\n padding-left: 4px;\n padding-right: 4px;\n}\n\na[href].orcid > svg {\n margin-bottom: -2px;\n}\n\n/* --- TOC --- */\n\n.toc a,\n.tof a {\n text-decoration: none;\n}\n\na .secno,\na .figno {\n color: #000;\n}\n\nul.tof,\nol.tof {\n list-style: none outside none;\n}\n\n.caption {\n margin-top: 0.5em;\n font-style: italic;\n}\n\n/* --- TABLE --- */\n\ntable.simple {\n border-spacing: 0;\n border-collapse: collapse;\n border-bottom: 3px solid #005a9c;\n}\n\n.simple th {\n background: #005a9c;\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th a {\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th[scope=\"row\"] {\n background: inherit;\n color: inherit;\n border-top: 1px solid #ddd;\n}\n\n.simple td {\n padding: 3px 10px;\n border-top: 1px solid #ddd;\n}\n\n.simple tr:nth-child(even) {\n background: #f0f6ff;\n}\n\n/* --- DL --- */\n\n.section dd > p:first-child {\n margin-top: 0;\n}\n\n.section dd > p:last-child {\n margin-bottom: 0;\n}\n\n.section dd {\n margin-bottom: 1em;\n}\n\n.section dl.attrs dd,\n.section dl.eldef dd {\n margin-bottom: 0;\n}\n\n#issue-summary > ul {\n column-count: 2;\n}\n\n#issue-summary li {\n list-style: none;\n display: inline-block;\n}\n\ndetails.respec-tests-details {\n margin-left: 1em;\n display: inline-block;\n vertical-align: top;\n}\n\ndetails.respec-tests-details > * {\n padding-right: 2em;\n}\n\ndetails.respec-tests-details[open] {\n z-index: 999999;\n position: absolute;\n border: thin solid #cad3e2;\n border-radius: 0.3em;\n background-color: white;\n padding-bottom: 0.5em;\n}\n\ndetails.respec-tests-details[open] > summary {\n border-bottom: thin solid #cad3e2;\n padding-left: 1em;\n margin-bottom: 1em;\n line-height: 2em;\n}\n\ndetails.respec-tests-details > ul {\n width: 100%;\n margin-top: -0.3em;\n}\n\ndetails.respec-tests-details > li {\n padding-left: 1em;\n}\n\na[href].self-link:hover {\n opacity: 1;\n text-decoration: none;\n background-color: transparent;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n position: relative;\n}\n\naside.example .marker > a.self-link {\n color: inherit;\n}\n\nh2 > a.self-link,\nh3 > a.self-link,\nh4 > a.self-link,\nh5 > a.self-link,\nh6 > a.self-link {\n border: none;\n color: inherit;\n font-size: 83%;\n height: 2em;\n left: -1.6em;\n opacity: 0.5;\n position: absolute;\n text-align: center;\n text-decoration: none;\n top: 0;\n transition: opacity 0.2s;\n width: 2em;\n}\n\nh2 > a.self-link::before,\nh3 > a.self-link::before,\nh4 > a.self-link::before,\nh5 > a.self-link::before,\nh6 > a.self-link::before {\n content: \"§\";\n display: block;\n}\n\n@media (max-width: 767px) {\n dd {\n margin-left: 0;\n }\n\n /* Don't position self-link in headings off-screen */\n h2 > a.self-link,\n h3 > a.self-link,\n h4 > a.self-link,\n h5 > a.self-link,\n h6 > a.self-link {\n left: auto;\n top: auto;\n }\n}\n\n@media print {\n .removeOnSave {\n display: none;\n }\n}\n`;\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport css from \"../styles/respec.css.js\";\n\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = css;\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport function run(conf) {\n if (conf.noReSpecCSS) {\n styleElement.remove();\n }\n}\n","// @ts-check\n// Module geonovum/style\n// Inserts a link to the appropriate Geonovum style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"geonovum/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n script.addEventListener(\n \"load\",\n () => {\n if (window.location.hash) {\n window.location.href = window.location.hash;\n }\n },\n { once: true }\n );\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createStyle(css_name) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = `https://tools.geostandaarden.nl/respec/style/${css_name}.css`;\n return link;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C fixup.js\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preconnect\", // for Geonovum styles and scripts.\n href: \"https://tools.geostandaarden.nl/\",\n },\n {\n hint: \"preload\", // all Geonovum specs import base.css.\n href: \"https://tools.geostandaarden.nl/respec/style/base.css\",\n as: \"style\",\n },\n {\n hint: \"preload\", // all Geonovum specs show the logo.\n href: \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg\",\n as: \"image\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// add favicon for Geonovum\nconst favicon = document.createElement(\"link\");\nfavicon.rel = \"shortcut icon\";\nfavicon.type = \"image/x-icon\";\nfavicon.href =\n \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.ico\";\ndocument.head.prepend(favicon);\n\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\n// export function run(conf, doc, cb) {\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'GN-BASIS'.\";\n conf.specStatus = \"GN-BASIS\";\n showWarning(msg, name);\n }\n\n if (document.body.querySelector(\"figure.scalable\")) {\n // Apply leaflet style if class scalable is present\n document.head.appendChild(createStyle(\"leaflet\"));\n document.head.appendChild(createStyle(\"font-awesome\"));\n }\n\n let styleFile = \"\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"GN-WV\":\n styleFile += \"GN-WV.css\";\n break;\n case \"GN-CV\":\n styleFile += \"GN-CV.css\";\n break;\n case \"GN-VV\":\n styleFile += \"GN-VV.css\";\n break;\n case \"GN-DEF\":\n styleFile += \"GN-DEF.css\";\n break;\n case \"GN-BASIS\":\n styleFile += \"GN-BASIS.css\";\n break;\n default:\n styleFile = \"base.css\";\n }\n\n if (!conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, \"2016\");\n },\n { once: true }\n );\n }\n const finalStyleURL = `https://tools.geostandaarden.nl/respec/style/${styleFile}`;\n linkCSS(document, finalStyleURL);\n}\n","// @ts-check\n// Module geonovum/l10n\n// Looks at the lang attribute on the root element and uses it to manage the config.l10n object so\n// that other parts of the system can localise their text\nimport { html } from \"../core/import-maps.js\";\nimport { l10n } from \"../core/l10n.js\";\nexport const name = \"geonovum/l10n\";\nconst additions = {\n en: {\n status_at_publication: html`This section describes the status of this\n document at the time of its publication. Other documents may supersede\n this document. A list of current Geonovum publications and the latest\n revision of this document can be found via\n <a href=\"https://www.geonovum.nl/geo-standaarden/alle-standaarden\"\n >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a\n >(in Dutch).`,\n },\n nl: {\n status_at_publication: html`Deze paragraaf beschrijft de status van dit\n document ten tijde van publicatie. Het is mogelijk dat er actuelere\n versies van dit document bestaan. Een lijst van Geonovum publicaties en de\n laatste gepubliceerde versie van dit document zijn te vinden op\n <a href=\"https://www.geonovum.nl/geo-standaarden/alle-standaarden\"\n >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a\n >.`,\n },\n};\n\nObject.keys(additions).forEach(key => {\n if (!l10n[key]) l10n[key] = {};\n Object.assign(l10n[key], additions[key]);\n});\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://api.specref.org/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\n/** @param {BiblioData|string} ref */\nfunction stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","/* --- EXAMPLES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nspan.example-title {\n text-transform: none;\n}\n\naside.example,\ndiv.example,\ndiv.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\n\ndiv.illegal-example {\n color: red;\n}\n\ndiv.illegal-example p {\n color: black;\n}\n\naside.example,\ndiv.example {\n padding: 0.5em;\n border-left-width: 0.5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: 0.1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example span.example-title {\n color: #999;\n}\n\n.example pre {\n background-color: rgba(0, 0, 0, 0.03);\n}\n`;\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport css from \"../styles/examples.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","/* --- ISSUES/NOTES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.issue-label {\n text-transform: initial;\n}\n\n.warning > p:first-child { margin-top: 0 }\n.warning {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n}\nspan.warning { padding: .1em .5em .15em; }\n\n.issue.closed span.issue-number {\n text-decoration: line-through;\n}\n\n.warning {\n border-color: #f11;\n border-width: .2em;\n border-style: solid;\n background: #fbe9e9;\n}\n\n.warning-title:before{\n content: \"⚠\"; /*U+26A0 WARNING SIGN*/\n font-size: 1.3em;\n float: left;\n padding-right: .3em;\n margin-top: -0.3em;\n}\n\nli.task-list-item {\n list-style: none;\n}\n\ninput.task-list-item-checkbox {\n margin: 0 0.35em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.issue a.respec-gh-label {\n padding: 5px;\n margin: 0 2px 0 2px;\n font-size: 10px;\n text-transform: none;\n text-decoration: none;\n font-weight: bold;\n border-radius: 4px;\n position: relative;\n bottom: 2px;\n border: none;\n display: inline-block;\n}\n`;\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport css from \"../styles/issues-notes.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","// @ts-check\n// Module geonovum/conformance\n// Handle the conformance section properly.\n// based on W3C conformance, but because Geonovum has different requirements, have a separate module\nimport { html } from \"../core/import-maps.js\";\nexport const name = \"geonovum/conformance\";\n\n/**\n * @param {Element} conformance\n */\nfunction processConformance(conformance) {\n const content = html`\n <h2>Conformiteit</h2>\n <p>\n Naast onderdelen die als niet normatief gemarkeerd zijn, zijn ook alle\n diagrammen, voorbeelden, en noten in dit document niet normatief. Verder\n is alles in dit document normatief.\n </p>\n <p>Informatief en normatief.</p>\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run() {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance) {\n processConformance(conformance);\n }\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nfunction serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/search-specref\n// Search Specref database\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst URL = \"https://respec.org/specref/\";\n\nconst localizationStrings = {\n en: {\n search_specref: \"Search Specref\",\n },\n nl: {\n search_specref: \"Doorzoek Specref\",\n },\n ja: {\n search_specref: \"仕様検索\",\n },\n de: {\n search_specref: \"Spezifikationen durchsuchen\",\n },\n zh: {\n search_specref: \"搜索 Specref\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst button = ui.addCommand(\n l10n.search_specref,\n show,\n \"Ctrl+Shift+Alt+space\",\n \"🔎\"\n);\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n /** @type {HTMLElement} */\n const specrefSearchUI = html`\n <iframe class=\"respec-iframe\" src=\"${URL}\" onload=${onLoad}></iframe>\n <a href=\"${URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.search_specref, specrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","/*\nAdapted from Atom One Light by Daniel Gamage for ReSpec, with better color contrast\nOriginal One Light Syntax theme from https://github.com/atom/one-light-syntax\nbase: #fafafa\nmono-1: #383a42\nmono-2: #686b77\nmono-3: #a0a1a7\nhue-1: #0184bb\nhue-2: #4078f2\nhue-3: #a626a4\nhue-4: #50a14f\nhue-5: #e45649\nhue-5-2: #c91243\nhue-6: #986801\nhue-6-2: #c18401\n*/\n\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n color: #383a42;\n background: #fafafa;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #717277;\n font-style: italic;\n}\n\n.hljs-doctag,\n.hljs-keyword,\n.hljs-formula {\n color: #a626a4;\n}\n\n.hljs-section,\n.hljs-name,\n.hljs-selector-tag,\n.hljs-deletion,\n.hljs-subst {\n color: #ca4706;\n font-weight: bold;\n}\n\n.hljs-literal {\n color: #0b76c5;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta-string {\n color: #42803C;\n}\n\n.hljs-built_in,\n.hljs-class .hljs-title {\n color: #9a6a01;\n}\n\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-type,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-number {\n color: #986801;\n}\n\n.hljs-symbol,\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-title {\n color: #336ae3;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n.hljs-link {\n text-decoration: underline;\n}\n`;\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport css from \"../styles/highlight.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n document.head.appendChild(\n html`<style>\n ${css}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\n/**\n * Module core/data-tests\n *\n * Allows specs to link to test files in a test suite, by adding `details` of where\n * particular tests for a testable assertion can be found.\n *\n * `data-tests` takes a space separated list of URLs, e.g. data-test=\"foo.html bar.html\".\n *\n * Docs: https://github.com/w3c/respec/wiki/data-tests\n */\nimport { getIntlData, showError, showWarning } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst localizationStrings = {\n en: {\n missing_test_suite_uri:\n \"Found tests in your spec, but missing '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.\",\n tests: \"tests\",\n test: \"test\",\n },\n ja: {\n missing_test_suite_uri:\n \"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.\",\n tests: \"テスト\",\n test: \"テスト\",\n },\n de: {\n missing_test_suite_uri:\n \"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.\",\n tests: \"Tests\",\n test: \"Test\",\n },\n zh: {\n missing_test_suite_uri:\n \"本规范中包含测试,但在 ReSpec 配置中缺少 '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。\",\n tests: \"测试\",\n test: \"测试\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport const name = \"core/data-tests\";\n\nfunction toListItem(href) {\n const emojiList = [];\n const [testFile] = new URL(href).pathname.split(\"/\").reverse();\n const testParts = testFile.split(\".\");\n let [testFileName] = testParts;\n\n const isSecureTest = testParts.find(part => part === \"https\");\n if (isSecureTest) {\n const requiresConnectionEmoji = document.createElement(\"span\");\n requiresConnectionEmoji.textContent = \"🔒\";\n requiresConnectionEmoji.setAttribute(\n \"aria-label\",\n \"requires a secure connection\"\n );\n requiresConnectionEmoji.setAttribute(\"title\", \"Test requires HTTPS\");\n testFileName = testFileName.replace(\".https\", \"\");\n emojiList.push(requiresConnectionEmoji);\n }\n\n const isManualTest = testFileName\n .split(\".\")\n .join(\"-\")\n .split(\"-\")\n .find(part => part === \"manual\");\n if (isManualTest) {\n const manualPerformEmoji = document.createElement(\"span\");\n manualPerformEmoji.textContent = \"💪\";\n manualPerformEmoji.setAttribute(\n \"aria-label\",\n \"the test must be run manually\"\n );\n manualPerformEmoji.setAttribute(\"title\", \"Manual test\");\n testFileName = testFileName.replace(\"-manual\", \"\");\n emojiList.push(manualPerformEmoji);\n }\n\n const testList = html`\n <li>\n <a href=\"${href}\">${testFileName}</a>\n ${emojiList}\n </li>\n `;\n return testList;\n}\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n if (!testables.length) {\n return;\n }\n if (!conf.testSuiteURI) {\n showError(l10n.missing_test_suite_uri, name);\n return;\n }\n\n for (const elem of testables) {\n const tests = elem.dataset.tests.split(/,/gm).map(url => url.trim());\n const testURLs = toTestURLs(tests, conf.testSuiteURI);\n handleDuplicates(testURLs, elem);\n const details = toHTML(testURLs);\n elem.append(details);\n }\n}\n\n/**\n * @param {string[]} tests\n * @param {string} testSuiteURI\n */\nfunction toTestURLs(tests, testSuiteURI) {\n return tests\n .map(test => {\n try {\n return new URL(test, testSuiteURI).href;\n } catch {\n const msg = `Bad URI: ${test}`;\n showWarning(msg, name);\n }\n })\n .filter(href => href);\n}\n\n/**\n * @param {string[]} testURLs\n * @param {HTMLElement} elem\n */\nfunction handleDuplicates(testURLs, elem) {\n const duplicates = testURLs.filter(\n (link, i, self) => self.indexOf(link) !== i\n );\n if (duplicates.length) {\n const msg = `Duplicate tests found`;\n const hint = `To fix, remove duplicates from \"data-tests\": ${duplicates\n .map(url => new URL(url).pathname)\n .join(\", \")}`;\n showWarning(msg, name, { hint, elements: [elem] });\n }\n}\n\n/**\n * @param {string[]} testURLs\n */\nfunction toHTML(testURLs) {\n const uniqueList = [...new Set(testURLs)];\n const details = html`\n <details class=\"respec-tests-details removeOnSave\">\n <summary>tests: ${uniqueList.length}</summary>\n <ul>\n ${uniqueList.map(toListItem)}\n </ul>\n </details>\n `;\n return details;\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\nvar.respec-hl {\n color: var(--color, #000);\n background-color: var(--bg-color);\n box-shadow: 0 0 0px 2px var(--bg-color);\n}\n\n/* highlight colors\n https://github.com/w3c/tr-design/issues/152\n*/\nvar.respec-hl-c1 {\n --bg-color: #f4d200;\n}\n\nvar.respec-hl-c2 {\n --bg-color: #ff87a2;\n}\n\nvar.respec-hl-c3 {\n --bg-color: #96e885;\n}\n\nvar.respec-hl-c4 {\n --bg-color: #3eeed2;\n}\n\nvar.respec-hl-c5 {\n --bg-color: #eacfb6;\n}\n\nvar.respec-hl-c6 {\n --bg-color: #82ddff;\n}\n\nvar.respec-hl-c7 {\n --bg-color: #ffbcf2;\n}\n\n@media print {\n var.respec-hl {\n background: none;\n color: #000;\n box-shadow: unset;\n }\n}\n`;\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport css from \"../styles/var.css.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","/* dfn popup panel that list all local references to a dfn */\n/**\n * TODO: Revert changes due to https://github.com/w3c/respec/pull/2888 when\n * https://github.com/w3c/css-validator/pull/111 is fixed.\n */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\ndfn {\n cursor: pointer;\n}\n\n.dfn-panel {\n position: absolute;\n z-index: 35;\n min-width: 300px;\n max-width: 500px;\n padding: 0.5em 0.75em;\n margin-top: 0.6em;\n font: small Helvetica Neue, sans-serif, Droid Sans Fallback;\n background: #fff;\n color: black;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n}\n/* Triangle/caret */\n.dfn-panel:not(.docked) > .caret {\n position: absolute;\n top: -9px;\n}\n.dfn-panel:not(.docked) > .caret::before,\n.dfn-panel:not(.docked) > .caret::after {\n content: \"\";\n position: absolute;\n border: 10px solid transparent;\n border-top: 0;\n border-bottom: 10px solid #fff;\n top: 0;\n}\n.dfn-panel:not(.docked) > .caret::before {\n border-bottom: 9px solid #a2a9b1;\n}\n\n.dfn-panel * {\n margin: 0;\n}\n\n.dfn-panel b {\n display: block;\n color: #000;\n margin-top: 0.25em;\n}\n\n.dfn-panel ul a[href] {\n color: #333;\n}\n\n.dfn-panel > div {\n display: flex;\n}\n\n.dfn-panel a.self-link {\n font-weight: bold;\n margin-right: auto;\n}\n\n.dfn-panel .marker {\n padding: 0.1em;\n margin-left: 0.5em;\n border-radius: 0.2em;\n text-align: center;\n white-space: nowrap;\n font-size: 90%;\n color: #040b1c;\n}\n\n.dfn-panel .marker.dfn-exported {\n background: #d1edfd;\n box-shadow: 0 0 0 0.125em #1ca5f940;\n}\n.dfn-panel .marker.idl-block {\n background: #8ccbf2;\n box-shadow: 0 0 0 0.125em #0670b161;\n}\n\n.dfn-panel a:not(:hover) {\n text-decoration: none !important;\n border-bottom: none !important;\n}\n\n.dfn-panel a[href]:hover {\n border-bottom-width: 1px;\n}\n\n.dfn-panel ul {\n padding: 0;\n}\n\n.dfn-panel li {\n margin-left: 1em;\n}\n\n.dfn-panel.docked {\n position: fixed;\n left: 0.5em;\n top: unset;\n bottom: 2em;\n margin: 0 auto;\n /* 0.75em from padding (x2), 0.5em from left position, 0.2em border (x2) */\n max-width: calc(100vw - 0.75em * 2 - 0.5em - 0.2em * 2);\n max-height: 30vh;\n overflow: auto;\n}\n`;\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport css from \"../styles/dfn-panel.css.js\";\nimport { fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","/* For assertions in lists containing algorithms */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.assert {\n background: #eee;\n border-left: 0.5em solid #aaa;\n padding: 0.3em;\n}\n`;\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\nimport css from \"../styles/algorithms.css.js\";\n\nexport const name = \"core/algorithms\";\n\nexport function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","test","rtrim","relativeBase","indexOf","str","invert","l","length","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","source","obj","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","key","i","arguments","Object","hasOwnProperty","splitCells","tableRow","count","cells","match","offset","escaped","curr","split","splice","push","trim","findClosingBracket","b","level","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","raw","title","text","type","Tokenizer_1","options","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","slice","join","indentCodeCompensation","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","def","tag","table","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","nextChar","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","lastIndex","Math","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","tokens","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","token","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","body","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parse","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","unshift","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","t","defineProperty","r","a","delete","configurable","o","s","WeakSet","add","m","u","insertBefore","selected","selectedIndex","f","querySelectorAll","y","w","x","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","v","p","g","Array","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","constructor","_wire$","defineProperties","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","isArray","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","concat","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","attribute","values","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","it","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","dispatch","component","setState","idb","_idb","_marked","_pluralize","getIntlData","x_and_y","x_y_and_z","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","array","mapper","docLang","Intl","ListFormat","format","lastComma","and","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","data","runTransforms","flist","funcArgs","methods","meth","showWarning","addId","pfx","txt","noLC","id","normalize","getElementById","nextId","getDfnTitles","titleSet","Set","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","ref","element","closestInformative","closest","isInformative","querySelector","startsWith","illegal","wrapInner","outer","wrapper","parents","selector","parent","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","super","getCanonicalKey","existingKey","find","makeSafeCopy","clone","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","comment","walkTree","nextNode","CaseInsensitiveMap","entries","RespecError","plugin","isWarning","assign","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","subscriptions","topic","from","cb","arg","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","respecVersion","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","head","includeConfig","params","URLSearchParams","search","overrideEntries","filter","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","reindent","lines","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","prepend","Builder","current","tagName","position","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","indentation","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","css","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hash","hasLink","isLegacyFrag","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","zh","defaultLang","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","nl","hasNoHeading","offendingMembers","getOwnPropertyNames","endsWith","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","isRecTrack","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","specStatus","highlightVars","addSectionLinks","privsecSectionRule","licenses","short","geonovumDefaults","doJsonLd","license","logos","alt","height","width","isCCBY","licenseInfo","isBasic","isRegular","computeProps","insertStyle","noReSpecCSS","createStyle","css_name","resourceHints","createResourceHints","favicon","delimiter","separator","toKeyValuePairs","initial-scale","shrink-to-fit","createMetaViewport","styleFile","noToc","attachFixupScript","styles","frag","reduce","nextLink","linkCSS","additions","status_at_publication","resolveGithubPromise","rejectGithubPromise","github","file_a_bug","participate","commit_history","ko","ja","es","ghURL","tempURL","repoURL","org","repo","pathname","branch","issueBase","newProps","edDraftURI","githubToken","githubUser","atRiskBase","otherLinks","pullBase","shortName","otherLink","githubAPI","hostname","normalizedGHObj","apiBase","fullName","normalizedConfig","processResponse","rawData","el","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","include","includeId","response","fetch","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","identifier","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","joined","htmlJoinComma","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","pop","allArgs","SyntaxError","reverse","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","unique","openIdb","biblioDB","isAlias","resolveAlias","TypeError","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","reference","promisesToAdd","flatMap","isInDB","put","close","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","ok","status","json","addAll","resolveRef","entry","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","authors","etAl","publisher","date","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","abbr","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","terms","plurals","size","userDefinedPlurals","uniquePlurals","makeTitle","num","report","number","examples","contains","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","note","handleIssues","ins","ghIssues","getIssueNumber","Number","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","searchParams","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","hasChildNodes","insertAdjacentHTML","makeIssueSectionSummary","issuesAndNotes","issueNumbers","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","container","list_of_figures","fig","img","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","every","decorateTableOfFigures","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","cleanup","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","duplicates","dfnFor","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","idl","first","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","xref","editors","editor","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","res","input","maxAge","Request","cache","cachedResponse","caches","Date","headers","clonedResponse","customHeaders","Headers","expiryDate","now","toISOString","cacheResponse","Response","blob","fetchAndCache","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","prefix","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","span","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","isNaN","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","conformance","processConformance","mimeTypes","rsDocToDataURL","mimeType","validTypes","cloneDoc","insertions","metaViewport","metaCharset","metaGenerator","XMLSerializer","serializeToString","outerHTML","prettify","doctype","encodeURIComponent","save_snapshot","downloadLinks","fileName","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","search_specref","specrefSearchUI","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","fetchBase","workerPromise","workerScript","default","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","namespace","counter","gen","idGenerator","msgIdGenerator","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","missing_test_suite_uri","tests","toListItem","emojiList","testFile","testParts","testFileName","requiresConnectionEmoji","manualPerformEmoji","toTestURLs","testSuiteURI","handleDuplicates","testURLs","uniqueList","testables","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","re","activeClass","outputDoc","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors"],"mappings":"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,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC5f6BkC,GAAU,SAASC,GAAgB,IAAIC,EAAE,GAAG,IAAIA,EAAE5b,QAAQA,QAAQ,MAAMuK,GAAGqR,EAAE5b,QAAQ,SAAS4b,EAAErR,GAAG,IAAI1C,EAAE0C,EAAEsR,eAAeC,EAAEvR,EAAES,eAAeH,EAAEkR,EAAEza,UAAU,OAAOuJ,EAAEmR,OAAO,SAASzR,GAAG,OAAOvI,KAAKd,IAAIqJ,WAAWA,EAAEvI,KAAK4F,IAAIiD,EAAElK,IAAI,SAAS4J,GAAG,OAAOvI,KAAKd,IAAIqJ,GAAGA,EAAEvI,KA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"} \ No newline at end of file diff --git a/builds/respec-highlight.js b/builds/respec-highlight.js new file mode 100644 index 0000000000..ab1be747ac --- /dev/null +++ b/builds/respec-highlight.js @@ -0,0 +1 @@ +var hljs=function(){"use strict";function e(n){return n instanceof Map?n.clear=n.delete=n.set=function(){throw new Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=function(){throw new Error("set is read-only")}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((function(t){var i=n[t];"object"!=typeof i||Object.isFrozen(i)||e(i)})),n}var n=e,t=e;n.default=t;class i{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function a(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}const s=e=>!!e.kind;class o{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=a(e)}openNode(e){if(!s(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){this.buffer+=`<span class="${e}">`}}class l{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{l._collapse(e)}))}}class c extends l{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new o(this,this.options).value()}finalize(){return!0}}function g(e){return e?"string"==typeof e?e:e.source:null}const u=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;const d="[a-zA-Z]\\w*",h="[a-zA-Z_]\\w*",f="\\b\\d+(\\.\\d+)?",b="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",m="\\b(0b[01]+)",p={begin:"\\\\[\\s\\S]",relevance:0},E={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[p]},y={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[p]},v={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},N=function(e,n,t={}){const i=r({className:"comment",begin:e,end:n,contains:[]},t);return i.contains.push(v),i.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),i},w=N("//","$"),x=N("/\\*","\\*/"),_=N("#","$"),R={className:"number",begin:f,relevance:0},O={className:"number",begin:b,relevance:0},A={className:"number",begin:m,relevance:0},k={className:"number",begin:f+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},M={begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[p,{begin:/\[/,end:/\]/,relevance:0,contains:[p]}]}]},T={className:"title",begin:d,relevance:0},S={className:"title",begin:h,relevance:0},I={begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0};var L=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:d,UNDERSCORE_IDENT_RE:h,NUMBER_RE:f,C_NUMBER_RE:b,BINARY_NUMBER_RE:m,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>g(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:p,APOS_STRING_MODE:E,QUOTE_STRING_MODE:y,PHRASAL_WORDS_MODE:v,COMMENT:N,C_LINE_COMMENT_MODE:w,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:_,NUMBER_MODE:R,C_NUMBER_MODE:O,BINARY_NUMBER_MODE:A,CSS_NUMBER_MODE:k,REGEXP_MODE:M,TITLE_MODE:T,UNDERSCORE_TITLE_MODE:S,METHOD_GUARD:I,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}});function C(e,n){"."===e.input[e.index-1]&&n.ignoreMatch()}function D(e,n){n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=C,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function B(e,n){Array.isArray(e.illegal)&&(e.illegal=function(...e){return"("+e.map(e=>g(e)).join("|")+")"}(...e.illegal))}function j(e,n){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function P(e,n){void 0===e.relevance&&(e.relevance=1)}const U=["of","and","for","in","not","or","if","then","parent","list","value"];function z(e,n,t="keyword"){const i={};return"string"==typeof e?a(t,e.split(" ")):Array.isArray(e)?a(t,e):Object.keys(e).forEach((function(t){Object.assign(i,z(e[t],n,t))})),i;function a(e,t){n&&(t=t.map(e=>e.toLowerCase())),t.forEach((function(n){const t=n.split("|");i[t[0]]=[e,H(t[0],t[1])]}))}}function H(e,n){return n?Number(n):function(e){return U.includes(e.toLowerCase())}(e)?0:1}function $(e,{plugins:n}){function t(n,t){return new RegExp(g(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class i{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return new RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=t(function(e,n="|"){let t=0;return e.map(e=>{t+=1;const n=t;let i=g(e),a="";for(;i.length>0;){const e=u.exec(i);if(!e){a+=i;break}a+=i.substring(0,e.index),i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?a+="\\"+String(Number(e[1])+n):(a+=e[0],"("===e[0]&&t++)}return a}).map(e=>`(${e})`).join(n)}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),i=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,i)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new i;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;let t=n.exec(e);if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)}return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&this.considerAll()),t}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=r(e.classNameAliases||{}),function n(i,s){const o=i;if(i.isCompiled)return o;[j].forEach(e=>e(i,s)),e.compilerExtensions.forEach(e=>e(i,s)),i.__beforeBegin=null,[D,B,P].forEach(e=>e(i,s)),i.isCompiled=!0;let l=null;if("object"==typeof i.keywords&&(l=i.keywords.$pattern,delete i.keywords.$pattern),i.keywords&&(i.keywords=z(i.keywords,e.case_insensitive)),i.lexemes&&l)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l=l||i.lexemes||/\w+/,o.keywordPatternRe=t(l,!0),s&&(i.begin||(i.begin=/\B|\b/),o.beginRe=t(i.begin),i.endSameAsBegin&&(i.end=i.begin),i.end||i.endsWithParent||(i.end=/\B|\b/),i.end&&(o.endRe=t(i.end)),o.terminatorEnd=g(i.end)||"",i.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(i.end?"|":"")+s.terminatorEnd)),i.illegal&&(o.illegalRe=t(i.illegal)),i.contains||(i.contains=[]),i.contains=[].concat(...i.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(n){return r(e,{variants:null},n)})));if(e.cachedVariants)return e.cachedVariants;if(G(e))return r(e,{starts:e.starts?r(e.starts):null});if(Object.isFrozen(e))return r(e);return e}("self"===e?i:e)}))),i.contains.forEach((function(e){n(e,o)})),i.starts&&n(i.starts,s),o.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(o),o}(e)}function G(e){return!!e&&(e.endsWithParent||G(e.starts))}function Z(e){const n={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,a(this.code);let n={};return this.autoDetect?(n=e.highlightAuto(this.code),this.detectedLanguage=n.language):(n=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),n.value},autoDetect(){return!this.language||(e=this.autodetect,Boolean(e||""===e));var e},ignoreIllegals:()=>!0},render(e){return e("pre",{},[e("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:n,VuePlugin:{install(e){e.component("highlightjs",n)}}}}const F={"after:highlightElement":({el:e,result:n,text:t})=>{const i=W(e);if(!i.length)return;const r=document.createElement("div");r.innerHTML=n.value,n.value=function(e,n,t){let i=0,r="";const s=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:"start"===n[0].event?e:n:e.length?e:n}function l(e){function n(e){return" "+e.nodeName+'="'+a(e.value)+'"'}r+="<"+K(e)+[].map.call(e.attributes,n).join("")+">"}function c(e){r+="</"+K(e)+">"}function g(e){("start"===e.event?l:c)(e.node)}for(;e.length||n.length;){let n=o();if(r+=a(t.substring(i,n[0].offset)),i=n[0].offset,n===e){s.reverse().forEach(c);do{g(n.splice(0,1)[0]),n=o()}while(n===e&&n.length&&n[0].offset===i);s.reverse().forEach(l)}else"start"===n[0].event?s.push(n[0].node):s.pop(),g(n.splice(0,1)[0])}return r+a(t.substr(i))}(i,W(r),t)}};function K(e){return e.nodeName.toLowerCase()}function W(e){const n=[];return function e(t,i){for(let a=t.firstChild;a;a=a.nextSibling)3===a.nodeType?i+=a.nodeValue.length:1===a.nodeType&&(n.push({event:"start",offset:i,node:a}),i=e(a,i),K(a).match(/br|hr|img|input/)||n.push({event:"stop",offset:i,node:a}));return i}(e,0),n}const X=e=>{console.error(e)},q=(e,...n)=>{console.log("WARN: "+e,...n)},Q=(e,n)=>{console.log(`Deprecated as of ${e}. ${n}`)},V=a,J=r,Y=Symbol("nomatch");var ee=function(e){const t=Object.create(null),a=Object.create(null),r=[];let s=!0;const o=/(^(<[^>]+>|\t|)+|\n)/gm,l="Could not find the language '{}', did you forget to load/include a language module?",g={disableAutodetect:!0,name:"Plain text",contains:[]};let u={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:c};function d(e){return u.noHighlightRe.test(e)}function h(e,n,t,i){let a="",r="";"object"==typeof n?(a=e,t=n.ignoreIllegals,r=n.language,i=void 0):(Q("10.7.0","highlight(lang, code, ...args) has been deprecated."),Q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),r=e,a=n);const s={code:a,language:r};O("before:highlight",s);const o=s.result?s.result:f(s.language,s.code,t,i);return o.code=s.code,O("after:highlight",o),o}function f(e,n,a,o){function c(e,n){const t=N.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function g(){null!=R.subLanguage?function(){if(""===k)return;let e=null;if("string"==typeof R.subLanguage){if(!t[R.subLanguage])return void A.addText(k);e=f(R.subLanguage,k,!0,O[R.subLanguage]),O[R.subLanguage]=e.top}else e=b(k,R.subLanguage.length?R.subLanguage:null);R.relevance>0&&(M+=e.relevance),A.addSublanguage(e.emitter,e.language)}():function(){if(!R.keywords)return void A.addText(k);let e=0;R.keywordPatternRe.lastIndex=0;let n=R.keywordPatternRe.exec(k),t="";for(;n;){t+=k.substring(e,n.index);const i=c(R,n);if(i){const[e,a]=i;if(A.addText(t),t="",M+=a,e.startsWith("_"))t+=n[0];else{const t=N.classNameAliases[e]||e;A.addKeyword(n[0],t)}}else t+=n[0];e=R.keywordPatternRe.lastIndex,n=R.keywordPatternRe.exec(k)}t+=k.substr(e),A.addText(t)}(),k=""}function d(e){return e.className&&A.openNode(N.classNameAliases[e.className]||e.className),R=Object.create(e,{parent:{value:R}}),R}function h(e,n,t){let a=function(e,n){const t=e&&e.exec(n);return t&&0===t.index}(e.endRe,t);if(a){if(e["on:end"]){const t=new i(e);e["on:end"](n,t),t.isMatchIgnored&&(a=!1)}if(a){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return h(e.parent,n,t)}function m(e){return 0===R.matcher.regexIndex?(k+=e[0],1):(I=!0,0)}function p(e){const n=e[0],t=e.rule,a=new i(t),r=[t.__beforeBegin,t["on:begin"]];for(const t of r)if(t&&(t(e,a),a.isMatchIgnored))return m(n);return t&&t.endSameAsBegin&&(t.endRe=new RegExp(n.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),t.skip?k+=n:(t.excludeBegin&&(k+=n),g(),t.returnBegin||t.excludeBegin||(k=n)),d(t),t.returnBegin?0:n.length}function E(e){const t=e[0],i=n.substr(e.index),a=h(R,e,i);if(!a)return Y;const r=R;r.skip?k+=t:(r.returnEnd||r.excludeEnd||(k+=t),g(),r.excludeEnd&&(k=t));do{R.className&&A.closeNode(),R.skip||R.subLanguage||(M+=R.relevance),R=R.parent}while(R!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),d(a.starts)),r.returnEnd?0:t.length}let y={};function v(t,i){const r=i&&i[0];if(k+=t,null==r)return g(),0;if("begin"===y.type&&"end"===i.type&&y.index===i.index&&""===r){if(k+=n.slice(i.index,i.index+1),!s){const n=new Error("0 width match regex");throw n.languageName=e,n.badRule=y.rule,n}return 1}if(y=i,"begin"===i.type)return p(i);if("illegal"===i.type&&!a){const e=new Error('Illegal lexeme "'+r+'" for mode "'+(R.className||"<unnamed>")+'"');throw e.mode=R,e}if("end"===i.type){const e=E(i);if(e!==Y)return e}if("illegal"===i.type&&""===r)return 1;if(S>1e5&&S>3*i.index){throw new Error("potential infinite loop, way more iterations than matches")}return k+=r,r.length}const N=x(e);if(!N)throw X(l.replace("{}",e)),new Error('Unknown language: "'+e+'"');const w=$(N,{plugins:r});let _="",R=o||w;const O={},A=new u.__emitter(u);!function(){const e=[];for(let n=R;n!==N;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>A.openNode(e))}();let k="",M=0,T=0,S=0,I=!1;try{for(R.matcher.considerAll();;){S++,I?I=!1:R.matcher.considerAll(),R.matcher.lastIndex=T;const e=R.matcher.exec(n);if(!e)break;const t=v(n.substring(T,e.index),e);T=e.index+t}return v(n.substr(T)),A.closeAllNodes(),A.finalize(),_=A.toHTML(),{relevance:Math.floor(M),value:_,language:e,illegal:!1,emitter:A,top:R}}catch(t){if(t.message&&t.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:t.message,context:n.slice(T-100,T+100),mode:t.mode},sofar:_,relevance:0,value:V(n),emitter:A};if(s)return{illegal:!1,relevance:0,value:V(n),emitter:A,language:e,top:R,errorRaised:t};throw t}}function b(e,n){n=n||u.languages||Object.keys(t);const i=function(e){const n={relevance:0,emitter:new u.__emitter(u),value:V(e),illegal:!1,top:g};return n.emitter.addText(e),n}(e),a=n.filter(x).filter(R).map(n=>f(n,e,!1));a.unshift(i);const r=a.sort((e,n)=>{if(e.relevance!==n.relevance)return n.relevance-e.relevance;if(e.language&&n.language){if(x(e.language).supersetOf===n.language)return 1;if(x(n.language).supersetOf===e.language)return-1}return 0}),[s,o]=r,l=s;return l.second_best=o,l}const m={"before:highlightElement":({el:e})=>{u.useBR&&(e.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ /]*>/g,"\n"))},"after:highlightElement":({result:e})=>{u.useBR&&(e.value=e.value.replace(/\n/g,"<br>"))}},p=/^(<[^>]+>|\t)+/gm,E={"after:highlightElement":({result:e})=>{u.tabReplace&&(e.value=e.value.replace(p,e=>e.replace(/\t/g,u.tabReplace)))}};function y(e){let n=null;const t=function(e){let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=u.languageDetectRe.exec(n);if(t){const n=x(t[1]);return n||(q(l.replace("{}",t[1])),q("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>d(e)||x(e))}(e);if(d(t))return;O("before:highlightElement",{el:e,language:t}),n=e;const i=n.textContent,r=t?h(i,{language:t,ignoreIllegals:!0}):b(i);O("after:highlightElement",{el:e,result:r,text:i}),e.innerHTML=r.value,function(e,n,t){const i=n?a[n]:t;e.classList.add("hljs"),i&&e.classList.add(i)}(e,t,r.language),e.result={language:r.language,re:r.relevance,relavance:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance,relavance:r.second_best.relevance})}const v=()=>{if(v.called)return;v.called=!0,Q("10.6.0","initHighlighting() is deprecated. Use highlightAll() instead.");document.querySelectorAll("pre code").forEach(y)};let N=!1;function w(){if("loading"===document.readyState)return void(N=!0);document.querySelectorAll("pre code").forEach(y)}function x(e){return e=(e||"").toLowerCase(),t[e]||t[a[e]]}function _(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{a[e.toLowerCase()]=n})}function R(e){const n=x(e);return n&&!n.disableAutodetect}function O(e,n){const t=e;r.forEach((function(e){e[t]&&e[t](n)}))}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(function(){N&&w()}),!1),Object.assign(e,{highlight:h,highlightAuto:b,highlightAll:w,fixMarkup:function(e){return Q("10.2.0","fixMarkup will be removed entirely in v11.0"),Q("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),n=e,u.tabReplace||u.useBR?n.replace(o,e=>"\n"===e?u.useBR?"<br>":e:u.tabReplace?e.replace(/\t/g,u.tabReplace):e):n;var n},highlightElement:y,highlightBlock:function(e){return Q("10.7.0","highlightBlock will be removed entirely in v12.0"),Q("10.7.0","Please use highlightElement now."),y(e)},configure:function(e){e.useBR&&(Q("10.3.0","'useBR' will be removed entirely in v11.0"),Q("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),u=J(u,e)},initHighlighting:v,initHighlightingOnLoad:function(){Q("10.6.0","initHighlightingOnLoad() is deprecated. Use highlightAll() instead."),N=!0},registerLanguage:function(n,i){let a=null;try{a=i(e)}catch(e){if(X("Language definition for '{}' could not be registered.".replace("{}",n)),!s)throw e;X(e),a=g}a.name||(a.name=n),t[n]=a,a.rawDefinition=i.bind(null,e),a.aliases&&_(a.aliases,{languageName:n})},unregisterLanguage:function(e){delete t[e];for(const n of Object.keys(a))a[n]===e&&delete a[n]},listLanguages:function(){return Object.keys(t)},getLanguage:x,registerAliases:_,requireLanguage:function(e){Q("10.4.0","requireLanguage will be removed entirely in v11."),Q("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const n=x(e);if(n)return n;throw new Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:R,inherit:J,addPlugin:function(e){!function(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{e["before:highlightBlock"](Object.assign({block:n.el},n))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{e["after:highlightBlock"](Object.assign({block:n.el},n))})}(e),r.push(e)},vuePlugin:Z(e).VuePlugin}),e.debugMode=function(){s=!1},e.safeMode=function(){s=!0},e.versionString="10.7.1";for(const e in L)"object"==typeof L[e]&&n(L[e]);return Object.assign(e,L),e.addPlugin(m),e.addPlugin(F),e.addPlugin(E),e}({});function ne(...e){return e.map(e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n}).join("")}var te=function(e){const n={ruleDeclaration:/^[a-zA-Z][a-zA-Z0-9-]*/,unexpectedChars:/[!@#$^&',?+~`|:]/},t=e.COMMENT(/;/,/$/),i={className:"attribute",begin:ne(n.ruleDeclaration,/(?=\s*=)/)};return{name:"Augmented Backus-Naur Form",illegal:n.unexpectedChars,keywords:["ALPHA","BIT","CHAR","CR","CRLF","CTL","DIGIT","DQUOTE","HEXDIG","HTAB","LF","LWSP","OCTET","SP","VCHAR","WSP"],contains:[i,t,{className:"symbol",begin:/%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/},{className:"symbol",begin:/%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/},{className:"symbol",begin:/%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/},{className:"symbol",begin:/%[si]/},e.QUOTE_STRING_MODE,e.NUMBER_MODE]}};const ie=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],ae=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],re=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],se=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],oe=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-variant","font-variant-ligatures","font-variation-settings","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","src","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"].reverse();function le(e){return function(...e){return e.map(e=>function(e){return e?"string"==typeof e?e:e.source:null}(e)).join("")}("(?=",e,")")}var ce=function(e){const n=(e=>({IMPORTANT:{className:"meta",begin:"!important"},HEXCOLOR:{className:"number",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})"},ATTRIBUTE_SELECTOR_MODE:{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}}))(e),t=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[e.C_BLOCK_COMMENT_MODE,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/},e.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+re.join("|")+")"},{begin:"::("+se.join("|")+")"}]},{className:"attribute",begin:"\\b("+oe.join("|")+")\\b"},{begin:":",end:"[;}]",contains:[n.HEXCOLOR,n.IMPORTANT,e.CSS_NUMBER_MODE,...t,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},{className:"built_in",begin:/[\w-]+(?=\()/}]},{begin:le(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:ae.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...t,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+ie.join("|")+")\\b"}]}};function ge(...e){return e.map(e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n}).join("")}var ue=function(e){const n="HTTP/(2|1\\.[01])",t={className:"attribute",begin:ge("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},i=[t,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+n+" \\d{3})",end:/$/,contains:[{className:"meta",begin:n},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},{begin:"(?=^[A-Z]+ (.*?) "+n+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:n},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},e.inherit(t,{relevance:0})]}};const de="[A-Za-z$_][0-9A-Za-z$_]*",he=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],fe=["true","false","null","undefined","NaN","Infinity"],be=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function me(e){return pe("(?=",e,")")}function pe(...e){return e.map(e=>{return(n=e)?"string"==typeof n?n:n.source:null;var n}).join("")}var Ee=function(e){const n=de,t="<>",i="</>",a={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{const t=e[0].length+e.index,i=e.input[t];"<"!==i?">"===i&&(((e,{after:n})=>{const t="</"+e[0].slice(1);return-1!==e.input.indexOf(t,n)})(e,{after:t})||n.ignoreMatch()):n.ignoreMatch()}},r={$pattern:de,keyword:he,literal:fe,built_in:be},s="\\.([0-9](_?[0-9])*)",o="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",l={className:"number",variants:[{begin:`(\\b(${o})((${s})|\\.)?|(${s}))[eE][+-]?([0-9](_?[0-9])*)\\b`},{begin:`\\b(${o})\\b((${s})\\b|\\.)?|(${s})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},c={className:"subst",begin:"\\$\\{",end:"\\}",keywords:r,contains:[]},g={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,c],subLanguage:"xml"}},u={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,c],subLanguage:"css"}},d={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,c]},h={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:n+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},f=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,g,u,d,l,e.REGEXP_MODE];c.contains=f.concat({begin:/\{/,end:/\}/,keywords:r,contains:["self"].concat(f)});const b=[].concat(h,c.contains),m=b.concat([{begin:/\(/,end:/\)/,keywords:r,contains:["self"].concat(b)}]),p={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,contains:m};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:r,exports:{PARAMS_CONTAINS:m},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,g,u,d,h,l,{begin:pe(/[{,\n]\s*/,me(pe(/(((\/\/.*$)|(\/\*(\*[^/]|[^*])*\*\/))\s*)*/,n+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:n+me("\\s*:"),relevance:0}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[h,e.REGEXP_MODE,{className:"function",begin:"(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:r,contains:m}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:t,end:i},{begin:a.begin,"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:r,contains:["self",e.inherit(e.TITLE_MODE,{begin:n}),p],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[p,e.inherit(e.TITLE_MODE,{begin:n})]},{variants:[{begin:"\\."+n},{begin:"\\$"+n}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:n}),"self",p]},{begin:"(get|set)\\s+(?="+n+"\\()",end:/\{/,keywords:"get set",contains:[e.inherit(e.TITLE_MODE,{begin:n}),{begin:/\(\)/},p]},{begin:/\$[(.]/}]}};var ye=function(e){const n={literal:"true false null"},t=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],i=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],a={end:",",endsWithParent:!0,excludeEnd:!0,contains:i,keywords:n},r={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(a,{begin:/:/})].concat(t),illegal:"\\S"},s={begin:"\\[",end:"\\]",contains:[e.inherit(a)],illegal:"\\S"};return i.push(r,s),t.forEach((function(e){i.push(e)})),{name:"JSON",contains:i,keywords:n,illegal:"\\S"}};function ve(e){return e?"string"==typeof e?e:e.source:null}function Ne(e){return we("(?=",e,")")}function we(...e){return e.map(e=>ve(e)).join("")}function xe(...e){return"("+e.map(e=>ve(e)).join("|")+")"}var _e=function(e){const n=we(/[A-Z_]/,we("(",/[A-Z0-9_.-]*:/,")?"),/[A-Z0-9_.-]*/),t={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},a=e.inherit(i,{begin:/\(/,end:/\)/}),r=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),s=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),o={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:/[A-Za-z0-9._:-]+/,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[t]},{begin:/'/,end:/'/,contains:[t]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[i,s,r,a,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[i,a,s,r]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[o],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[o],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:we(/</,Ne(we(n,xe(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:o}]},{className:"tag",begin:we(/<\//,Ne(we(n,/>/))),contains:[{className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}};return ee.configure({tabReplace:" ",languages:["abnf","css","http","javascript","json","xml"]}),ee.registerLanguage("abnf",te),ee.registerLanguage("css",ce),ee.registerLanguage("http",ue),ee.registerLanguage("javascript",Ee),ee.registerLanguage("json",ye),ee.registerLanguage("xml",_e),ee}(); diff --git a/builds/respec-w3c.js b/builds/respec-w3c.js index b805ae3246..ed5954eeaf 100644 --- a/builds/respec-w3c.js +++ b/builds/respec-w3c.js @@ -1,40 +1,94 @@ -window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return On})),Promise.resolve().then((function(){return gr})),Promise.resolve().then((function(){return br})),Promise.resolve().then((function(){return i})),Promise.resolve().then((function(){return kr})),Promise.resolve().then((function(){return is})),Promise.resolve().then((function(){return cs})),Promise.resolve().then((function(){return ds})),Promise.resolve().then((function(){return fs})),Promise.resolve().then((function(){return ws})),Promise.resolve().then((function(){return xs})),Promise.resolve().then((function(){return Xn})),Promise.resolve().then((function(){return Un})),Promise.resolve().then((function(){return Ss})),Promise.resolve().then((function(){return Rs})),Promise.resolve().then((function(){return ao})),Promise.resolve().then((function(){return Ps})),Promise.resolve().then((function(){return Ls})),Promise.resolve().then((function(){return Ns})),Promise.resolve().then((function(){return Ui})),Promise.resolve().then((function(){return Bi})),Promise.resolve().then((function(){return Vi})),Promise.resolve().then((function(){return Zi})),Promise.resolve().then((function(){return Xi})),Promise.resolve().then((function(){return ra})),Promise.resolve().then((function(){return ca})),Promise.resolve().then((function(){return da})),Promise.resolve().then((function(){return La})),Promise.resolve().then((function(){return ai})),Promise.resolve().then((function(){return Ka})),Promise.resolve().then((function(){return dc})),Promise.resolve().then((function(){return Fa})),Promise.resolve().then((function(){return pc})),Promise.resolve().then((function(){return vi})),Promise.resolve().then((function(){return _c})),Promise.resolve().then((function(){return Cc})),Promise.resolve().then((function(){return Ec})),Promise.resolve().then((function(){return jc})),Promise.resolve().then((function(){return zc})),Promise.resolve().then((function(){return Wc})),Promise.resolve().then((function(){return qc})),Promise.resolve().then((function(){return Jc})),Promise.resolve().then((function(){return il})),Promise.resolve().then((function(){return ml})),Promise.resolve().then((function(){return vl})),Promise.resolve().then((function(){return Cl})),Promise.resolve().then((function(){return El})),Promise.resolve().then((function(){return Pl})),Promise.resolve().then((function(){return Ol})),Promise.resolve().then((function(){return va})),Promise.resolve().then((function(){return Bl})),Promise.resolve().then((function(){return Yl})),Promise.resolve().then((function(){return tu})),Promise.resolve().then((function(){return ru})),Promise.resolve().then((function(){return su})),Promise.resolve().then((function(){return au})),Promise.resolve().then((function(){return hu})),Promise.resolve().then((function(){return wu})),Promise.resolve().then((function(){return Ro})),Promise.resolve().then((function(){return $u}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},s=r.lang;var i=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:s,run:function(e){e.l10n=o[s]||o.en}});let a,c;const l=new WeakMap,u=new WeakMap,d=new WeakMap,p=new WeakMap,f=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(c||(c=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(y(this),t),b(l.get(this))}:function(...t){return b(e.apply(y(this),t))}:function(t,...n){const r=e.call(y(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",s),e.removeEventListener("abort",s)},o=()=>{t(),r()},s=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",s),e.addEventListener("abort",s)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",s)},o=()=>{t(b(e.result)),r()},s=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",s)});return t.then(t=>{t instanceof IDBCursor&&l.set(t,e)}).catch(()=>{}),f.set(t,e),t}(e);if(p.has(e))return p.get(e);const t=g(e);return t!==e&&(p.set(e,t),f.set(t,e)),t}const y=e=>f.get(e);const w=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!w.includes(n))return;const s=async function(e,...t){const s=this.transaction(e,o?"readwrite":"readonly");let i=s.store;return r&&(i=i.index(t.shift())),(await Promise.all([i[n](...t),o&&s.done]))[0]};return k.set(t,s),s}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:s}={}){const i=indexedDB.open(e,t),a=b(i);return r&&i.addEventListener("upgradeneeded",e=>{r(b(i.result),e.oldVersion,e.newVersion,b(i.transaction))}),n&&i.addEventListener("blocked",()=>n()),a.then(e=>{s&&e.addEventListener("close",()=>s()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:y,wrap:b});function _(e,t,n,r,o,{level:s="error",autofix:i,ruleName:a}={}){function c(n){return n>0?e.slice(t,t+n):e.slice(Math.max(t+n,0),t)}function l(n,{precedes:r}={}){const o=n.map(e=>e.trivia+e.value).join(""),s=e[t];return"eof"===s.type?o:r?o+s.trivia:o.slice(s.trivia.length)}const u="eof"!==e[t].type?e[t].line:e.length>1?e[t-1].line:1,d=function(e){const t=e.split("\n");return t[t.length-1]}(l(c(-5),{precedes:!0})),p=c(5),f=l(p),h=d+f.split("\n")[0]+"\n"+(" ".repeat(d.length)+"^"),m="Syntax"===o?"since":"inside",g=`${o} error at line ${u}${e.name?" in "+e.name:""}${n&&n.name?`, ${m} \`${n.partial?"partial ":""}${function(e){const t=[e];for(;e&&e.parent;){const{parent:n}=e;t.unshift(n),e=n}return t.map(e=>function(e,t){let n=e;return t&&(n+=" "+t),n}(e.type,e.name)).join(" -> ")}(n)}\``:""}:\n${h}`;return{message:`${g} ${r}`,bareMessage:r,context:g,line:u,sourceName:e.name,level:s,ruleName:a,autofix:i,input:f,tokens:p}}function S(e,t,n,r){return _(e,t,n,r,"Syntax")}function C(e,t,n,r,o={}){return o.ruleName=n,_(t.source,e.index,t,r,"Validation",o)}class E{constructor({source:e,tokens:t}){Object.defineProperties(this,{source:{value:e},tokens:{value:t,writable:!0},parent:{value:null,writable:!0},this:{value:this}})}toJSON(){const e={type:void 0,name:void 0,inheritance:void 0};let t=this;for(;t!==Object.prototype;){const n=Object.getOwnPropertyDescriptors(t);for(const[t,r]of Object.entries(n))(r.enumerable||r.get)&&(e[t]=this[t]);t=Object.getPrototypeOf(t)}return e}}function R(e,t,{useNullableInner:n}={}){if(!e.union){const r=t.unique.get(e.idlType);if(!r)return;if("typedef"===r.type){const{typedefIncludesDictionary:n}=t.cache;if(n.has(r))return n.get(r);t.cache.typedefIncludesDictionary.set(r,void 0);const o=R(r.idlType,t);if(t.cache.typedefIncludesDictionary.set(r,o),o)return{reference:e,dictionary:o.dictionary}}if("dictionary"===r.type&&(n||!e.nullable))return{reference:e,dictionary:r}}for(const n of e.subtype){const e=R(n,t);if(e)return n.union?e:{reference:n,dictionary:e.dictionary}}}function T(e,t){if(t.cache.dictionaryIncludesRequiredField.has(e))return t.cache.dictionaryIncludesRequiredField.get(e);t.cache.dictionaryIncludesRequiredField.set(e,void 0);let n=e.members.some(e=>e.required);if(!n&&e.inheritance){const r=t.unique.get(e.inheritance);r?T(r,t)&&(n=!0):n=!0}return t.cache.dictionaryIncludesRequiredField.set(e,n),n}class A extends Array{constructor({source:e,tokens:t}){super(),Object.defineProperties(this,{source:{value:e},tokens:{value:t},parent:{value:null,writable:!0}})}}class P extends E{static parser(e,t){return()=>{const n=e.consume(t);if(n)return new P({source:e.source,tokens:{value:n}})}}get value(){return V(this.tokens.value.value)}}function L(e,t){return Z(e,{parser:P.parser(e,t),listName:t+" list"})}const I=["identifier","decimal","integer","string"],D=new Map([...["NoInterfaceObject","LenientSetter","LenientThis","TreatNonObjectAsNull","Unforgeable"].map(e=>[e,"Legacy"+e]),["NamedConstructor","LegacyFactoryFunction"],["OverrideBuiltins","LegacyOverrideBuiltIns"],["TreatNullAs","LegacyNullToEmptyString"]]);function N(e){for(const t of I){const n=L(e,t);if(n.length)return n}e.error("Expected identifiers, strings, decimals, or integers but none found")}class j extends E{static parse(e){const t={assign:e.consume("=")},n=se(new j({source:e.source,tokens:t}));return t.assign&&(t.secondaryName=e.consume(...I)),t.open=e.consume("("),t.open?(n.list=n.rhsIsList?N(e):X(e),t.close=e.consume(")")||e.error("Unexpected token in extended attribute argument list")):n.hasRhs&&!t.secondaryName&&e.error("No right hand side to extended attribute assignment"),n.this}get rhsIsList(){return this.tokens.assign&&!this.tokens.secondaryName}get rhsType(){return this.rhsIsList?this.list[0].tokens.value.type+"-list":this.tokens.secondaryName?this.tokens.secondaryName.type:null}}class O extends E{static parse(e){const t=e.consume("identifier");if(t)return new O({source:e.source,tokens:{name:t},params:j.parse(e)})}constructor({source:e,tokens:t,params:n}){super({source:e,tokens:t}),n.parent=this,Object.defineProperty(this,"params",{value:n})}get type(){return"extended-attribute"}get name(){return this.tokens.name.value}get rhs(){const{rhsType:e,tokens:t,list:n}=this.params;if(!e)return null;return{type:e,value:this.params.rhsIsList?n:V(t.secondaryName.value)}}get arguments(){const{rhsIsList:e,list:t}=this.params;return!t||e?[]:t}*validate(e){const{name:t}=this;if("LegacyNoInterfaceObject"===t){const e="`[LegacyNoInterfaceObject]` extended attribute is an undesirable feature that may be removed from Web IDL in the future. Refer to the [relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more information.";yield C(this.tokens.name,this,"no-nointerfaceobject",e,{level:"warning"})}else if(D.has(t)){const e=`\`[${t}]\` extended attribute is a legacy feature that is now renamed to \`[${D.get(t)}]\`. Refer to the [relevant upstream PR](https://github.com/heycam/webidl/pull/870) for more information.`;yield C(this.tokens.name,this,"renamed-legacy",e,{level:"warning",autofix:(n=this,()=>{const{name:e}=n;n.tokens.name.value=D.get(e),"TreatNullAs"===e&&(n.params.tokens={})})})}var n;for(const t of this.arguments)yield*t.validate(e)}}class z extends A{static parse(e){const t={};if(t.open=e.consume("["),!t.open)return new z({});const n=new z({source:e.source,tokens:t});return n.push(...Z(e,{parser:O.parse,listName:"extended attribute"})),t.close=e.consume("]")||e.error("Unexpected closing token of extended attribute"),n.length||e.error("Found an empty extended attribute"),e.probe("[")&&e.error("Illegal double extended attribute lists, consider merging them"),n}*validate(e){for(const t of this)yield*t.validate(e)}}function W(e,t){const n=e.consume("?");n&&(t.tokens.nullable=n),e.probe("?")&&e.error("Can't nullable more than once")}function M(e,t){let n=function(e,t){const n=e.consume("FrozenArray","ObservableArray","Promise","sequence","record");if(!n)return;const r=se(new U({source:e.source,tokens:{base:n}}));switch(r.tokens.open=e.consume("<")||e.error("No opening bracket after "+n.type),n.type){case"Promise":{e.probe("[")&&e.error("Promise type cannot have extended attribute");const n=ee(e,t)||e.error("Missing Promise subtype");r.subtype.push(n);break}case"sequence":case"FrozenArray":case"ObservableArray":{const o=Q(e,t)||e.error(`Missing ${n.type} subtype`);r.subtype.push(o);break}case"record":{e.probe("[")&&e.error("Record key cannot have extended attribute");const n=e.consume(...ce)||e.error("Record key must be one of: "+ce.join(", ")),o=new U({source:e.source,tokens:{base:n}});o.tokens.separator=e.consume(",")||e.error("Missing comma after record key type"),o.type=t;const s=Q(e,t)||e.error("Error parsing generic type record");r.subtype.push(o,s);break}}return r.idlType||e.error("Error parsing generic type "+n.type),r.tokens.close=e.consume(">")||e.error("Missing closing bracket after "+n.type),r.this}(e,t)||K(e);if(!n){const t=e.consume("identifier",...ce,...ae);if(!t)return;n=new U({source:e.source,tokens:{base:t}}),e.probe("<")&&e.error("Unsupported generic type "+t.value)}return"Promise"===n.generic&&e.probe("?")&&e.error("Promise type cannot be nullable"),n.type=t||null,W(e,n),n.nullable&&"any"===n.idlType&&e.error("Type `any` cannot be made nullable"),n}class U extends E{static parse(e,t){return M(e,t)||function(e,t){const n={};if(n.open=e.consume("("),!n.open)return;const r=se(new U({source:e.source,tokens:n}));for(r.type=t||null;;){const t=Q(e)||e.error("No type after open parenthesis or 'or' in union type");"any"===t.idlType&&e.error("Type `any` cannot be included in a union type"),"Promise"===t.generic&&e.error("Type `Promise` cannot be included in a union type"),r.subtype.push(t);const n=e.consume("or");if(!n)break;t.tokens.separator=n}return r.idlType.length<2&&e.error("At least two types are expected in a union type but found less"),n.close=e.consume(")")||e.error("Unterminated union type"),W(e,r),r.this}(e,t)}constructor({source:e,tokens:t}){super({source:e,tokens:t}),Object.defineProperty(this,"subtype",{value:[],writable:!0}),this.extAttrs=new z({})}get generic(){return this.subtype.length&&this.tokens.base?this.tokens.base.value:""}get nullable(){return Boolean(this.tokens.nullable)}get union(){return Boolean(this.subtype.length)&&!this.tokens.base}get idlType(){if(this.subtype.length)return this.subtype;return V([this.tokens.prefix,this.tokens.base,this.tokens.postfix].filter(e=>e).map(e=>e.value).join(" "))}*validate(e){if(yield*this.extAttrs.validate(e),"void"===this.idlType){const e="`void` is now replaced by `undefined`. Refer to the [relevant GitHub issue](https://github.com/heycam/webidl/issues/60) for more information.";yield C(this.tokens.base,this,"replace-void",e,{autofix:(t=this,()=>{t.tokens.base.value="undefined"})})}var t;const n=!this.union&&e.unique.get(this.idlType),r=this.union?this:n&&"typedef"===n.type?n.idlType:void 0;if(r&&this.nullable){const{reference:t}=R(r,e)||{};if(t){const e=(this.union?t:this).tokens.base,n="Nullable union cannot include a dictionary type.";yield C(e,this,"no-nullable-union-dict",n)}}else for(const t of this.subtype)yield*t.validate(e)}}class F extends E{static parse(e){const t=e.consume("=");if(!t)return null;const n=Y(e)||e.consume("string","null","[","{")||e.error("No value for default"),r=[n];if("["===n.type){const t=e.consume("]")||e.error("Default sequence value must be empty");r.push(t)}else if("{"===n.type){const t=e.consume("}")||e.error("Default dictionary value must be empty");r.push(t)}return new F({source:e.source,tokens:{assign:t},expression:r})}constructor({source:e,tokens:t,expression:n}){super({source:e,tokens:t}),n.parent=this,Object.defineProperty(this,"expression",{value:n})}get type(){return J(this.expression[0]).type}get value(){return J(this.expression[0]).value}get negative(){return J(this.expression[0]).negative}}class q extends E{static parse(e){const t=e.position,n={},r=se(new q({source:e.source,tokens:n}));return r.extAttrs=z.parse(e),n.optional=e.consume("optional"),r.idlType=Q(e,"argument-type"),r.idlType?(n.optional||(n.variadic=e.consume("...")),n.name=e.consume("identifier",...le),n.name?(r.default=n.optional?F.parse(e):null,r.this):e.unconsume(t)):e.unconsume(t)}get type(){return"argument"}get optional(){return!!this.tokens.optional}get variadic(){return!!this.tokens.variadic}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.idlType.validate(e);const t=R(this.idlType,e,{useNullableInner:!0});if(t)if(this.idlType.nullable){const e="Dictionary arguments cannot be nullable.";yield C(this.tokens.name,this,"no-nullable-dict-arg",e)}else if(this.optional){if(!this.default){const e="Optional dictionary arguments must have a default value of `{}`.";yield C(this.tokens.name,this,"dict-arg-default",e,{autofix:B(this)})}}else if(this.parent&&!T(t.dictionary,e)&&function(e){const t=e.parent.arguments||e.parent.list,n=t.indexOf(e);return!t.slice(n+1).some(e=>!e.optional)}(this)){const e="Dictionary argument must be optional if it has no required fields";yield C(this.tokens.name,this,"dict-arg-optional",e,{autofix:(n=this,()=>{const e=oe(n.idlType);n.tokens.optional={type:"optional",value:"optional",trivia:e.trivia},e.trivia=" ",B(n)()})})}var n}}function B(e){return()=>{e.default=F.parse(new fe(" = {}"))}}class H extends E{static parse(e,{special:t,regular:n}={}){const r={special:t},o=se(new H({source:e.source,tokens:r}));return t&&"stringifier"===t.value&&(r.termination=e.consume(";"),r.termination)?(o.arguments=[],o):(t||n||(r.special=e.consume("getter","setter","deleter")),o.idlType=ee(e)||e.error("Missing return type"),r.name=e.consume("identifier","includes"),r.open=e.consume("(")||e.error("Invalid operation"),o.arguments=X(e),r.close=e.consume(")")||e.error("Unterminated operation"),r.termination=e.consume(";")||e.error("Unterminated operation, expected `;`"),o.this)}get type(){return"operation"}get name(){const{name:e}=this.tokens;return e?V(e.value):""}get special(){return this.tokens.special?this.tokens.special.value:""}*validate(e){if(!this.name&&["","static"].includes(this.special)){const e="Regular or static operations must have both a return type and an identifier.";yield C(this.tokens.open,this,"incomplete-op",e)}this.idlType&&(yield*this.idlType.validate(e));for(const t of this.arguments)yield*t.validate(e)}}class G extends E{static parse(e,{special:t,noInherit:n=!1,readonly:r=!1}={}){const o=e.position,s={special:t},i=se(new G({source:e.source,tokens:s}));if(t||n||(s.special=e.consume("inherit")),"inherit"===i.special&&e.probe("readonly")&&e.error("Inherited attributes cannot be read-only"),s.readonly=e.consume("readonly"),r&&!s.readonly&&e.probe("attribute")&&e.error("Attributes must be readonly in this context"),s.base=e.consume("attribute"),s.base){switch(i.idlType=Q(e,"attribute-type")||e.error("Attribute lacks a type"),i.idlType.generic){case"sequence":case"record":e.error(`Attributes cannot accept ${i.idlType.generic} types`)}return s.name=e.consume("identifier","async","required")||e.error("Attribute lacks a name"),s.termination=e.consume(";")||e.error("Unterminated attribute, expected `;`"),i.this}e.unconsume(o)}get type(){return"attribute"}get special(){return this.tokens.special?this.tokens.special.value:""}get readonly(){return!!this.tokens.readonly}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.extAttrs.validate(e),yield*this.idlType.validate(e)}}function V(e){return e.startsWith("_")?e.slice(1):e}function Z(e,{parser:t,allowDangler:n,listName:r="list"}){const o=t(e);if(!o)return[];o.tokens.separator=e.consume(",");const s=[o];for(;o.tokens.separator;){const o=t(e);if(!o){n||e.error("Trailing comma in "+r);break}if(o.tokens.separator=e.consume(","),s.push(o),!o.tokens.separator)break}return s}function Y(e){return e.consume("true","false","Infinity","-Infinity","NaN","decimal","integer")}function J({type:e,value:t}){switch(e){case"true":case"false":return{type:"boolean",value:"true"===e};case"Infinity":case"-Infinity":return{type:"Infinity",negative:e.startsWith("-")};case"[":return{type:"sequence",value:[]};case"{":return{type:"dictionary"};case"decimal":case"integer":return{type:"number",value:t};case"string":return{type:"string",value:t.slice(1,-1)};default:return{type:e}}}function K(e){const{source:t}=e,n=function(){const n=e.consume("unsigned"),r=e.consume("short","long");if(r){const o=e.consume("long");return new U({source:t,tokens:{prefix:n,base:r,postfix:o}})}n&&e.error("Failed to parse integer type")}()||function(){const n=e.consume("unrestricted"),r=e.consume("float","double");if(r)return new U({source:t,tokens:{prefix:n,base:r}});n&&e.error("Failed to parse float type")}();if(n)return n;const r=e.consume("bigint","boolean","byte","octet","undefined");return r?new U({source:t,tokens:{base:r}}):void 0}function X(e){return Z(e,{parser:q.parse,listName:"arguments list"})}function Q(e,t){const n=z.parse(e),r=U.parse(e,t);return r&&(se(r).extAttrs=n),r}function ee(e,t){const n=U.parse(e,t||"return-type");if(n)return n;const r=e.consume("void");if(r){const t=new U({source:e.source,tokens:{base:r}});return t.type="return-type",t}}function te(e){const t=e.consume("stringifier");if(!t)return;return G.parse(e,{special:t})||H.parse(e,{special:t})||e.error("Unterminated stringifier")}function ne(e){const t=e.split("\n");if(t.length){const e=t[t.length-1].match(/^\s+/);if(e)return e[0]}return""}function re(e){return()=>{if(e.extAttrs.length){const t=new fe("Exposed=Window,"),n=O.parse(t);n.tokens.separator=t.consume(",");const r=e.extAttrs[0];/^\s/.test(r.tokens.name.trivia)||(r.tokens.name.trivia=" "+r.tokens.name.trivia),e.extAttrs.unshift(n)}else{se(e).extAttrs=z.parse(new fe("[Exposed=Window]"));const t=e.tokens.base.trivia;e.extAttrs.tokens.open.trivia=t,e.tokens.base.trivia="\n"+ne(t)}}}function oe(e){if(e.extAttrs.length)return e.extAttrs.tokens.open;if("operation"===e.type&&!e.special)return oe(e.idlType);return Object.values(e.tokens).sort((e,t)=>e.index-t.index)[0]}function se(e,t){return t||(t=e),e?new Proxy(e,{get(e,t){const n=e[t];return Array.isArray(n)?se(n,e):n},set(e,n,r){if(e[n]=r,!r)return!0;if(Array.isArray(r))for(const e of r)void 0!==e.parent&&(e.parent=t);else void 0!==r.parent&&(r.parent=t);return!0}}):e}const ie={decimal:/-?(?=[0-9]*\.|[0-9]+[eE])(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/y,integer:/-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/y,identifier:/[_-]?[A-Za-z][0-9A-Z_a-z-]*/y,string:/"[^"]*"/y,whitespace:/[\t\n\r ]+/y,comment:/((\/(\/.*|\*([^*]|\*[^/])*\*\/)[\t\n\r ]*)+)/y,other:/[^\t\n\r 0-9A-Za-z]/y},ae=["ArrayBuffer","DataView","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","Uint8ClampedArray","Float32Array","Float64Array","any","object","symbol"],ce=["ByteString","DOMString","USVString"],le=["async","attribute","callback","const","constructor","deleter","dictionary","enum","getter","includes","inherit","interface","iterable","maplike","namespace","partial","required","setlike","setter","static","stringifier","typedef","unrestricted"],ue=["-Infinity","FrozenArray","Infinity","NaN","ObservableArray","Promise","bigint","boolean","byte","double","false","float","long","mixin","null","octet","optional","or","readonly","record","sequence","short","true","undefined","unsigned","void"].concat(le,ce,ae),de=["(",")",",","...",":",";","<","=",">","?","[","]","{","}"],pe=["_constructor","toString","_toString"];class fe{constructor(e){this.source=function(e){const t=[];let n=0,r="",o=1,s=0;for(;n<e.length;){const a=e.charAt(n);let c=-1;if(/[\t\n\r ]/.test(a)?c=i("whitespace",{noFlushTrivia:!0}):"/"===a&&(c=i("comment",{noFlushTrivia:!0})),-1!==c){const e=t.pop().value;o+=(e.match(/\n/g)||[]).length,r+=e,s-=1}else if(/[-0-9.A-Z_a-z]/.test(a)){if(c=i("decimal"),-1===c&&(c=i("integer")),-1===c){c=i("identifier");const e=t.length-1,n=t[e];if(-1!==c){if(pe.includes(n.value)){const r=V(n.value)+" is a reserved identifier and must not be used.";throw new he(S(t,e,null,r))}ue.includes(n.value)&&(n.type=n.value)}}}else'"'===a&&(c=i("string"));for(const i of de)if(e.startsWith(i,n)){t.push({type:i,value:i,trivia:r,line:o,index:s}),r="",n+=i.length,c=n;break}if(-1===c&&(c=i("other")),-1===c)throw new Error("Token stream not progressing");n=c,s+=1}return t.push({type:"eof",value:"",trivia:r}),t;function i(i,{noFlushTrivia:a}={}){const c=ie[i];c.lastIndex=n;const l=c.exec(e);return l?(t.push({type:i,value:l[0],trivia:r,line:o,index:s}),a||(r=""),c.lastIndex):-1}}(e),this.position=0}error(e){throw new he(S(this.source,this.position,this.current,e))}probe(e){return this.source.length>this.position&&this.source[this.position].type===e}consume(...e){for(const t of e){if(!this.probe(t))continue;const e=this.source[this.position];return this.position++,e}}unconsume(e){this.position=e}}class he extends Error{constructor({message:e,bareMessage:t,context:n,line:r,sourceName:o,input:s,tokens:i}){super(e),this.name="WebIDLParseError",this.bareMessage=t,this.context=n,this.line=r,this.sourceName=o,this.input=s,this.tokens=i}}class me extends P{static parse(e){const t=e.consume("string");if(t)return new me({source:e.source,tokens:{value:t}})}get type(){return"enum-value"}get value(){return super.value.slice(1,-1)}}class ge extends E{static parse(e){const t={};if(t.base=e.consume("enum"),!t.base)return;t.name=e.consume("identifier")||e.error("No name for enum");const n=se(new ge({source:e.source,tokens:t}));return e.current=n.this,t.open=e.consume("{")||e.error("Bodyless enum"),n.values=Z(e,{parser:me.parse,allowDangler:!0,listName:"enumeration"}),e.probe("string")&&e.error("No comma between enum values"),t.close=e.consume("}")||e.error("Unexpected value in enum"),n.values.length||e.error("No value in enum"),t.termination=e.consume(";")||e.error("No semicolon after enum"),n.this}get type(){return"enum"}get name(){return V(this.tokens.name.value)}}class be extends E{static parse(e){const t=e.consume("identifier");if(!t)return;const n={target:t};if(n.includes=e.consume("includes"),n.includes)return n.mixin=e.consume("identifier")||e.error("Incomplete includes statement"),n.termination=e.consume(";")||e.error("No terminating ; for includes statement"),new be({source:e.source,tokens:n});e.unconsume(t.index)}get type(){return"includes"}get target(){return V(this.tokens.target.value)}get includes(){return V(this.tokens.mixin.value)}}class ye extends E{static parse(e){const t={},n=se(new ye({source:e.source,tokens:t}));if(t.base=e.consume("typedef"),t.base)return n.idlType=Q(e,"typedef-type")||e.error("Typedef lacks a type"),t.name=e.consume("identifier")||e.error("Typedef lacks a name"),e.current=n.this,t.termination=e.consume(";")||e.error("Unterminated typedef, expected `;`"),n.this}get type(){return"typedef"}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.idlType.validate(e)}}class we extends E{static parse(e,t){const n={base:t},r=se(new we({source:e.source,tokens:n}));return n.name=e.consume("identifier")||e.error("Callback lacks a name"),e.current=r.this,n.assign=e.consume("=")||e.error("Callback lacks an assignment"),r.idlType=ee(e)||e.error("Callback lacks a return type"),n.open=e.consume("(")||e.error("Callback lacks parentheses for arguments"),r.arguments=X(e),n.close=e.consume(")")||e.error("Unterminated callback"),n.termination=e.consume(";")||e.error("Unterminated callback, expected `;`"),r.this}get type(){return"callback"}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.extAttrs.validate(e),yield*this.idlType.validate(e)}}class ve extends E{static parse(e,t,{type:n,inheritable:r,allowedMembers:o}){const{tokens:s}=t;for(s.name=e.consume("identifier")||e.error("Missing name in "+t.type),e.current=t,t=se(t),r&&Object.assign(s,function(e){const t=e.consume(":");return t?{colon:t,inheritance:e.consume("identifier")||e.error("Inheritance lacks a type")}:{}}(e)),s.open=e.consume("{")||e.error("Bodyless "+n),t.members=[];;){if(s.close=e.consume("}"),s.close)return s.termination=e.consume(";")||e.error("Missing semicolon after "+n),t.this;const r=z.parse(e);let i;for(const[t,...n]of o)if(i=se(t(e,...n)),i)break;i||e.error("Unknown member"),i.extAttrs=r,t.members.push(i.this)}}get partial(){return!!this.tokens.partial}get name(){return V(this.tokens.name.value)}get inheritance(){return this.tokens.inheritance?V(this.tokens.inheritance.value):null}*validate(e){for(const t of this.members)t.validate&&(yield*t.validate(e))}}class ke extends E{static parse(e){const t={};if(t.base=e.consume("const"),!t.base)return;let n=K(e);if(!n){const t=e.consume("identifier")||e.error("Const lacks a type");n=new U({source:e.source,tokens:{base:t}})}e.probe("?")&&e.error("Unexpected nullable constant type"),n.type="const-type",t.name=e.consume("identifier")||e.error("Const lacks a name"),t.assign=e.consume("=")||e.error("Const lacks value assignment"),t.value=Y(e)||e.error("Const lacks a value"),t.termination=e.consume(";")||e.error("Unterminated const, expected `;`");const r=new ke({source:e.source,tokens:t});return se(r).idlType=n,r}get type(){return"const"}get name(){return V(this.tokens.name.value)}get value(){return J(this.tokens.value)}}class xe extends E{static parse(e){const t=e.position,n={},r=se(new xe({source:e.source,tokens:n}));if(n.readonly=e.consume("readonly"),n.readonly||(n.async=e.consume("async")),n.base=n.readonly?e.consume("maplike","setlike"):n.async?e.consume("iterable"):e.consume("iterable","maplike","setlike"),!n.base)return void e.unconsume(t);const{type:o}=r,s="maplike"===o,i=s||"iterable"===o,a=r.async&&"iterable"===o;n.open=e.consume("<")||e.error(`Missing less-than sign \`<\` in ${o} declaration`);const c=Q(e)||e.error(`Missing a type argument in ${o} declaration`);return r.idlType=[c],r.arguments=[],i&&(c.tokens.separator=e.consume(","),c.tokens.separator?r.idlType.push(Q(e)):s&&e.error(`Missing second type argument in ${o} declaration`)),n.close=e.consume(">")||e.error(`Missing greater-than sign \`>\` in ${o} declaration`),e.probe("(")&&(a?(n.argsOpen=e.consume("("),r.arguments.push(...X(e)),n.argsClose=e.consume(")")||e.error("Unterminated async iterable argument list")):e.error("Arguments are only allowed for `async iterable`")),n.termination=e.consume(";")||e.error(`Missing semicolon after ${o} declaration`),r.this}get type(){return this.tokens.base.value}get readonly(){return!!this.tokens.readonly}get async(){return!!this.tokens.async}*validate(e){for(const t of this.idlType)yield*t.validate(e);for(const t of this.arguments)yield*t.validate(e)}}class $e extends E{static parse(e){const t=e.consume("constructor");if(!t)return;const n={base:t};n.open=e.consume("(")||e.error("No argument list in constructor");const r=X(e);n.close=e.consume(")")||e.error("Unterminated constructor"),n.termination=e.consume(";")||e.error("No semicolon after constructor");const o=new $e({source:e.source,tokens:n});return se(o).arguments=r,o}get type(){return"constructor"}*validate(e){this.idlType&&(yield*this.idlType.validate(e));for(const t of this.arguments)yield*t.validate(e)}}function _e(e){const t=e.consume("static");if(!t)return;return G.parse(e,{special:t})||H.parse(e,{special:t})||e.error("No body in static member")}class Se extends ve{static parse(e,t,{partial:n=null}={}){const r={partial:n,base:t};return ve.parse(e,new Se({source:e.source,tokens:r}),{type:"interface",inheritable:!n,allowedMembers:[[ke.parse],[$e.parse],[_e],[te],[xe.parse],[G.parse],[H.parse]]})}get type(){return"interface"}*validate(e){if(yield*this.extAttrs.validate(e),!this.partial&&this.extAttrs.every(e=>"Exposed"!==e.name)){const e="Interfaces must have `[Exposed]` extended attribute. To fix, add, for example, `[Exposed=Window]`. Please also consider carefully if your interface should also be exposed in a Worker scope. Refer to the [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) for more information.";yield C(this.tokens.name,this,"require-exposed",e,{autofix:re(this)})}const t=this.extAttrs.filter(e=>"Constructor"===e.name);for(const e of t){const t="Constructors should now be represented as a `constructor()` operation on the interface instead of `[Constructor]` extended attribute. Refer to the [WebIDL spec section on constructor operations](https://heycam.github.io/webidl/#idl-constructors) for more information.";yield C(e.tokens.name,this,"constructor-member",t,{autofix:Ce(this,e)})}if(this.extAttrs.some(e=>"Global"===e.name)){const e=this.extAttrs.filter(e=>"LegacyFactoryFunction"===e.name);for(const t of e){const e="Interfaces marked as `[Global]` cannot have factory functions.";yield C(t.tokens.name,this,"no-constructible-global",e)}const t=this.members.filter(e=>"constructor"===e.type);for(const e of t){const t="Interfaces marked as `[Global]` cannot have constructors.";yield C(e.tokens.base,this,"no-constructible-global",t)}}yield*super.validate(e),this.partial||(yield*function*(e,t){const n=new Set(i(t).map(e=>e.name)),r=e.partials.get(t.name)||[],o=e.mixinMap.get(t.name)||[];for(const e of[...r,...o]){const r=i(e);yield*s(r,n,e,t);for(const e of r)n.add(e.name)}function*s(e,t,n,r){for(const o of e){const{name:e}=o;if(e&&t.has(e)){const t=`The operation "${e}" has already been defined for the base interface "${r.name}" either in itself or in a mixin`;yield C(o.tokens.name,n,"no-cross-overload",t)}}}function i(e){return e.members.filter(({type:e})=>"operation"===e)}}(e,this))}}function Ce(e,t){return e=se(e),()=>{const n=ne(e.extAttrs.tokens.open.trivia),r=e.members.length?ne(oe(e.members[0]).trivia):function(e){const t=ne(e),n=t.includes("\t")?"\t":" ";return t+n}(n),o=$e.parse(new fe(`\n${r}constructor();`));o.extAttrs=new z({}),se(o).arguments=t.arguments;const s=function(e,t){const n=e.slice().reverse().findIndex(t);return-1===n?n:e.length-n-1}(e.members,e=>"constructor"===e.type);e.members.splice(s+1,0,o);const{close:i}=e.tokens;i.trivia.includes("\n")||(i.trivia+="\n"+n);const{extAttrs:a}=e,c=a.indexOf(t),l=a.splice(c,1);a.length?a.length===c?a[c-1].tokens.separator=void 0:a[c].tokens.name.trivia.trim()||(a[c].tokens.name.trivia=l[0].tokens.name.trivia):a.tokens.open=a.tokens.close=void 0}}class Ee extends ve{static parse(e,t,{partial:n}={}){const r={partial:n,base:t};if(r.mixin=e.consume("mixin"),r.mixin)return ve.parse(e,new Ee({source:e.source,tokens:r}),{type:"interface mixin",allowedMembers:[[ke.parse],[te],[G.parse,{noInherit:!0}],[H.parse,{regular:!0}]]})}get type(){return"interface mixin"}}class Re extends E{static parse(e){const t={},n=se(new Re({source:e.source,tokens:t}));return n.extAttrs=z.parse(e),t.required=e.consume("required"),n.idlType=Q(e,"dictionary-type")||e.error("Dictionary member lacks a type"),t.name=e.consume("identifier")||e.error("Dictionary member lacks a name"),n.default=F.parse(e),t.required&&n.default&&e.error("Required member must not have a default"),t.termination=e.consume(";")||e.error("Unterminated dictionary member, expected `;`"),n.this}get type(){return"field"}get name(){return V(this.tokens.name.value)}get required(){return!!this.tokens.required}*validate(e){yield*this.idlType.validate(e)}}class Te extends ve{static parse(e,{partial:t}={}){const n={partial:t};if(n.base=e.consume("dictionary"),n.base)return ve.parse(e,new Te({source:e.source,tokens:n}),{type:"dictionary",inheritable:!t,allowedMembers:[[Re.parse]]})}get type(){return"dictionary"}}class Ae extends ve{static parse(e,{partial:t}={}){const n={partial:t};if(n.base=e.consume("namespace"),n.base)return ve.parse(e,new Ae({source:e.source,tokens:n}),{type:"namespace",allowedMembers:[[G.parse,{noInherit:!0,readonly:!0}],[H.parse,{regular:!0}]]})}get type(){return"namespace"}*validate(e){if(!this.partial&&this.extAttrs.every(e=>"Exposed"!==e.name)){const e="Namespaces must have [Exposed] extended attribute. To fix, add, for example, [Exposed=Window]. Please also consider carefully if your namespace should also be exposed in a Worker scope. Refer to the [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) for more information.";yield C(this.tokens.name,this,"require-exposed",e,{autofix:re(this)})}yield*super.validate(e)}}class Pe extends ve{static parse(e,t,{partial:n=null}={}){const r={callback:t};if(r.base=e.consume("interface"),r.base)return ve.parse(e,new Pe({source:e.source,tokens:r}),{type:"callback interface",inheritable:!n,allowedMembers:[[ke.parse],[H.parse,{regular:!0}]]})}get type(){return"callback interface"}}function Le(e,t){const n=e.source;function r(t){e.error(t)}function o(...t){return e.consume(...t)}function s(t){const n=o("interface");if(!n)return;return Ee.parse(e,n,t)||Se.parse(e,n,t)||r("Interface has no proper body")}function i(){return function(){const t=o("callback");if(t)return e.probe("interface")?Pe.parse(e,t):we.parse(e,t)}()||s()||function(){const t=o("partial");if(t)return Te.parse(e,{partial:t})||s({partial:t})||Ae.parse(e,{partial:t})||r("Partial doesn't apply to anything")}()||Te.parse(e)||ge.parse(e)||ye.parse(e)||be.parse(e)||Ae.parse(e)}const a=function(){if(!n.length)return[];const s=[];for(;;){const t=z.parse(e),n=i();if(!n){t.length&&r("Stray extended attributes");break}se(n).extAttrs=t,s.push(n)}const a=o("eof");return t.concrete&&s.push(a),s}();return e.position<n.length&&r("Unrecognised tokens"),a}function Ie(e){return e}const De={wrap:e=>e.join(""),trivia:Ie,name:Ie,reference:Ie,type:Ie,generic:Ie,nameless:Ie,inheritance:Ie,definition:Ie,extendedAttribute:Ie,extendedAttributeReference:Ie};function Ne(e,t){const n=new Map,r=e.filter(e=>"includes"===e.type);for(const e of r){const r=t.get(e.includes);if(!r)continue;const o=n.get(e.target);o?o.push(r):n.set(e.target,[r])}return n}function*je(e){const t=function(e){const t=new Map,n=new Set,r=new Map;for(const o of e)if(o.partial){const e=r.get(o.name);e?e.push(o):r.set(o.name,[o])}else o.name&&(t.has(o.name)?n.add(o):t.set(o.name,o));return{all:e,unique:t,partials:r,duplicates:n,mixinMap:Ne(e,t),cache:{typedefIncludesDictionary:new WeakMap,dictionaryIncludesRequiredField:new WeakMap}}}(e);for(const e of t.all)e.validate&&(yield*e.validate(t));yield*function*({unique:e,duplicates:t}){for(const n of t){const{name:t}=n,r=`The name "${t}" of type "${e.get(t).type}" was already seen`;yield C(n.tokens.name,n,"no-duplicate",r)}}(t)}var Oe=Object.freeze({__proto__:null,parse:function(e,t={}){const n=new fe(e);return void 0!==t.sourceName&&(n.source.name=t.sourceName),Le(n,t)},write:function(e,{templates:t=De}={}){function n(e,{unescaped:n,context:r}){return n||(n=e.startsWith("_")?e.slice(1):e),t.reference(e,n,r)}function r(e,n=Ie,...r){if(!e)return"";const o=n(e.value,...r);return t.wrap([t.trivia(e.trivia),o])}function o(e,t){return r(e,n,{context:t})}function s(e,n){return r(e,t.name,n)}function i(e){if(e.union||e.generic)return t.wrap([r(e.tokens.base,t.generic),r(e.tokens.open),...e.subtype.map(a),r(e.tokens.close)]);const o=e.tokens.prefix||e.tokens.base,s=e.tokens.prefix?[e.tokens.prefix.value,t.trivia(e.tokens.base.trivia)]:[],i=n(t.wrap([...s,e.tokens.base.value,r(e.tokens.postfix)]),{unescaped:e.idlType,context:e});return t.wrap([t.trivia(o.trivia),i])}function a(e){return t.wrap([p(e.extAttrs),i(e),r(e.tokens.nullable),r(e.tokens.separator)])}function c(e){return e?t.wrap([r(e.tokens.assign),...e.expression.map(e=>r(e))]):""}function l(e){return t.wrap([p(e.extAttrs),r(e.tokens.optional),t.type(a(e.idlType)),r(e.tokens.variadic),s(e.tokens.name,{data:e}),c(e.default),r(e.tokens.separator)])}function u(e){return t.wrap([r(e.tokens.value),r(e.tokens.separator)])}function d(e){const{rhsType:n}=e.params;return t.wrap([t.trivia(e.tokens.name.trivia),t.extendedAttribute(t.wrap([t.extendedAttributeReference(e.name),r(e.params.tokens.assign),o(e.params.tokens.secondaryName,e),r(e.params.tokens.open),...e.params.list?e.params.list.map("identifier-list"===n?n=>function(e,n){return t.wrap([o(e.tokens.value,n),r(e.tokens.separator)])}(n,e):n&&n.endsWith("-list")?u:l):[],r(e.params.tokens.close)])),r(e.tokens.separator)])}function p(e){return e.length?t.wrap([r(e.tokens.open),...e.map(d),r(e.tokens.close)]):""}function f(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.callback),r(e.tokens.partial),r(e.tokens.base),r(e.tokens.mixin),s(e.tokens.name,{data:e}),(o=e,o.tokens.inheritance?t.wrap([r(o.tokens.colon),t.trivia(o.tokens.inheritance.trivia),t.inheritance(n(o.tokens.inheritance.value,{context:o}))]):""),r(e.tokens.open),g(e.members,e),r(e.tokens.close),r(e.tokens.termination)]),{data:e});var o}function h(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.readonly),r(e.tokens.async),r(e.tokens.base,t.generic),r(e.tokens.open),t.wrap(e.idlType.map(a)),r(e.tokens.close),r(e.tokens.argsOpen),t.wrap(e.arguments.map(l)),r(e.tokens.argsClose),r(e.tokens.termination)]),{data:e,parent:n})}t=Object.assign({},De,t);const m={interface:f,"interface mixin":f,namespace:f,operation:function(e,n){const o=e.idlType?[t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.open),t.wrap(e.arguments.map(l)),r(e.tokens.close)]:[];return t.definition(t.wrap([p(e.extAttrs),e.tokens.name?r(e.tokens.special):r(e.tokens.special,t.nameless,{data:e,parent:n}),...o,r(e.tokens.termination)]),{data:e,parent:n})},attribute:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.special),r(e.tokens.readonly),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.termination)]),{data:e,parent:n})},constructor:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base,t.nameless,{data:e,parent:n}),r(e.tokens.open),t.wrap(e.arguments.map(l)),r(e.tokens.close),r(e.tokens.termination)]),{data:e,parent:n})},dictionary:f,field:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.required),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),c(e.default),r(e.tokens.termination)]),{data:e,parent:n})},const:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.assign),r(e.tokens.value),r(e.tokens.termination)]),{data:e,parent:n})},typedef:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e}),r(e.tokens.termination)]),{data:e})},includes:function(e){return t.definition(t.wrap([p(e.extAttrs),o(e.tokens.target,e),r(e.tokens.includes),o(e.tokens.mixin,e),r(e.tokens.termination)]),{data:e})},callback:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),s(e.tokens.name,{data:e}),r(e.tokens.assign),t.type(a(e.idlType)),r(e.tokens.open),...e.arguments.map(l),r(e.tokens.close),r(e.tokens.termination)]),{data:e})},enum:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),s(e.tokens.name,{data:e}),r(e.tokens.open),g(e.values,e),r(e.tokens.close),r(e.tokens.termination)]),{data:e})},"enum-value":function(e,n){return t.wrap([t.trivia(e.tokens.value.trivia),t.definition(t.wrap(['"',t.name(e.value,{data:e,parent:n}),'"']),{data:e,parent:n}),r(e.tokens.separator)])},iterable:h,maplike:h,setlike:h,"callback interface":f,eof:function(e){return t.trivia(e.trivia)}};function g(e,n){if(!e)return;const r=e.map(e=>function(e,t){if(!m[e.type])throw new Error(`Type "${e.type}" is unsupported`);return m[e.type](e,t)}(e,n));return t.wrap(r)}return g(e)},validate:function(e){return[...je((t=e,t.flat?t.flat():[].concat(...t)))];var t},WebIDLParseError:he});var ze,We=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(ze={exports:{}},ze.exports),ze.exports);const Me=/[&<>"']/,Ue=/[&<>"']/g,Fe=/[<>"']|&(?!#?\w+;)/,qe=/[<>"']|&(?!#?\w+;)/g,Be={"&":"&","<":"<",">":">",'"':""","'":"'"},He=e=>Be[e];const Ge=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function Ve(e){return e.replace(Ge,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const Ze=/(^|[^\[])\^/g;const Ye=/[^\w:]/g,Je=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const Ke={},Xe=/^[^:]+:\/*[^/]*$/,Qe=/^([^:]+:)[\s\S]*$/,et=/^([^:]+:\/*[^/]*)[\s\S]*$/;function tt(e,t){Ke[" "+e]||(Xe.test(e)?Ke[" "+e]=e+"/":Ke[" "+e]=nt(e,"/",!0));const n=-1===(e=Ke[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(Qe,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(et,"$1")+t:e+t}function nt(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const s=e.charAt(r-o-1);if(s!==t||n){if(s===t||!n)break;o++}else o++}return e.substr(0,r-o)}var rt={escape:function(e,t){if(t){if(Me.test(e))return e.replace(Ue,He)}else if(Fe.test(e))return e.replace(qe,He);return e},unescape:Ve,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(Ze,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(Ve(n)).replace(Ye,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!Je.test(n)&&(n=tt(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:tt,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:nt,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:ot}=We,{rtrim:st,splitCells:it,escape:at,findClosingBracket:ct}=rt;function lt(e,t,n){const r=t.href,o=t.title?at(t.title):null,s=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:s}:{type:"image",raw:n,href:r,title:o,text:at(s)}}var ut=class{constructor(e){this.options=e||ot}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:st(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=st(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:it(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=it(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},s=t[0].match(this.rules.block.item);let i,a,c,l,u,d,p,f,h,m=!1,g=s.length;c=this.rules.block.listItemStart.exec(s[0]);for(let t=0;t<g;t++){if(i=s[t],e=i,this.options.pedantic||(h=i.match(new RegExp("\\n\\s*\\n {0,"+(c[0].length-1)+"}\\S")),h&&(u=i.length-h.index+s.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),i=i.substring(0,h.index),e=i,g=t+1)),t!==g-1){if(l=this.rules.block.listItemStart.exec(s[t+1]),this.options.pedantic?l[1].length>c[1].length:l[1].length>=c[0].length||l[1].length>3){s.splice(t,2,s[t]+(!this.options.pedantic&&l[1].length<c[0].length&&!s[t].match(/\n$/)?"":"\n")+s[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?l[2][l[2].length-1]!==n[n.length-1]:r===(1===l[2].length))&&(u=s.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),c=l}a=i.length,i=i.replace(/^ *([*+-]|\d+[.)]) ?/,""),~i.indexOf("\n ")&&(a-=i.length,i=this.options.pedantic?i.replace(/^ {1,4}/gm,""):i.replace(new RegExp("^ {1,"+a+"}","gm"),"")),i=st(i,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(p=/^\[[ xX]\] /.test(i),f=void 0,p&&(f=" "!==i[1],i=i.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:p,checked:f,loose:d,text:i})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):at(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:it(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=it(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:at(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):at(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=st(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=ct(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),lt(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return lt(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,s,i=n,a=0;const c="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=c.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(s=o.length,r[3]||r[4])i+=s;else if(!((r[5]||r[6])&&n%3)||(n+s)%3){if(i-=s,!(i>0)){if(i+a-s<=0&&!t.slice(c.lastIndex).match(c)&&(s=Math.min(s,s+i+a)),Math.min(n,s)%2)return{type:"em",raw:e.slice(0,n+r.index+s+1),text:e.slice(1,n+r.index+s)};if(Math.min(n,s)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+s+1),text:e.slice(2,n+r.index+s-1)}}}else a+=s}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=at(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=at(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=at(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=at(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=at(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):at(r[0]):r[0]:at(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:dt,edit:pt,merge:ft}=rt,ht={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:dt,table:dt,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ht.def=pt(ht.def).replace("label",ht._label).replace("title",ht._title).getRegex(),ht.bullet=/(?:[*+-]|\d{1,9}[.)])/,ht.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ht.item=pt(ht.item,"gm").replace(/bull/g,ht.bullet).getRegex(),ht.listItemStart=pt(/^( *)(bull) */).replace("bull",ht.bullet).getRegex(),ht.list=pt(ht.list).replace(/bull/g,ht.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ht.def.source+")").getRegex(),ht._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ht._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ht.html=pt(ht.html,"i").replace("comment",ht._comment).replace("tag",ht._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ht.paragraph=pt(ht._paragraph).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.blockquote=pt(ht.blockquote).replace("paragraph",ht.paragraph).getRegex(),ht.normal=ft({},ht),ht.gfm=ft({},ht.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ht.gfm.nptable=pt(ht.gfm.nptable).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.gfm.table=pt(ht.gfm.table).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.pedantic=ft({},ht.normal,{html:pt("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ht._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:dt,paragraph:pt(ht.normal._paragraph).replace("hr",ht.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ht.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const mt={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:dt,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:dt,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};mt.punctuation=pt(mt.punctuation).replace(/punctuation/g,mt._punctuation).getRegex(),mt.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,mt.escapedEmSt=/\\\*|\\_/g,mt._comment=pt(ht._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),mt.emStrong.lDelim=pt(mt.emStrong.lDelim).replace(/punct/g,mt._punctuation).getRegex(),mt.emStrong.rDelimAst=pt(mt.emStrong.rDelimAst,"g").replace(/punct/g,mt._punctuation).getRegex(),mt.emStrong.rDelimUnd=pt(mt.emStrong.rDelimUnd,"g").replace(/punct/g,mt._punctuation).getRegex(),mt._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,mt._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,mt._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,mt.autolink=pt(mt.autolink).replace("scheme",mt._scheme).replace("email",mt._email).getRegex(),mt._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,mt.tag=pt(mt.tag).replace("comment",mt._comment).replace("attribute",mt._attribute).getRegex(),mt._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,mt._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,mt._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,mt.link=pt(mt.link).replace("label",mt._label).replace("href",mt._href).replace("title",mt._title).getRegex(),mt.reflink=pt(mt.reflink).replace("label",mt._label).getRegex(),mt.reflinkSearch=pt(mt.reflinkSearch,"g").replace("reflink",mt.reflink).replace("nolink",mt.nolink).getRegex(),mt.normal=ft({},mt),mt.pedantic=ft({},mt.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:pt(/^!?\[(label)\]\((.*?)\)/).replace("label",mt._label).getRegex(),reflink:pt(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",mt._label).getRegex()}),mt.gfm=ft({},mt.normal,{escape:pt(mt.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),mt.gfm.url=pt(mt.gfm.url,"i").replace("email",mt.gfm._extended_email).getRegex(),mt.breaks=ft({},mt.gfm,{br:pt(mt.br).replace("{2,}","*").getRegex(),text:pt(mt.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var gt={block:ht,inline:mt};const{defaults:bt}=We,{block:yt,inline:wt}=gt,{repeatString:vt}=rt;function kt(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function xt(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var $t=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||bt,this.options.tokenizer=this.options.tokenizer||new ut,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:yt.normal,inline:wt.normal};this.options.pedantic?(t.block=yt.pedantic,t.inline=wt.pedantic):this.options.gfm&&(t.block=yt.gfm,this.options.breaks?t.inline=wt.breaks:t.inline=wt.gfm),this.tokenizer.rules=t}static get rules(){return{block:yt,inline:wt}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,s,i;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),i=t[t.length-1],i&&"paragraph"===i.type?(i.raw+="\n"+r.raw,i.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),s=r.items.length,o=0;o<s;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),i=t[t.length-1],i&&"text"===i.type?(i.raw+="\n"+r.raw,i.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,s,i;const a=e.length;for(t=0;t<a;t++)switch(i=e[t],i.type){case"paragraph":case"text":case"heading":i.tokens=[],this.inlineTokens(i.text,i.tokens);break;case"table":for(i.tokens={header:[],cells:[]},o=i.header.length,n=0;n<o;n++)i.tokens.header[n]=[],this.inlineTokens(i.header[n],i.tokens.header[n]);for(o=i.cells.length,n=0;n<o;n++)for(s=i.cells[n],i.tokens.cells[n]=[],r=0;r<s.length;r++)i.tokens.cells[n][r]=[],this.inlineTokens(s[r],i.tokens.cells[n][r]);break;case"blockquote":this.inline(i.tokens);break;case"list":for(o=i.items.length,n=0;n<o;n++)this.inline(i.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,s,i,a,c,l=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(l));)e.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(l=l.slice(0,i.index)+"["+vt("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(l));)l=l.slice(0,i.index)+"["+vt("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.escapedEmSt.exec(l));)l=l.slice(0,i.index)+"++"+l.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(c=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const s=t[t.length-1];s&&"text"===o.type&&"text"===s.type?(s.raw+=o.raw,s.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,l,c))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,xt))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,xt))){if(o=this.tokenizer.inlineText(e,r,kt))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(c=o.raw.slice(-1)),a=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=o.raw,s.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:_t}=We,{cleanUrl:St,escape:Ct}=rt;var Et=class{constructor(e){this.options=e||_t}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+Ct(r,!0)+'">'+(n?e:Ct(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:Ct(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=St(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+Ct(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=St(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},Rt=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},Tt=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:At}=We,{unescape:Pt}=rt;var Lt=class e{constructor(e){this.options=e||At,this.options.renderer=this.options.renderer||new Et,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Rt,this.slugger=new Tt}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,s,i,a,c,l,u,d,p,f,h,m,g,b,y,w,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,Pt(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(l="",c="",s=d.header.length,r=0;r<s;r++)c+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(l+=this.renderer.tablerow(c),u="",s=d.cells.length,r=0;r<s;r++){for(a=d.tokens.cells[r],c="",i=a.length,o=0;o<i;o++)c+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(c)}v+=this.renderer.table(l,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(p=d.ordered,f=d.start,h=d.loose,s=d.items.length,u="",r=0;r<s;r++)g=d.items[r],b=g.checked,y=g.task,m="",g.task&&(w=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=w+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=w+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:w}):m+=w),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,y,b);v+=this.renderer.list(u,p,f);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const s=e.length;for(n=0;n<s;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:It,checkSanitizeDeprecation:Dt,escape:Nt}=rt,{getDefaults:jt,changeDefaults:Ot,defaults:zt}=We;function Wt(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=It({},Wt.defaults,t||{}),Dt(t),n){const r=t.highlight;let o;try{o=$t.lex(e,t)}catch(e){return n(e)}const s=function(e){let s;if(!e)try{s=Lt.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,s)};if(!r||r.length<3)return s();if(delete t.highlight,!o.length)return s();let i=0;return Wt.walkTokens(o,(function(e){"code"===e.type&&(i++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return s(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),i--,0===i&&s()}))},0))})),void(0===i&&s())}try{const n=$t.lex(e,t);return t.walkTokens&&Wt.walkTokens(n,t.walkTokens),Lt.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Nt(e.message+"",!0)+"</pre>";throw e}}Wt.options=Wt.setOptions=function(e){return It(Wt.defaults,e),Ot(Wt.defaults),Wt},Wt.getDefaults=jt,Wt.defaults=zt,Wt.use=function(e){const t=It({},e);if(e.renderer){const n=Wt.defaults.renderer||new Et;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let s=e.renderer[t].apply(n,o);return!1===s&&(s=r.apply(n,o)),s}}t.renderer=n}if(e.tokenizer){const n=Wt.defaults.tokenizer||new ut;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let s=e.tokenizer[t].apply(n,o);return!1===s&&(s=r.apply(n,o)),s}}t.tokenizer=n}if(e.walkTokens){const n=Wt.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Wt.setOptions(t)},Wt.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Wt.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Wt.walkTokens(n,t);break;case"list":Wt.walkTokens(n.items,t);break;default:n.tokens&&Wt.walkTokens(n.tokens,t)}},Wt.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=It({},Wt.defaults,t||{}),Dt(t);try{const n=$t.lexInline(e,t);return t.walkTokens&&Wt.walkTokens(n,t.walkTokens),Lt.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Nt(e.message+"",!0)+"</pre>";throw e}},Wt.Parser=Lt,Wt.parser=Lt.parse,Wt.Renderer=Et,Wt.TextRenderer=Rt,Wt.Lexer=$t,Wt.lexer=$t.lex,Wt.Tokenizer=ut,Wt.Slugger=Tt,Wt.parse=Wt;var Mt=Wt;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ut=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function s(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function i(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function c(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return i(""===n?e[r-1]:n,o)}))}function l(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var s=r[o];if(s[0].test(t))return c(t,s)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?i(r,o):e.hasOwnProperty(o)?i(r,e[o]):l(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&l(o,o,n)===o}}function p(e,t,n){return(n?t+" ":"")+(1===t?p.singular(e):p.plural(e))}return p.plural=u(o,r,e),p.isPlural=d(o,r,e),p.singular=u(r,o,t),p.isSingular=d(r,o,t),p.addPluralRule=function(t,n){e.push([s(t),n])},p.addSingularRule=function(e,n){t.push([s(e),n])},p.addUncountableRule=function(e){"string"!=typeof e?(p.addPluralRule(e,"$0"),p.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},p.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return p.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return p.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return p.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(p.addUncountableRule),p}))})),Ft=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=s.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},s;function s(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(i,this)}function i(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,s){for(var i=("selectedIndex"in t),a=i;r<o;){var c,l=e(n[r],1);t.insertBefore(l,s),i&&a&&l.selected&&(a=!a,c=t.selectedIndex,t.selectedIndex=c<0?r:d.call(t.querySelectorAll("option"),l)),r++}}function s(e,t){return e==t}function i(e){return e}function a(e,t,n,r,o,s,i){var a=s-o;if(a<1)return-1;for(;a<=n-t;){for(var c=t,l=o;c<n&&l<s&&i(e[c],r[l]);)c++,l++;if(l===s)return t;t=c+1}return-1}function c(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function l(e,t,n,r){for(;n<r;)f(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,p=function(e,t,n){for(var r=1,o=t;r<o;){var s=(r+o)/2>>>0;n<e[s]?o=s:r=1+s}return r},f=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||s,d=r.node||i,f=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,y=0;g<m&&y<b&&u(t[g],n[y]);)g++,y++;for(;g<m&&y<b&&u(t[m-1],n[b-1]);)m--,b--;var w=g===m,v=y===b;if(w&&v)return n;if(w&&y<b)return o(d,e,n,y,b,c(d,t,g,h,f)),n;if(v&&g<m)return l(d,t,g,m),n;var k=m-g,x=b-y,$=-1;if(k<x){if(-1<($=a(n,y,b,t,g,m,u)))return o(d,e,n,y,$,d(t[g],0)),o(d,e,n,$+k,b,c(d,t,m,h,f)),n}else if(x<k&&-1<($=a(t,g,m,n,y,b,u)))return l(d,t,g,$),l(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,y,b,d(t[g],0)),l(d,t,g,m)):k==x&&function(e,t,n,r,o,s){for(;r<o&&s(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,y,b,c(d,t,m,h,f)):function(e,t,n,r,s,i,a,c,u,d,f,h,m){!function(e,t,n,r,s,i,a,c,u){for(var d=[],p=e.length,f=a,h=0;h<p;)switch(e[h++]){case 0:s++,f++;break;case 1:d.push(r[s]),o(t,n,r,s++,s,f<c?t(i[f],0):u);break;case-1:f++}for(h=0;h<p;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(i[a])?a++:l(t,i,a++,a)}}(function(e,t,n,r,o,s,i){var a,c,l,u,d,p,f=n+s,h=[];e:for(b=0;b<=f;b++){if(50<b)return null;for(p=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(c=(l=a===-b||a!==b&&u[p+a-1]<u[p+a+1]?u[p+a+1]:u[p+a-1]+1)-a;l<s&&c<n&&i(r[o+l],e[t+c]);)l++,c++;if(l===s&&c===n)break e;d[b+a]=l}}for(var m=Array(b/2+f/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<l&&0<c&&i(r[o+l-1],e[t+c-1]);)m[g--]=0,l--,c--;if(!b)break;p=b-1,u=b?h[b-1]:[0,0],(a=l-c)==-b||a!==b&&u[p+a-1]<u[p+a+1]?(c--,m[g--]=1):(l--,m[g--]=-1)}return m}(n,r,i,a,c,d,h)||function(e,t,n,r,o,s,i,a){var c=0,l=r<a?r:a,u=Array(l++),d=Array(l);d[0]=-1;for(var f=1;f<l;f++)d[f]=i;for(var h=o.slice(s,i),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(c=p(d,l,g=b+s))&&(d[c]=g,u[c]={newi:m,oldi:g,prev:u[c-1]})}for(c=--l,--i;d[c]>i;)--c;l=a+r-c;var y=Array(l),w=u[c];for(--n;w;){for(var v=w.newi,k=w.oldi;v<n;)y[--l]=1,--n;for(;k<i;)y[--l]=-1,--i;y[--l]=0,--n,--i,w=w.prev}for(;t<=n;)y[--l]=1,--n;for(;s<=i;)y[--l]=-1,--i;return y}(n,r,s,i,a,c,u,d),e,t,n,r,a,c,f,m)}(d,e,n,y,b,x,t,g,m,k,h,u,f),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,y={};try{y.Map=Map}catch(u){y.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var s=r(o);return s&&(t.splice(e,1),n.splice(e,1)),s},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,s){return n[r(o)?e:t.push(o)-1]=s,this}};function r(n){return-1<(e=t.indexOf(n))}}}var w=y.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,_,S,C,E,R,T={},A={},P=[],L=A.hasOwnProperty,I=0,D={attributes:T,define:function(e,t){e.indexOf("-")<0?(e in A||(I=P.push(e)),A[e]=t):T[e]=t},invoke:function(e,t){for(var n=0;n<I;n++){var r=P[n];if(L.call(e,r))return A[r](e[r],t)}}},N=Array.isArray||(_=($={}.toString).call([]),function(e){return $.call(e)===_}),j=(S=e,C="fragment",R="content"in z(E="template")?function(e){var t=z(E);return t.innerHTML=e,t.content}:function(e){var t,n=z(C),r=z(E);return O(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=z(C),n=z("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",O(t,n.firstChild.childNodes),t}:R)(e)});function O(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function z(e){return e===C?S.createDocumentFragment():S.createElementNS("http://www.w3.org/1999/xhtml",e)}var W,M,U,F,q,B,H,G,V,Z=(M="appendChild",U="cloneNode",F="createTextNode",B=(q="importNode")in(W=e),(H=W.createDocumentFragment())[M](W[F]("g")),H[M](W[F]("")),(B?W[q](H,!0):H[U](!0)).childNodes.length<2?function e(t,n){for(var r=t[U](),o=t.childNodes||[],s=o.length,i=0;n&&i<s;i++)r[M](e(o[i],n));return r}:B?W[q]:function(e,t){return e[U](!!t)}),Y="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},J="-"+Math.random().toFixed(6)+"%",K=!1;try{G=e.createElement("template"),V="tabindex","content"in G&&(G.innerHTML="<p "+V+'="'+J+'"></p>',G.content.childNodes[0].getAttribute(V)==J)||(J="_dt: "+J.slice(1,-1)+";",K=!0)}catch(u){}var X="\x3c!--"+J+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",se="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",ie=new RegExp(oe+re+se+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+se+"*)(["+te+"]*/>)","g"),ce=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+X+"\\2","gi");function le(e,t,n,r){return"<"+t+n.replace(ce,ue)+r}function ue(e,t,n){return t+(n||'"')+J+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var pe=K?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function fe(t,n,r,o){for(var s=t.childNodes,i=s.length,a=0;a<i;){var c=s[a];switch(c.nodeType){case 1:var l=o.concat(a);!function(t,n,r,o){for(var s,i=t.attributes,a=[],c=[],l=pe(i,r),u=l.length,d=0;d<u;){var p=l[d++],f=p.value===J;if(f||1<(s=p.value.split(X)).length){var h=p.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(f?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=i[m]||i[m.toLowerCase()];if(f)n.push(he(g,o,m,null));else{for(var b=s.length-2;b--;)r.shift();n.push(he(g,o,m,s))}}c.push(p)}}for(var y=((d=0)<(u=c.length)&&K&&!("ownerSVGElement"in t));d<u;){var w=c[d++];y&&(w.value=""),t.removeAttribute(w.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=i.length,d=0;d<u;)k.setAttributeNode(i[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(c,n,r,l),fe(c,n,r,l);break;case 8:var u=c.textContent;if(u===J)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:c,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(c),a--,i--}break;case 3:Q.test(t.nodeName)&&Y.call(c.textContent)===X&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function ye(e,t){var n=(e.convert||function(e){return e.join(X).replace(ae,de).replace(ie,le)})(t),r=e.transform;r&&(n=r(n));var o=j(n,e.type);ve(o);var s=[];return fe(o,s,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=s.length,i=0,a=0;i<o;){var c=s[i++],l=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,c.path);switch(c.type){case"any":r.push({fn:e.any(l,[]),sparse:!1});break;case"attr":var u=c.sparse,d=e.attribute(l,c.name,c.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(l),sparse:!1}),l.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var s=1,i=1;s<e;){var a=r[s-i];if(a.sparse){var c=a.values,l=c[0],u=1,d=c.length;for(i+=d-2;u<d;)l+=arguments[s++]+c[u++];a.fn(l)}else a.fn(arguments[s++])}return n}}}}var we=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===Y.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),Se(n,!0)}(e,t):Se(e.style,!1)});function _e(e,t,n){return t+"-"+n.toLowerCase()}function Se(e,t){var n,r;return function(o){var s,i,a,c;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(i in r)i in o||(e[i]="")}else t?e.value="":e.cssText="";for(i in s=t?{}:e,o)a="number"!=typeof(c=o[i])||ke.test(i)?c:c+"px",!t&&/^--/.test(i)?s.setProperty(i,a):s[i]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,_e),":",e[t],";");return n.join("")}(r=s):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ce,Ee,Re=(Ce=[].slice,(Ee=Te.prototype).ELEMENT_NODE=1,Ee.nodeType=111,Ee.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ee.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,s=r.length;o<s;o++)t.appendChild(r[o]);return t},Te);function Te(e){var t=this.childNodes=Ce.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Ae(e){return{html:e}}function Pe(e,t){switch(e.nodeType){case Ue:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Pe(e.render(),t);default:return e}}function Le(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Ae).then(t):Promise.resolve(D.invoke(e,t)).then(t)}function Ie(e){return null!=e&&"then"in e}var De,Ne,je,Oe,ze,We="ownerSVGElement",Me=v.prototype.nodeType,Ue=Re.prototype.nodeType,Fe=(Ne=(De={Event:b,WeakSet:u}).Event,je=De.WeakSet,Oe=!0,ze=null,function(e){return Oe&&(Oe=!Oe,ze=new je,function(e){var t=new je,n=new je;try{new MutationObserver(i).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],s=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){i(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){s({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){s({addedNodes:[e.target],removedNodes:[]})}),!0)}function i(e){for(var r,o=e.length,s=0;s<o;s++)a((r=e[s]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,s=new Ne(t),i=e.length,a=0;a<i;1===(o=e[a++]).nodeType&&function e(t,n,r,o,s){ze.has(t)&&!o.has(t)&&(s.delete(t),o.add(t),t.dispatchEvent(n));for(var i=t.children||[],a=i.length,c=0;c<a;e(i[c++],n,r,o,s));}(o,s,t,n,r));}}(e.ownerDocument)),ze.add(e),e}),qe=/^(?:form|list)$/i,Be=[].slice;function He(t){return this.type=t,function(t){var n=we,r=ve;return function(o){var s,i,a;return n!==o&&(s=t,i=n=o,a=be.get(i)||be.set(i,ye(s,i)),r=a.updates(Z.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ge=!(He.prototype={attribute:function(e,t,n){var r,o=We in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return l=e,u=t.slice(1),o?function(e){try{l[u]=e}catch(t){l.setAttribute(u,e)}}:function(e){l[u]=e};if("?"===t.slice(0,1))return i=e,a=t.slice(1),function(e){c!==!!e&&((c=!!e)?i.setAttribute(a,""):i.removeAttribute(a))};if(/^on/.test(t)){var s=t.slice(2);return"connected"===s||"disconnected"===s?Fe(e):t.toLowerCase()in e&&(s=s.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(s,r,!1),(r=t)&&e.addEventListener(s,t,!1))}}if("data"===t||!o&&t in e&&!qe.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in D.attributes)return function(n){var o=D.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var i,a,c,l,u,d=!1,p=n.cloneNode(!0);return function(t){r!==t&&(r=t,p.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(p)),p.value=t):(p.value=t,d||(d=!0,e.setAttributeNode(p)))))}},any:function(e,t){var n,r={node:Pe,before:e},o=We in e?"svg":"html",s=!1;return function i(a){switch(typeof a){case"string":case"number":case"boolean":s?n!==a&&(n=a,t[0].textContent=a):(s=!0,n=a,t=h(e.parentNode,t,[(c=a,e.ownerDocument.createTextNode(c))],r));break;case"function":i(a(e));break;case"object":case"undefined":if(null==a){s=!1,t=h(e.parentNode,t,[],r);break}default:if(s=!1,N(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":i({html:a});break;case"object":if(N(a[0])&&(a=a.concat.apply([],a)),Ie(a[0])){Promise.all(a).then(i);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?Be.call(a.childNodes):[a],r):Ie(a)?a.then(i):"placeholder"in a?Le(a,i):"text"in a?i(String(a.text)):"any"in a?i(a.any):"html"in a?t=h(e.parentNode,t,Be.call(j([].concat(a.html).join(""),o).childNodes),r):i("length"in a?Be.call(a):D.invoke(a,i))}var c}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?Ie(r)?r.then(n):"placeholder"in r?Le(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?Be.call(r).join(""):D.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,s,i,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),c=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||c?(o={},s=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=c?s:(i=new n,function(e){return i.get(e)||(n=s(t=e),i.set(t,n),n);var t,n})):Ge=!0,Ze(t)};function Ze(e){return Ge?e:Ve(e)}function Ye(e){for(var t=arguments.length,n=[Ze(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Je=new n,Ke=function(e){var t,n,r;return function(){var o=Ye.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Xe=function(e,t){var n=t.indexOf(":"),r=Je.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Je.set(e,r={}),r[o]||(r[o]=Ke(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Re(t):e},et=new n;function tt(){var e=et.get(this),t=Ye.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(We in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,st,it=D.define,at=He.prototype;function ct(e){return arguments.length<2?null==e?Ke("html"):"string"==typeof e?ct.wire(null,e):"raw"in e?Ke("html")(e):"nodeType"in e?ct.bind(e):Xe(e,"html"):("raw"in e?Ke("html"):ct.wire).apply(null,arguments)}return ct.Component=v,ct.bind=function(e){return tt.bind(e)},ct.define=it,ct.diff=h,(ct.hyper=ct).observe=Fe,ct.tagger=at,ct.wire=function(e,t){return null==e?Ke(t||"html"):Xe(e,t||"html")},ct._={WeakMap:n,WeakSet:u},nt=Ke,rt=new n,ot=Object.create,st=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var s,i,a,c=t.get(e)||st(e,t);switch(typeof o){case"object":case"function":var l=c.w||(c.w=new n);return l.get(o)||(s=l,i=o,a=new e(r),s.set(i,a),a);default:var u=c.p||(c.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new w,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),ct}(document); -/*! (c) Andrea Giammarchi (ISC) */const qt=$,Bt=Oe,Ht=Ft,Gt=Mt,Vt=Ut,Zt=/-/g;const Yt=rn({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}}),Jt=new Intl.DateTimeFormat(["en-ca-iso8601"],{timeZone:"UTC",year:"numeric",month:"2-digit",day:"2-digit"}),Kt=".informative, .note, .issue, .example, .ednote, .practice, .introductory";function Xt(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Qt(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function en(e=[],t=(e=>e),n=s){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(Yt.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=Yt.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function tn(e){return e.replace(/&/g,"&").replace(/>/g,">").replace(/"/g,""").replace(/</g,"<")}function nn(e){return e.trim().replace(/\s+/g," ")}function rn(e,t=s){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function on(e,t=""){return Jt.format(e).replace(Zt,t)}function sn(e=new Date,t=document.documentElement.lang||"en"){e instanceof Date||(e=new Date(e));const n=[t,"en"];return`${e.toLocaleString(n,{day:"2-digit",timeZone:"UTC"})} ${e.toLocaleString(n,{month:"long",timeZone:"UTC"})} ${e.toLocaleString(n,{year:"numeric",timeZone:"UTC"})}`}function an(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){Cn(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}async function cn(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,s;if("caches"in window)try{if(o=await caches.open(r.origin),s=await o.match(n),s&&new Date(s.headers.get("Expires"))>new Date)return s}catch(e){console.error("Failed to use Cache API.",e)}const i=await fetch(n);if(!i.ok&&s)return console.warn("Returning a stale cached response for "+r),s;if(o&&i.ok){const e=i.clone(),r=new Headers(i.headers),s=new Date(Date.now()+t);r.set("Expires",s.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return i}function ln(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Ht`${e}, `);return Ht`${r}${n[n.length-1]}`}function un(e,t=(e=>e)){const n=e.map(t);switch(n.length){case 0:case 1:return n[0];case 2:return Ht`${n[0]}${Yt.x_and_y}${n[1]}`;default:{const e=ln(n.slice(0,-1));return Ht`${e}${Yt.x_y_and_z}${n[n.length-1]}`}}}function dn(e,t=""){return pn(e,t,function(e){let t=0;for(const n of e)t=Math.imul(31,t)+n.charCodeAt(0)|0;return String(t)}(nn(e.textContent)))}function pn(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function fn(e){const t=new Set,n="ltNodefault"in e.dataset?"":nn(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>nn(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(nn(e)))}return[...t]}function hn(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function mn(e,t){const n=t.closest(Kt);let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function gn(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function bn(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function yn(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class wn extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function vn(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>hn(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),kn(t),t}function kn(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...xn(t)])e.remove()}function*xn(e){for(;e.nextNode();)yield e.currentNode}class $n extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class _n extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||pn(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:s,title:i,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:s,title:i,details:a,stack:n}}}function Sn(e,t,n={}){const r={...n,isWarning:!1};An("error",new _n(e,t,r))}function Cn(e,t,n={}){const r={...n,isWarning:!0};An("warn",new _n(e,t,r))}function En(e){return`[\`${e}\`](https://respec.org/docs/#${e})`}const Rn="core/pubsubhub",Tn=new Map;function An(e,...t){if(!Tn.has(e))return;if(Array.from(Tn.get(e)).forEach(e=>{try{e(...t)}catch(t){Sn(`Error when calling function ${e.name}.`,Rn,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function Pn(e,t,n={once:!1}){return n.once?Pn(e,(function n(...r){!function({topic:e,cb:t}){const n=Tn.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(Tn.has(e)?Tn.get(e).add(t):Tn.set(e,new Set([t])),{topic:e,cb:t})}n(Rn,{sub:Pn});const Ln=["githubToken","githubUser"];class In{constructor(){this._respecDonePromise=new Promise(e=>{Pn("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],Pn("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),Pn("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}}const Dn="core/post-process";const Nn="core/pre-process";const jn="core/base-runner";var On=Object.freeze({__proto__:null,name:jn,runAll:async function(e){!function(){const e=new In;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(Cn("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),An("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),Pn("amend-user-config",n),Pn("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of Ln)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),An("amend-user-config",r)}(respecConfig),performance.mark(jn+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||Sn("Every item in `preProcess` must be a JS function.",Nn),t}).map(async t=>{try{return await t(e,document)}catch(e){Sn(`Function ${t.name} threw an error during \`preProcess\`.`,Nn,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const s=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(s),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},An("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||Sn("Every item in `postProcess` must be a JS function.",Dn),t}).map(async t=>{try{return await t(e,document)}catch(e){Sn(`Function ${t.name} threw an error during \`postProcess\`.`,Dn,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),An("end-all"),Qt(document),performance.mark(jn+"-end"),performance.measure(jn,jn+"-start",jn+"-end")}});async function zn(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-w3c.js",document.baseURI).href));return await t.text()}async function Wn(e){return zn("assets/"+e)}function Mn(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var Un=Object.freeze({__proto__:null,name:"core/reindent",reindent:Mn,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=Mn(e.innerHTML)}});const Fn=/>/gm,qn=/&/gm;class Bn extends Gt.Renderer{code(e,t,n){const{language:r,...o}=Bn.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const s=super.code(e,r,n),{example:i,illegalExample:a}=o;if(!i&&!a)return s;const c=i||a,l=`${r} ${i?"example":"illegal-example"}`;return s.replace("<pre>",`<pre title="${c}" class="${l}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function Hn(e){const t=Mn(e).replace(Fn,">").replace(qn,"&");return Gt(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new Bn})}function Gn(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=Hn(e.innerHTML)}class Vn{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function Zn(e,t){return function e(n){const r=new Vn(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function Yn(e){const t=Zn(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const Jn=(Kn="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll(Kn);return t.forEach(Gn),Array.from(t)});var Kn;var Xn=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:Hn,restructure:Yn,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of Jn(document.body))Yn(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=yn(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),Gn(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const s=Zn(o,document);o.append(r,s),document.body.replaceWith(o)}});function Qn(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!async function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=await async function(){try{return(await Promise.resolve().then((function(){return _u}))).default}catch{return Wn("ui.css")}}(),e.classList.add("removeOnSave"),document.head.appendChild(e)}();const er=Ht`<div id="respec-ui" class="removeOnSave" hidden></div>`,tr=Ht`<ul +window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return jn})),Promise.resolve().then((function(){return mr})),Promise.resolve().then((function(){return gr})),Promise.resolve().then((function(){return i})),Promise.resolve().then((function(){return vr})),Promise.resolve().then((function(){return is})),Promise.resolve().then((function(){return ls})),Promise.resolve().then((function(){return ps})),Promise.resolve().then((function(){return hs})),Promise.resolve().then((function(){return vs})),Promise.resolve().then((function(){return $s})),Promise.resolve().then((function(){return Kn})),Promise.resolve().then((function(){return Mn})),Promise.resolve().then((function(){return Cs})),Promise.resolve().then((function(){return Ts})),Promise.resolve().then((function(){return ao})),Promise.resolve().then((function(){return Ps})),Promise.resolve().then((function(){return Is})),Promise.resolve().then((function(){return Os})),Promise.resolve().then((function(){return Mi})),Promise.resolve().then((function(){return qi})),Promise.resolve().then((function(){return Gi})),Promise.resolve().then((function(){return Vi})),Promise.resolve().then((function(){return Ki})),Promise.resolve().then((function(){return na})),Promise.resolve().then((function(){return aa})),Promise.resolve().then((function(){return ua})),Promise.resolve().then((function(){return La})),Promise.resolve().then((function(){return ci})),Promise.resolve().then((function(){return Ja})),Promise.resolve().then((function(){return uc})),Promise.resolve().then((function(){return Ua})),Promise.resolve().then((function(){return dc})),Promise.resolve().then((function(){return yi})),Promise.resolve().then((function(){return Sc})),Promise.resolve().then((function(){return Cc})),Promise.resolve().then((function(){return Ec})),Promise.resolve().then((function(){return Oc})),Promise.resolve().then((function(){return zc})),Promise.resolve().then((function(){return Wc})),Promise.resolve().then((function(){return Bc})),Promise.resolve().then((function(){return Xc})),Promise.resolve().then((function(){return cl})),Promise.resolve().then((function(){return pl})),Promise.resolve().then((function(){return bl})),Promise.resolve().then((function(){return $l})),Promise.resolve().then((function(){return Sl})),Promise.resolve().then((function(){return Rl})),Promise.resolve().then((function(){return Nl})),Promise.resolve().then((function(){return ya})),Promise.resolve().then((function(){return Fl})),Promise.resolve().then((function(){return Vl})),Promise.resolve().then((function(){return Ql})),Promise.resolve().then((function(){return nu})),Promise.resolve().then((function(){return ou})),Promise.resolve().then((function(){return iu})),Promise.resolve().then((function(){return fu})),Promise.resolve().then((function(){return wu})),Promise.resolve().then((function(){return Ro})),Promise.resolve().then((function(){return xu}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},s=r.lang;var i=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:s,run:function(e){e.l10n=o[s]||o.en}});let a,c;const l=new WeakMap,u=new WeakMap,d=new WeakMap,p=new WeakMap,f=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(c||(c=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(l.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",s),e.removeEventListener("abort",s)},o=()=>{t(),r()},s=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",s),e.addEventListener("abort",s)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",s)},o=()=>{t(b(e.result)),r()},s=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",s)});return t.then(t=>{t instanceof IDBCursor&&l.set(t,e)}).catch(()=>{}),f.set(t,e),t}(e);if(p.has(e))return p.get(e);const t=g(e);return t!==e&&(p.set(e,t),f.set(t,e)),t}const w=e=>f.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const s=async function(e,...t){const s=this.transaction(e,o?"readwrite":"readonly");let i=s.store;return r&&(i=i.index(t.shift())),(await Promise.all([i[n](...t),o&&s.done]))[0]};return k.set(t,s),s}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:s}={}){const i=indexedDB.open(e,t),a=b(i);return r&&i.addEventListener("upgradeneeded",e=>{r(b(i.result),e.oldVersion,e.newVersion,b(i.transaction))}),n&&i.addEventListener("blocked",()=>n()),a.then(e=>{s&&e.addEventListener("close",()=>s()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});function S(e,t,n,r,o,{level:s="error",autofix:i,ruleName:a}={}){function c(n){return n>0?e.slice(t,t+n):e.slice(Math.max(t+n,0),t)}function l(n,{precedes:r}={}){const o=n.map(e=>e.trivia+e.value).join(""),s=e[t];return"eof"===s.type?o:r?o+s.trivia:o.slice(s.trivia.length)}const u="eof"!==e[t].type?e[t].line:e.length>1?e[t-1].line:1,d=function(e){const t=e.split("\n");return t[t.length-1]}(l(c(-5),{precedes:!0})),p=c(5),f=l(p),h=d+f.split("\n")[0]+"\n"+(" ".repeat(d.length)+"^"),m="Syntax"===o?"since":"inside",g=`${o} error at line ${u}${e.name?" in "+e.name:""}${n&&n.name?`, ${m} \`${n.partial?"partial ":""}${function(e){const t=[e];for(;e&&e.parent;){const{parent:n}=e;t.unshift(n),e=n}return t.map(e=>function(e,t){let n=e;return t&&(n+=" "+t),n}(e.type,e.name)).join(" -> ")}(n)}\``:""}:\n${h}`;return{message:`${g} ${r}`,bareMessage:r,context:g,line:u,sourceName:e.name,level:s,ruleName:a,autofix:i,input:f,tokens:p}}function _(e,t,n,r){return S(e,t,n,r,"Syntax")}function C(e,t,n,r,o={}){return o.ruleName=n,S(t.source,e.index,t,r,"Validation",o)}class E{constructor({source:e,tokens:t}){Object.defineProperties(this,{source:{value:e},tokens:{value:t,writable:!0},parent:{value:null,writable:!0},this:{value:this}})}toJSON(){const e={type:void 0,name:void 0,inheritance:void 0};let t=this;for(;t!==Object.prototype;){const n=Object.getOwnPropertyDescriptors(t);for(const[t,r]of Object.entries(n))(r.enumerable||r.get)&&(e[t]=this[t]);t=Object.getPrototypeOf(t)}return e}}function R(e,t,{useNullableInner:n}={}){if(!e.union){const r=t.unique.get(e.idlType);if(!r)return;if("typedef"===r.type){const{typedefIncludesDictionary:n}=t.cache;if(n.has(r))return n.get(r);t.cache.typedefIncludesDictionary.set(r,void 0);const o=R(r.idlType,t);if(t.cache.typedefIncludesDictionary.set(r,o),o)return{reference:e,dictionary:o.dictionary}}if("dictionary"===r.type&&(n||!e.nullable))return{reference:e,dictionary:r}}for(const n of e.subtype){const e=R(n,t);if(e)return n.union?e:{reference:n,dictionary:e.dictionary}}}function T(e,t){if(t.cache.dictionaryIncludesRequiredField.has(e))return t.cache.dictionaryIncludesRequiredField.get(e);t.cache.dictionaryIncludesRequiredField.set(e,void 0);let n=e.members.some(e=>e.required);if(!n&&e.inheritance){const r=t.unique.get(e.inheritance);r?T(r,t)&&(n=!0):n=!0}return t.cache.dictionaryIncludesRequiredField.set(e,n),n}class A extends Array{constructor({source:e,tokens:t}){super(),Object.defineProperties(this,{source:{value:e},tokens:{value:t},parent:{value:null,writable:!0}})}}class L extends E{static parser(e,t){return()=>{const n=e.consume(t);if(n)return new L({source:e.source,tokens:{value:n}})}}get value(){return V(this.tokens.value.value)}}function P(e,t){return Z(e,{parser:L.parser(e,t),listName:t+" list"})}const I=["identifier","decimal","integer","string"],D=new Map([...["NoInterfaceObject","LenientSetter","LenientThis","TreatNonObjectAsNull","Unforgeable"].map(e=>[e,"Legacy"+e]),["NamedConstructor","LegacyFactoryFunction"],["OverrideBuiltins","LegacyOverrideBuiltIns"],["TreatNullAs","LegacyNullToEmptyString"]]);function N(e){for(const t of I){const n=P(e,t);if(n.length)return n}e.error("Expected identifiers, strings, decimals, or integers but none found")}class O extends E{static parse(e){const t={assign:e.consume("=")},n=se(new O({source:e.source,tokens:t}));return t.assign&&(t.secondaryName=e.consume(...I)),t.open=e.consume("("),t.open?(n.list=n.rhsIsList?N(e):X(e),t.close=e.consume(")")||e.error("Unexpected token in extended attribute argument list")):n.hasRhs&&!t.secondaryName&&e.error("No right hand side to extended attribute assignment"),n.this}get rhsIsList(){return this.tokens.assign&&!this.tokens.secondaryName}get rhsType(){return this.rhsIsList?this.list[0].tokens.value.type+"-list":this.tokens.secondaryName?this.tokens.secondaryName.type:null}}class j extends E{static parse(e){const t=e.consume("identifier");if(t)return new j({source:e.source,tokens:{name:t},params:O.parse(e)})}constructor({source:e,tokens:t,params:n}){super({source:e,tokens:t}),n.parent=this,Object.defineProperty(this,"params",{value:n})}get type(){return"extended-attribute"}get name(){return this.tokens.name.value}get rhs(){const{rhsType:e,tokens:t,list:n}=this.params;if(!e)return null;return{type:e,value:this.params.rhsIsList?n:V(t.secondaryName.value)}}get arguments(){const{rhsIsList:e,list:t}=this.params;return!t||e?[]:t}*validate(e){const{name:t}=this;if("LegacyNoInterfaceObject"===t){const e="`[LegacyNoInterfaceObject]` extended attribute is an undesirable feature that may be removed from Web IDL in the future. Refer to the [relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more information.";yield C(this.tokens.name,this,"no-nointerfaceobject",e,{level:"warning"})}else if(D.has(t)){const e=`\`[${t}]\` extended attribute is a legacy feature that is now renamed to \`[${D.get(t)}]\`. Refer to the [relevant upstream PR](https://github.com/heycam/webidl/pull/870) for more information.`;yield C(this.tokens.name,this,"renamed-legacy",e,{level:"warning",autofix:(n=this,()=>{const{name:e}=n;n.tokens.name.value=D.get(e),"TreatNullAs"===e&&(n.params.tokens={})})})}var n;for(const t of this.arguments)yield*t.validate(e)}}class z extends A{static parse(e){const t={};if(t.open=e.consume("["),!t.open)return new z({});const n=new z({source:e.source,tokens:t});return n.push(...Z(e,{parser:j.parse,listName:"extended attribute"})),t.close=e.consume("]")||e.error("Unexpected closing token of extended attribute"),n.length||e.error("Found an empty extended attribute"),e.probe("[")&&e.error("Illegal double extended attribute lists, consider merging them"),n}*validate(e){for(const t of this)yield*t.validate(e)}}function W(e,t){const n=e.consume("?");n&&(t.tokens.nullable=n),e.probe("?")&&e.error("Can't nullable more than once")}function M(e,t){let n=function(e,t){const n=e.consume("FrozenArray","ObservableArray","Promise","sequence","record");if(!n)return;const r=se(new U({source:e.source,tokens:{base:n}}));switch(r.tokens.open=e.consume("<")||e.error("No opening bracket after "+n.type),n.type){case"Promise":{e.probe("[")&&e.error("Promise type cannot have extended attribute");const n=ee(e,t)||e.error("Missing Promise subtype");r.subtype.push(n);break}case"sequence":case"FrozenArray":case"ObservableArray":{const o=Q(e,t)||e.error(`Missing ${n.type} subtype`);r.subtype.push(o);break}case"record":{e.probe("[")&&e.error("Record key cannot have extended attribute");const n=e.consume(...ce)||e.error("Record key must be one of: "+ce.join(", ")),o=new U({source:e.source,tokens:{base:n}});o.tokens.separator=e.consume(",")||e.error("Missing comma after record key type"),o.type=t;const s=Q(e,t)||e.error("Error parsing generic type record");r.subtype.push(o,s);break}}return r.idlType||e.error("Error parsing generic type "+n.type),r.tokens.close=e.consume(">")||e.error("Missing closing bracket after "+n.type),r.this}(e,t)||K(e);if(!n){const t=e.consume("identifier",...ce,...ae);if(!t)return;n=new U({source:e.source,tokens:{base:t}}),e.probe("<")&&e.error("Unsupported generic type "+t.value)}return"Promise"===n.generic&&e.probe("?")&&e.error("Promise type cannot be nullable"),n.type=t||null,W(e,n),n.nullable&&"any"===n.idlType&&e.error("Type `any` cannot be made nullable"),n}class U extends E{static parse(e,t){return M(e,t)||function(e,t){const n={};if(n.open=e.consume("("),!n.open)return;const r=se(new U({source:e.source,tokens:n}));for(r.type=t||null;;){const t=Q(e)||e.error("No type after open parenthesis or 'or' in union type");"any"===t.idlType&&e.error("Type `any` cannot be included in a union type"),"Promise"===t.generic&&e.error("Type `Promise` cannot be included in a union type"),r.subtype.push(t);const n=e.consume("or");if(!n)break;t.tokens.separator=n}return r.idlType.length<2&&e.error("At least two types are expected in a union type but found less"),n.close=e.consume(")")||e.error("Unterminated union type"),W(e,r),r.this}(e,t)}constructor({source:e,tokens:t}){super({source:e,tokens:t}),Object.defineProperty(this,"subtype",{value:[],writable:!0}),this.extAttrs=new z({})}get generic(){return this.subtype.length&&this.tokens.base?this.tokens.base.value:""}get nullable(){return Boolean(this.tokens.nullable)}get union(){return Boolean(this.subtype.length)&&!this.tokens.base}get idlType(){if(this.subtype.length)return this.subtype;return V([this.tokens.prefix,this.tokens.base,this.tokens.postfix].filter(e=>e).map(e=>e.value).join(" "))}*validate(e){if(yield*this.extAttrs.validate(e),"void"===this.idlType){const e="`void` is now replaced by `undefined`. Refer to the [relevant GitHub issue](https://github.com/heycam/webidl/issues/60) for more information.";yield C(this.tokens.base,this,"replace-void",e,{autofix:(t=this,()=>{t.tokens.base.value="undefined"})})}var t;const n=!this.union&&e.unique.get(this.idlType),r=this.union?this:n&&"typedef"===n.type?n.idlType:void 0;if(r&&this.nullable){const{reference:t}=R(r,e)||{};if(t){const e=(this.union?t:this).tokens.base,n="Nullable union cannot include a dictionary type.";yield C(e,this,"no-nullable-union-dict",n)}}else for(const t of this.subtype)yield*t.validate(e)}}class F extends E{static parse(e){const t=e.consume("=");if(!t)return null;const n=Y(e)||e.consume("string","null","[","{")||e.error("No value for default"),r=[n];if("["===n.type){const t=e.consume("]")||e.error("Default sequence value must be empty");r.push(t)}else if("{"===n.type){const t=e.consume("}")||e.error("Default dictionary value must be empty");r.push(t)}return new F({source:e.source,tokens:{assign:t},expression:r})}constructor({source:e,tokens:t,expression:n}){super({source:e,tokens:t}),n.parent=this,Object.defineProperty(this,"expression",{value:n})}get type(){return J(this.expression[0]).type}get value(){return J(this.expression[0]).value}get negative(){return J(this.expression[0]).negative}}class q extends E{static parse(e){const t=e.position,n={},r=se(new q({source:e.source,tokens:n}));return r.extAttrs=z.parse(e),n.optional=e.consume("optional"),r.idlType=Q(e,"argument-type"),r.idlType?(n.optional||(n.variadic=e.consume("...")),n.name=e.consume("identifier",...le),n.name?(r.default=n.optional?F.parse(e):null,r.this):e.unconsume(t)):e.unconsume(t)}get type(){return"argument"}get optional(){return!!this.tokens.optional}get variadic(){return!!this.tokens.variadic}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.idlType.validate(e);const t=R(this.idlType,e,{useNullableInner:!0});if(t)if(this.idlType.nullable){const e="Dictionary arguments cannot be nullable.";yield C(this.tokens.name,this,"no-nullable-dict-arg",e)}else if(this.optional){if(!this.default){const e="Optional dictionary arguments must have a default value of `{}`.";yield C(this.tokens.name,this,"dict-arg-default",e,{autofix:B(this)})}}else if(this.parent&&!T(t.dictionary,e)&&function(e){const t=e.parent.arguments||e.parent.list,n=t.indexOf(e);return!t.slice(n+1).some(e=>!e.optional)}(this)){const e="Dictionary argument must be optional if it has no required fields";yield C(this.tokens.name,this,"dict-arg-optional",e,{autofix:(n=this,()=>{const e=oe(n.idlType);n.tokens.optional={type:"optional",value:"optional",trivia:e.trivia},e.trivia=" ",B(n)()})})}var n}}function B(e){return()=>{e.default=F.parse(new fe(" = {}"))}}class H extends E{static parse(e,{special:t,regular:n}={}){const r={special:t},o=se(new H({source:e.source,tokens:r}));return t&&"stringifier"===t.value&&(r.termination=e.consume(";"),r.termination)?(o.arguments=[],o):(t||n||(r.special=e.consume("getter","setter","deleter")),o.idlType=ee(e)||e.error("Missing return type"),r.name=e.consume("identifier","includes"),r.open=e.consume("(")||e.error("Invalid operation"),o.arguments=X(e),r.close=e.consume(")")||e.error("Unterminated operation"),r.termination=e.consume(";")||e.error("Unterminated operation, expected `;`"),o.this)}get type(){return"operation"}get name(){const{name:e}=this.tokens;return e?V(e.value):""}get special(){return this.tokens.special?this.tokens.special.value:""}*validate(e){if(!this.name&&["","static"].includes(this.special)){const e="Regular or static operations must have both a return type and an identifier.";yield C(this.tokens.open,this,"incomplete-op",e)}this.idlType&&(yield*this.idlType.validate(e));for(const t of this.arguments)yield*t.validate(e)}}class G extends E{static parse(e,{special:t,noInherit:n=!1,readonly:r=!1}={}){const o=e.position,s={special:t},i=se(new G({source:e.source,tokens:s}));if(t||n||(s.special=e.consume("inherit")),"inherit"===i.special&&e.probe("readonly")&&e.error("Inherited attributes cannot be read-only"),s.readonly=e.consume("readonly"),r&&!s.readonly&&e.probe("attribute")&&e.error("Attributes must be readonly in this context"),s.base=e.consume("attribute"),s.base){switch(i.idlType=Q(e,"attribute-type")||e.error("Attribute lacks a type"),i.idlType.generic){case"sequence":case"record":e.error(`Attributes cannot accept ${i.idlType.generic} types`)}return s.name=e.consume("identifier","async","required")||e.error("Attribute lacks a name"),s.termination=e.consume(";")||e.error("Unterminated attribute, expected `;`"),i.this}e.unconsume(o)}get type(){return"attribute"}get special(){return this.tokens.special?this.tokens.special.value:""}get readonly(){return!!this.tokens.readonly}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.extAttrs.validate(e),yield*this.idlType.validate(e)}}function V(e){return e.startsWith("_")?e.slice(1):e}function Z(e,{parser:t,allowDangler:n,listName:r="list"}){const o=t(e);if(!o)return[];o.tokens.separator=e.consume(",");const s=[o];for(;o.tokens.separator;){const o=t(e);if(!o){n||e.error("Trailing comma in "+r);break}if(o.tokens.separator=e.consume(","),s.push(o),!o.tokens.separator)break}return s}function Y(e){return e.consume("true","false","Infinity","-Infinity","NaN","decimal","integer")}function J({type:e,value:t}){switch(e){case"true":case"false":return{type:"boolean",value:"true"===e};case"Infinity":case"-Infinity":return{type:"Infinity",negative:e.startsWith("-")};case"[":return{type:"sequence",value:[]};case"{":return{type:"dictionary"};case"decimal":case"integer":return{type:"number",value:t};case"string":return{type:"string",value:t.slice(1,-1)};default:return{type:e}}}function K(e){const{source:t}=e,n=function(){const n=e.consume("unsigned"),r=e.consume("short","long");if(r){const o=e.consume("long");return new U({source:t,tokens:{prefix:n,base:r,postfix:o}})}n&&e.error("Failed to parse integer type")}()||function(){const n=e.consume("unrestricted"),r=e.consume("float","double");if(r)return new U({source:t,tokens:{prefix:n,base:r}});n&&e.error("Failed to parse float type")}();if(n)return n;const r=e.consume("bigint","boolean","byte","octet","undefined");return r?new U({source:t,tokens:{base:r}}):void 0}function X(e){return Z(e,{parser:q.parse,listName:"arguments list"})}function Q(e,t){const n=z.parse(e),r=U.parse(e,t);return r&&(se(r).extAttrs=n),r}function ee(e,t){const n=U.parse(e,t||"return-type");if(n)return n;const r=e.consume("void");if(r){const t=new U({source:e.source,tokens:{base:r}});return t.type="return-type",t}}function te(e){const t=e.consume("stringifier");if(!t)return;return G.parse(e,{special:t})||H.parse(e,{special:t})||e.error("Unterminated stringifier")}function ne(e){const t=e.split("\n");if(t.length){const e=t[t.length-1].match(/^\s+/);if(e)return e[0]}return""}function re(e){return()=>{if(e.extAttrs.length){const t=new fe("Exposed=Window,"),n=j.parse(t);n.tokens.separator=t.consume(",");const r=e.extAttrs[0];/^\s/.test(r.tokens.name.trivia)||(r.tokens.name.trivia=" "+r.tokens.name.trivia),e.extAttrs.unshift(n)}else{se(e).extAttrs=z.parse(new fe("[Exposed=Window]"));const t=e.tokens.base.trivia;e.extAttrs.tokens.open.trivia=t,e.tokens.base.trivia="\n"+ne(t)}}}function oe(e){if(e.extAttrs.length)return e.extAttrs.tokens.open;if("operation"===e.type&&!e.special)return oe(e.idlType);return Object.values(e.tokens).sort((e,t)=>e.index-t.index)[0]}function se(e,t){return t||(t=e),e?new Proxy(e,{get(e,t){const n=e[t];return Array.isArray(n)?se(n,e):n},set(e,n,r){if(e[n]=r,!r)return!0;if(Array.isArray(r))for(const e of r)void 0!==e.parent&&(e.parent=t);else void 0!==r.parent&&(r.parent=t);return!0}}):e}const ie={decimal:/-?(?=[0-9]*\.|[0-9]+[eE])(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/y,integer:/-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/y,identifier:/[_-]?[A-Za-z][0-9A-Z_a-z-]*/y,string:/"[^"]*"/y,whitespace:/[\t\n\r ]+/y,comment:/((\/(\/.*|\*([^*]|\*[^/])*\*\/)[\t\n\r ]*)+)/y,other:/[^\t\n\r 0-9A-Za-z]/y},ae=["ArrayBuffer","DataView","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","Uint8ClampedArray","Float32Array","Float64Array","any","object","symbol"],ce=["ByteString","DOMString","USVString"],le=["async","attribute","callback","const","constructor","deleter","dictionary","enum","getter","includes","inherit","interface","iterable","maplike","namespace","partial","required","setlike","setter","static","stringifier","typedef","unrestricted"],ue=["-Infinity","FrozenArray","Infinity","NaN","ObservableArray","Promise","bigint","boolean","byte","double","false","float","long","mixin","null","octet","optional","or","readonly","record","sequence","short","true","undefined","unsigned","void"].concat(le,ce,ae),de=["(",")",",","...",":",";","<","=",">","?","[","]","{","}"],pe=["_constructor","toString","_toString"];class fe{constructor(e){this.source=function(e){const t=[];let n=0,r="",o=1,s=0;for(;n<e.length;){const a=e.charAt(n);let c=-1;if(/[\t\n\r ]/.test(a)?c=i("whitespace",{noFlushTrivia:!0}):"/"===a&&(c=i("comment",{noFlushTrivia:!0})),-1!==c){const e=t.pop().value;o+=(e.match(/\n/g)||[]).length,r+=e,s-=1}else if(/[-0-9.A-Z_a-z]/.test(a)){if(c=i("decimal"),-1===c&&(c=i("integer")),-1===c){c=i("identifier");const e=t.length-1,n=t[e];if(-1!==c){if(pe.includes(n.value)){const r=V(n.value)+" is a reserved identifier and must not be used.";throw new he(_(t,e,null,r))}ue.includes(n.value)&&(n.type=n.value)}}}else'"'===a&&(c=i("string"));for(const i of de)if(e.startsWith(i,n)){t.push({type:i,value:i,trivia:r,line:o,index:s}),r="",n+=i.length,c=n;break}if(-1===c&&(c=i("other")),-1===c)throw new Error("Token stream not progressing");n=c,s+=1}return t.push({type:"eof",value:"",trivia:r}),t;function i(i,{noFlushTrivia:a}={}){const c=ie[i];c.lastIndex=n;const l=c.exec(e);return l?(t.push({type:i,value:l[0],trivia:r,line:o,index:s}),a||(r=""),c.lastIndex):-1}}(e),this.position=0}error(e){throw new he(_(this.source,this.position,this.current,e))}probe(e){return this.source.length>this.position&&this.source[this.position].type===e}consume(...e){for(const t of e){if(!this.probe(t))continue;const e=this.source[this.position];return this.position++,e}}unconsume(e){this.position=e}}class he extends Error{constructor({message:e,bareMessage:t,context:n,line:r,sourceName:o,input:s,tokens:i}){super(e),this.name="WebIDLParseError",this.bareMessage=t,this.context=n,this.line=r,this.sourceName=o,this.input=s,this.tokens=i}}class me extends L{static parse(e){const t=e.consume("string");if(t)return new me({source:e.source,tokens:{value:t}})}get type(){return"enum-value"}get value(){return super.value.slice(1,-1)}}class ge extends E{static parse(e){const t={};if(t.base=e.consume("enum"),!t.base)return;t.name=e.consume("identifier")||e.error("No name for enum");const n=se(new ge({source:e.source,tokens:t}));return e.current=n.this,t.open=e.consume("{")||e.error("Bodyless enum"),n.values=Z(e,{parser:me.parse,allowDangler:!0,listName:"enumeration"}),e.probe("string")&&e.error("No comma between enum values"),t.close=e.consume("}")||e.error("Unexpected value in enum"),n.values.length||e.error("No value in enum"),t.termination=e.consume(";")||e.error("No semicolon after enum"),n.this}get type(){return"enum"}get name(){return V(this.tokens.name.value)}}class be extends E{static parse(e){const t=e.consume("identifier");if(!t)return;const n={target:t};if(n.includes=e.consume("includes"),n.includes)return n.mixin=e.consume("identifier")||e.error("Incomplete includes statement"),n.termination=e.consume(";")||e.error("No terminating ; for includes statement"),new be({source:e.source,tokens:n});e.unconsume(t.index)}get type(){return"includes"}get target(){return V(this.tokens.target.value)}get includes(){return V(this.tokens.mixin.value)}}class we extends E{static parse(e){const t={},n=se(new we({source:e.source,tokens:t}));if(t.base=e.consume("typedef"),t.base)return n.idlType=Q(e,"typedef-type")||e.error("Typedef lacks a type"),t.name=e.consume("identifier")||e.error("Typedef lacks a name"),e.current=n.this,t.termination=e.consume(";")||e.error("Unterminated typedef, expected `;`"),n.this}get type(){return"typedef"}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.idlType.validate(e)}}class ye extends E{static parse(e,t){const n={base:t},r=se(new ye({source:e.source,tokens:n}));return n.name=e.consume("identifier")||e.error("Callback lacks a name"),e.current=r.this,n.assign=e.consume("=")||e.error("Callback lacks an assignment"),r.idlType=ee(e)||e.error("Callback lacks a return type"),n.open=e.consume("(")||e.error("Callback lacks parentheses for arguments"),r.arguments=X(e),n.close=e.consume(")")||e.error("Unterminated callback"),n.termination=e.consume(";")||e.error("Unterminated callback, expected `;`"),r.this}get type(){return"callback"}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.extAttrs.validate(e),yield*this.idlType.validate(e)}}class ve extends E{static parse(e,t,{type:n,inheritable:r,allowedMembers:o}){const{tokens:s}=t;for(s.name=e.consume("identifier")||e.error("Missing name in "+t.type),e.current=t,t=se(t),r&&Object.assign(s,function(e){const t=e.consume(":");return t?{colon:t,inheritance:e.consume("identifier")||e.error("Inheritance lacks a type")}:{}}(e)),s.open=e.consume("{")||e.error("Bodyless "+n),t.members=[];;){if(s.close=e.consume("}"),s.close)return s.termination=e.consume(";")||e.error("Missing semicolon after "+n),t.this;const r=z.parse(e);let i;for(const[t,...n]of o)if(i=se(t(e,...n)),i)break;i||e.error("Unknown member"),i.extAttrs=r,t.members.push(i.this)}}get partial(){return!!this.tokens.partial}get name(){return V(this.tokens.name.value)}get inheritance(){return this.tokens.inheritance?V(this.tokens.inheritance.value):null}*validate(e){for(const t of this.members)t.validate&&(yield*t.validate(e))}}class ke extends E{static parse(e){const t={};if(t.base=e.consume("const"),!t.base)return;let n=K(e);if(!n){const t=e.consume("identifier")||e.error("Const lacks a type");n=new U({source:e.source,tokens:{base:t}})}e.probe("?")&&e.error("Unexpected nullable constant type"),n.type="const-type",t.name=e.consume("identifier")||e.error("Const lacks a name"),t.assign=e.consume("=")||e.error("Const lacks value assignment"),t.value=Y(e)||e.error("Const lacks a value"),t.termination=e.consume(";")||e.error("Unterminated const, expected `;`");const r=new ke({source:e.source,tokens:t});return se(r).idlType=n,r}get type(){return"const"}get name(){return V(this.tokens.name.value)}get value(){return J(this.tokens.value)}}class xe extends E{static parse(e){const t=e.position,n={},r=se(new xe({source:e.source,tokens:n}));if(n.readonly=e.consume("readonly"),n.readonly||(n.async=e.consume("async")),n.base=n.readonly?e.consume("maplike","setlike"):n.async?e.consume("iterable"):e.consume("iterable","maplike","setlike"),!n.base)return void e.unconsume(t);const{type:o}=r,s="maplike"===o,i=s||"iterable"===o,a=r.async&&"iterable"===o;n.open=e.consume("<")||e.error(`Missing less-than sign \`<\` in ${o} declaration`);const c=Q(e)||e.error(`Missing a type argument in ${o} declaration`);return r.idlType=[c],r.arguments=[],i&&(c.tokens.separator=e.consume(","),c.tokens.separator?r.idlType.push(Q(e)):s&&e.error(`Missing second type argument in ${o} declaration`)),n.close=e.consume(">")||e.error(`Missing greater-than sign \`>\` in ${o} declaration`),e.probe("(")&&(a?(n.argsOpen=e.consume("("),r.arguments.push(...X(e)),n.argsClose=e.consume(")")||e.error("Unterminated async iterable argument list")):e.error("Arguments are only allowed for `async iterable`")),n.termination=e.consume(";")||e.error(`Missing semicolon after ${o} declaration`),r.this}get type(){return this.tokens.base.value}get readonly(){return!!this.tokens.readonly}get async(){return!!this.tokens.async}*validate(e){for(const t of this.idlType)yield*t.validate(e);for(const t of this.arguments)yield*t.validate(e)}}class $e extends E{static parse(e){const t=e.consume("constructor");if(!t)return;const n={base:t};n.open=e.consume("(")||e.error("No argument list in constructor");const r=X(e);n.close=e.consume(")")||e.error("Unterminated constructor"),n.termination=e.consume(";")||e.error("No semicolon after constructor");const o=new $e({source:e.source,tokens:n});return se(o).arguments=r,o}get type(){return"constructor"}*validate(e){this.idlType&&(yield*this.idlType.validate(e));for(const t of this.arguments)yield*t.validate(e)}}function Se(e){const t=e.consume("static");if(!t)return;return G.parse(e,{special:t})||H.parse(e,{special:t})||e.error("No body in static member")}class _e extends ve{static parse(e,t,{partial:n=null}={}){const r={partial:n,base:t};return ve.parse(e,new _e({source:e.source,tokens:r}),{type:"interface",inheritable:!n,allowedMembers:[[ke.parse],[$e.parse],[Se],[te],[xe.parse],[G.parse],[H.parse]]})}get type(){return"interface"}*validate(e){if(yield*this.extAttrs.validate(e),!this.partial&&this.extAttrs.every(e=>"Exposed"!==e.name)){const e="Interfaces must have `[Exposed]` extended attribute. To fix, add, for example, `[Exposed=Window]`. Please also consider carefully if your interface should also be exposed in a Worker scope. Refer to the [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) for more information.";yield C(this.tokens.name,this,"require-exposed",e,{autofix:re(this)})}const t=this.extAttrs.filter(e=>"Constructor"===e.name);for(const e of t){const t="Constructors should now be represented as a `constructor()` operation on the interface instead of `[Constructor]` extended attribute. Refer to the [WebIDL spec section on constructor operations](https://heycam.github.io/webidl/#idl-constructors) for more information.";yield C(e.tokens.name,this,"constructor-member",t,{autofix:Ce(this,e)})}if(this.extAttrs.some(e=>"Global"===e.name)){const e=this.extAttrs.filter(e=>"LegacyFactoryFunction"===e.name);for(const t of e){const e="Interfaces marked as `[Global]` cannot have factory functions.";yield C(t.tokens.name,this,"no-constructible-global",e)}const t=this.members.filter(e=>"constructor"===e.type);for(const e of t){const t="Interfaces marked as `[Global]` cannot have constructors.";yield C(e.tokens.base,this,"no-constructible-global",t)}}yield*super.validate(e),this.partial||(yield*function*(e,t){const n=new Set(i(t).map(e=>e.name)),r=e.partials.get(t.name)||[],o=e.mixinMap.get(t.name)||[];for(const e of[...r,...o]){const r=i(e);yield*s(r,n,e,t);for(const e of r)n.add(e.name)}function*s(e,t,n,r){for(const o of e){const{name:e}=o;if(e&&t.has(e)){const t=`The operation "${e}" has already been defined for the base interface "${r.name}" either in itself or in a mixin`;yield C(o.tokens.name,n,"no-cross-overload",t)}}}function i(e){return e.members.filter(({type:e})=>"operation"===e)}}(e,this))}}function Ce(e,t){return e=se(e),()=>{const n=ne(e.extAttrs.tokens.open.trivia),r=e.members.length?ne(oe(e.members[0]).trivia):function(e){const t=ne(e),n=t.includes("\t")?"\t":" ";return t+n}(n),o=$e.parse(new fe(`\n${r}constructor();`));o.extAttrs=new z({}),se(o).arguments=t.arguments;const s=function(e,t){const n=e.slice().reverse().findIndex(t);return-1===n?n:e.length-n-1}(e.members,e=>"constructor"===e.type);e.members.splice(s+1,0,o);const{close:i}=e.tokens;i.trivia.includes("\n")||(i.trivia+="\n"+n);const{extAttrs:a}=e,c=a.indexOf(t),l=a.splice(c,1);a.length?a.length===c?a[c-1].tokens.separator=void 0:a[c].tokens.name.trivia.trim()||(a[c].tokens.name.trivia=l[0].tokens.name.trivia):a.tokens.open=a.tokens.close=void 0}}class Ee extends ve{static parse(e,t,{partial:n}={}){const r={partial:n,base:t};if(r.mixin=e.consume("mixin"),r.mixin)return ve.parse(e,new Ee({source:e.source,tokens:r}),{type:"interface mixin",allowedMembers:[[ke.parse],[te],[G.parse,{noInherit:!0}],[H.parse,{regular:!0}]]})}get type(){return"interface mixin"}}class Re extends E{static parse(e){const t={},n=se(new Re({source:e.source,tokens:t}));return n.extAttrs=z.parse(e),t.required=e.consume("required"),n.idlType=Q(e,"dictionary-type")||e.error("Dictionary member lacks a type"),t.name=e.consume("identifier")||e.error("Dictionary member lacks a name"),n.default=F.parse(e),t.required&&n.default&&e.error("Required member must not have a default"),t.termination=e.consume(";")||e.error("Unterminated dictionary member, expected `;`"),n.this}get type(){return"field"}get name(){return V(this.tokens.name.value)}get required(){return!!this.tokens.required}*validate(e){yield*this.idlType.validate(e)}}class Te extends ve{static parse(e,{partial:t}={}){const n={partial:t};if(n.base=e.consume("dictionary"),n.base)return ve.parse(e,new Te({source:e.source,tokens:n}),{type:"dictionary",inheritable:!t,allowedMembers:[[Re.parse]]})}get type(){return"dictionary"}}class Ae extends ve{static parse(e,{partial:t}={}){const n={partial:t};if(n.base=e.consume("namespace"),n.base)return ve.parse(e,new Ae({source:e.source,tokens:n}),{type:"namespace",allowedMembers:[[G.parse,{noInherit:!0,readonly:!0}],[H.parse,{regular:!0}]]})}get type(){return"namespace"}*validate(e){if(!this.partial&&this.extAttrs.every(e=>"Exposed"!==e.name)){const e="Namespaces must have [Exposed] extended attribute. To fix, add, for example, [Exposed=Window]. Please also consider carefully if your namespace should also be exposed in a Worker scope. Refer to the [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) for more information.";yield C(this.tokens.name,this,"require-exposed",e,{autofix:re(this)})}yield*super.validate(e)}}class Le extends ve{static parse(e,t,{partial:n=null}={}){const r={callback:t};if(r.base=e.consume("interface"),r.base)return ve.parse(e,new Le({source:e.source,tokens:r}),{type:"callback interface",inheritable:!n,allowedMembers:[[ke.parse],[H.parse,{regular:!0}]]})}get type(){return"callback interface"}}function Pe(e,t){const n=e.source;function r(t){e.error(t)}function o(...t){return e.consume(...t)}function s(t){const n=o("interface");if(!n)return;return Ee.parse(e,n,t)||_e.parse(e,n,t)||r("Interface has no proper body")}function i(){return function(){const t=o("callback");if(t)return e.probe("interface")?Le.parse(e,t):ye.parse(e,t)}()||s()||function(){const t=o("partial");if(t)return Te.parse(e,{partial:t})||s({partial:t})||Ae.parse(e,{partial:t})||r("Partial doesn't apply to anything")}()||Te.parse(e)||ge.parse(e)||we.parse(e)||be.parse(e)||Ae.parse(e)}const a=function(){if(!n.length)return[];const s=[];for(;;){const t=z.parse(e),n=i();if(!n){t.length&&r("Stray extended attributes");break}se(n).extAttrs=t,s.push(n)}const a=o("eof");return t.concrete&&s.push(a),s}();return e.position<n.length&&r("Unrecognised tokens"),a}function Ie(e){return e}const De={wrap:e=>e.join(""),trivia:Ie,name:Ie,reference:Ie,type:Ie,generic:Ie,nameless:Ie,inheritance:Ie,definition:Ie,extendedAttribute:Ie,extendedAttributeReference:Ie};function Ne(e,t){const n=new Map,r=e.filter(e=>"includes"===e.type);for(const e of r){const r=t.get(e.includes);if(!r)continue;const o=n.get(e.target);o?o.push(r):n.set(e.target,[r])}return n}function*Oe(e){const t=function(e){const t=new Map,n=new Set,r=new Map;for(const o of e)if(o.partial){const e=r.get(o.name);e?e.push(o):r.set(o.name,[o])}else o.name&&(t.has(o.name)?n.add(o):t.set(o.name,o));return{all:e,unique:t,partials:r,duplicates:n,mixinMap:Ne(e,t),cache:{typedefIncludesDictionary:new WeakMap,dictionaryIncludesRequiredField:new WeakMap}}}(e);for(const e of t.all)e.validate&&(yield*e.validate(t));yield*function*({unique:e,duplicates:t}){for(const n of t){const{name:t}=n,r=`The name "${t}" of type "${e.get(t).type}" was already seen`;yield C(n.tokens.name,n,"no-duplicate",r)}}(t)}var je=Object.freeze({__proto__:null,parse:function(e,t={}){const n=new fe(e);return void 0!==t.sourceName&&(n.source.name=t.sourceName),Pe(n,t)},write:function(e,{templates:t=De}={}){function n(e,{unescaped:n,context:r}){return n||(n=e.startsWith("_")?e.slice(1):e),t.reference(e,n,r)}function r(e,n=Ie,...r){if(!e)return"";const o=n(e.value,...r);return t.wrap([t.trivia(e.trivia),o])}function o(e,t){return r(e,n,{context:t})}function s(e,n){return r(e,t.name,n)}function i(e){if(e.union||e.generic)return t.wrap([r(e.tokens.base,t.generic),r(e.tokens.open),...e.subtype.map(a),r(e.tokens.close)]);const o=e.tokens.prefix||e.tokens.base,s=e.tokens.prefix?[e.tokens.prefix.value,t.trivia(e.tokens.base.trivia)]:[],i=n(t.wrap([...s,e.tokens.base.value,r(e.tokens.postfix)]),{unescaped:e.idlType,context:e});return t.wrap([t.trivia(o.trivia),i])}function a(e){return t.wrap([p(e.extAttrs),i(e),r(e.tokens.nullable),r(e.tokens.separator)])}function c(e){return e?t.wrap([r(e.tokens.assign),...e.expression.map(e=>r(e))]):""}function l(e){return t.wrap([p(e.extAttrs),r(e.tokens.optional),t.type(a(e.idlType)),r(e.tokens.variadic),s(e.tokens.name,{data:e}),c(e.default),r(e.tokens.separator)])}function u(e){return t.wrap([r(e.tokens.value),r(e.tokens.separator)])}function d(e){const{rhsType:n}=e.params;return t.wrap([t.trivia(e.tokens.name.trivia),t.extendedAttribute(t.wrap([t.extendedAttributeReference(e.name),r(e.params.tokens.assign),o(e.params.tokens.secondaryName,e),r(e.params.tokens.open),...e.params.list?e.params.list.map("identifier-list"===n?n=>function(e,n){return t.wrap([o(e.tokens.value,n),r(e.tokens.separator)])}(n,e):n&&n.endsWith("-list")?u:l):[],r(e.params.tokens.close)])),r(e.tokens.separator)])}function p(e){return e.length?t.wrap([r(e.tokens.open),...e.map(d),r(e.tokens.close)]):""}function f(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.callback),r(e.tokens.partial),r(e.tokens.base),r(e.tokens.mixin),s(e.tokens.name,{data:e}),(o=e,o.tokens.inheritance?t.wrap([r(o.tokens.colon),t.trivia(o.tokens.inheritance.trivia),t.inheritance(n(o.tokens.inheritance.value,{context:o}))]):""),r(e.tokens.open),g(e.members,e),r(e.tokens.close),r(e.tokens.termination)]),{data:e});var o}function h(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.readonly),r(e.tokens.async),r(e.tokens.base,t.generic),r(e.tokens.open),t.wrap(e.idlType.map(a)),r(e.tokens.close),r(e.tokens.argsOpen),t.wrap(e.arguments.map(l)),r(e.tokens.argsClose),r(e.tokens.termination)]),{data:e,parent:n})}t=Object.assign({},De,t);const m={interface:f,"interface mixin":f,namespace:f,operation:function(e,n){const o=e.idlType?[t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.open),t.wrap(e.arguments.map(l)),r(e.tokens.close)]:[];return t.definition(t.wrap([p(e.extAttrs),e.tokens.name?r(e.tokens.special):r(e.tokens.special,t.nameless,{data:e,parent:n}),...o,r(e.tokens.termination)]),{data:e,parent:n})},attribute:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.special),r(e.tokens.readonly),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.termination)]),{data:e,parent:n})},constructor:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base,t.nameless,{data:e,parent:n}),r(e.tokens.open),t.wrap(e.arguments.map(l)),r(e.tokens.close),r(e.tokens.termination)]),{data:e,parent:n})},dictionary:f,field:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.required),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),c(e.default),r(e.tokens.termination)]),{data:e,parent:n})},const:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.assign),r(e.tokens.value),r(e.tokens.termination)]),{data:e,parent:n})},typedef:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e}),r(e.tokens.termination)]),{data:e})},includes:function(e){return t.definition(t.wrap([p(e.extAttrs),o(e.tokens.target,e),r(e.tokens.includes),o(e.tokens.mixin,e),r(e.tokens.termination)]),{data:e})},callback:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),s(e.tokens.name,{data:e}),r(e.tokens.assign),t.type(a(e.idlType)),r(e.tokens.open),...e.arguments.map(l),r(e.tokens.close),r(e.tokens.termination)]),{data:e})},enum:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),s(e.tokens.name,{data:e}),r(e.tokens.open),g(e.values,e),r(e.tokens.close),r(e.tokens.termination)]),{data:e})},"enum-value":function(e,n){return t.wrap([t.trivia(e.tokens.value.trivia),t.definition(t.wrap(['"',t.name(e.value,{data:e,parent:n}),'"']),{data:e,parent:n}),r(e.tokens.separator)])},iterable:h,maplike:h,setlike:h,"callback interface":f,eof:function(e){return t.trivia(e.trivia)}};function g(e,n){if(!e)return;const r=e.map(e=>function(e,t){if(!m[e.type])throw new Error(`Type "${e.type}" is unsupported`);return m[e.type](e,t)}(e,n));return t.wrap(r)}return g(e)},validate:function(e){return[...Oe((t=e,t.flat?t.flat():[].concat(...t)))];var t},WebIDLParseError:he});var ze,We=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(ze={exports:{}},ze.exports),ze.exports);const Me=/[&<>"']/,Ue=/[&<>"']/g,Fe=/[<>"']|&(?!#?\w+;)/,qe=/[<>"']|&(?!#?\w+;)/g,Be={"&":"&","<":"<",">":">",'"':""","'":"'"},He=e=>Be[e];const Ge=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function Ve(e){return e.replace(Ge,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const Ze=/(^|[^\[])\^/g;const Ye=/[^\w:]/g,Je=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const Ke={},Xe=/^[^:]+:\/*[^/]*$/,Qe=/^([^:]+:)[\s\S]*$/,et=/^([^:]+:\/*[^/]*)[\s\S]*$/;function tt(e,t){Ke[" "+e]||(Xe.test(e)?Ke[" "+e]=e+"/":Ke[" "+e]=nt(e,"/",!0));const n=-1===(e=Ke[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(Qe,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(et,"$1")+t:e+t}function nt(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const s=e.charAt(r-o-1);if(s!==t||n){if(s===t||!n)break;o++}else o++}return e.substr(0,r-o)}var rt={escape:function(e,t){if(t){if(Me.test(e))return e.replace(Ue,He)}else if(Fe.test(e))return e.replace(qe,He);return e},unescape:Ve,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(Ze,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(Ve(n)).replace(Ye,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!Je.test(n)&&(n=tt(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:tt,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:nt,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:ot}=We,{rtrim:st,splitCells:it,escape:at,findClosingBracket:ct}=rt;function lt(e,t,n){const r=t.href,o=t.title?at(t.title):null,s=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:s}:{type:"image",raw:n,href:r,title:o,text:at(s)}}var ut=class{constructor(e){this.options=e||ot}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:st(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=st(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:it(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=it(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},s=t[0].match(this.rules.block.item);let i,a,c,l,u,d,p,f,h,m=!1,g=s.length;c=this.rules.block.listItemStart.exec(s[0]);for(let t=0;t<g;t++){if(i=s[t],e=i,this.options.pedantic||(h=i.match(new RegExp("\\n\\s*\\n {0,"+(c[0].length-1)+"}\\S")),h&&(u=i.length-h.index+s.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),i=i.substring(0,h.index),e=i,g=t+1)),t!==g-1){if(l=this.rules.block.listItemStart.exec(s[t+1]),this.options.pedantic?l[1].length>c[1].length:l[1].length>=c[0].length||l[1].length>3){s.splice(t,2,s[t]+(!this.options.pedantic&&l[1].length<c[0].length&&!s[t].match(/\n$/)?"":"\n")+s[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?l[2][l[2].length-1]!==n[n.length-1]:r===(1===l[2].length))&&(u=s.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),c=l}a=i.length,i=i.replace(/^ *([*+-]|\d+[.)]) ?/,""),~i.indexOf("\n ")&&(a-=i.length,i=this.options.pedantic?i.replace(/^ {1,4}/gm,""):i.replace(new RegExp("^ {1,"+a+"}","gm"),"")),i=st(i,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(p=/^\[[ xX]\] /.test(i),f=void 0,p&&(f=" "!==i[1],i=i.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:p,checked:f,loose:d,text:i})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):at(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:it(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=it(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:at(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):at(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=st(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=ct(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),lt(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return lt(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,s,i=n,a=0;const c="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=c.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(s=o.length,r[3]||r[4])i+=s;else if(!((r[5]||r[6])&&n%3)||(n+s)%3){if(i-=s,!(i>0)){if(i+a-s<=0&&!t.slice(c.lastIndex).match(c)&&(s=Math.min(s,s+i+a)),Math.min(n,s)%2)return{type:"em",raw:e.slice(0,n+r.index+s+1),text:e.slice(1,n+r.index+s)};if(Math.min(n,s)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+s+1),text:e.slice(2,n+r.index+s-1)}}}else a+=s}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=at(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=at(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=at(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=at(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=at(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):at(r[0]):r[0]:at(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:dt,edit:pt,merge:ft}=rt,ht={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:dt,table:dt,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ht.def=pt(ht.def).replace("label",ht._label).replace("title",ht._title).getRegex(),ht.bullet=/(?:[*+-]|\d{1,9}[.)])/,ht.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ht.item=pt(ht.item,"gm").replace(/bull/g,ht.bullet).getRegex(),ht.listItemStart=pt(/^( *)(bull) */).replace("bull",ht.bullet).getRegex(),ht.list=pt(ht.list).replace(/bull/g,ht.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ht.def.source+")").getRegex(),ht._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ht._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ht.html=pt(ht.html,"i").replace("comment",ht._comment).replace("tag",ht._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ht.paragraph=pt(ht._paragraph).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.blockquote=pt(ht.blockquote).replace("paragraph",ht.paragraph).getRegex(),ht.normal=ft({},ht),ht.gfm=ft({},ht.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ht.gfm.nptable=pt(ht.gfm.nptable).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.gfm.table=pt(ht.gfm.table).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.pedantic=ft({},ht.normal,{html:pt("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ht._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:dt,paragraph:pt(ht.normal._paragraph).replace("hr",ht.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ht.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const mt={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:dt,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:dt,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};mt.punctuation=pt(mt.punctuation).replace(/punctuation/g,mt._punctuation).getRegex(),mt.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,mt.escapedEmSt=/\\\*|\\_/g,mt._comment=pt(ht._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),mt.emStrong.lDelim=pt(mt.emStrong.lDelim).replace(/punct/g,mt._punctuation).getRegex(),mt.emStrong.rDelimAst=pt(mt.emStrong.rDelimAst,"g").replace(/punct/g,mt._punctuation).getRegex(),mt.emStrong.rDelimUnd=pt(mt.emStrong.rDelimUnd,"g").replace(/punct/g,mt._punctuation).getRegex(),mt._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,mt._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,mt._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,mt.autolink=pt(mt.autolink).replace("scheme",mt._scheme).replace("email",mt._email).getRegex(),mt._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,mt.tag=pt(mt.tag).replace("comment",mt._comment).replace("attribute",mt._attribute).getRegex(),mt._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,mt._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,mt._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,mt.link=pt(mt.link).replace("label",mt._label).replace("href",mt._href).replace("title",mt._title).getRegex(),mt.reflink=pt(mt.reflink).replace("label",mt._label).getRegex(),mt.reflinkSearch=pt(mt.reflinkSearch,"g").replace("reflink",mt.reflink).replace("nolink",mt.nolink).getRegex(),mt.normal=ft({},mt),mt.pedantic=ft({},mt.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:pt(/^!?\[(label)\]\((.*?)\)/).replace("label",mt._label).getRegex(),reflink:pt(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",mt._label).getRegex()}),mt.gfm=ft({},mt.normal,{escape:pt(mt.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),mt.gfm.url=pt(mt.gfm.url,"i").replace("email",mt.gfm._extended_email).getRegex(),mt.breaks=ft({},mt.gfm,{br:pt(mt.br).replace("{2,}","*").getRegex(),text:pt(mt.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var gt={block:ht,inline:mt};const{defaults:bt}=We,{block:wt,inline:yt}=gt,{repeatString:vt}=rt;function kt(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function xt(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var $t=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||bt,this.options.tokenizer=this.options.tokenizer||new ut,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:wt.normal,inline:yt.normal};this.options.pedantic?(t.block=wt.pedantic,t.inline=yt.pedantic):this.options.gfm&&(t.block=wt.gfm,this.options.breaks?t.inline=yt.breaks:t.inline=yt.gfm),this.tokenizer.rules=t}static get rules(){return{block:wt,inline:yt}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,s,i;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),i=t[t.length-1],i&&"paragraph"===i.type?(i.raw+="\n"+r.raw,i.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),s=r.items.length,o=0;o<s;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),i=t[t.length-1],i&&"text"===i.type?(i.raw+="\n"+r.raw,i.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,s,i;const a=e.length;for(t=0;t<a;t++)switch(i=e[t],i.type){case"paragraph":case"text":case"heading":i.tokens=[],this.inlineTokens(i.text,i.tokens);break;case"table":for(i.tokens={header:[],cells:[]},o=i.header.length,n=0;n<o;n++)i.tokens.header[n]=[],this.inlineTokens(i.header[n],i.tokens.header[n]);for(o=i.cells.length,n=0;n<o;n++)for(s=i.cells[n],i.tokens.cells[n]=[],r=0;r<s.length;r++)i.tokens.cells[n][r]=[],this.inlineTokens(s[r],i.tokens.cells[n][r]);break;case"blockquote":this.inline(i.tokens);break;case"list":for(o=i.items.length,n=0;n<o;n++)this.inline(i.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,s,i,a,c,l=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(l));)e.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(l=l.slice(0,i.index)+"["+vt("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(l));)l=l.slice(0,i.index)+"["+vt("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.escapedEmSt.exec(l));)l=l.slice(0,i.index)+"++"+l.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(c=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const s=t[t.length-1];s&&"text"===o.type&&"text"===s.type?(s.raw+=o.raw,s.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,l,c))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,xt))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,xt))){if(o=this.tokenizer.inlineText(e,r,kt))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(c=o.raw.slice(-1)),a=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=o.raw,s.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:St}=We,{cleanUrl:_t,escape:Ct}=rt;var Et=class{constructor(e){this.options=e||St}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+Ct(r,!0)+'">'+(n?e:Ct(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:Ct(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=_t(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+Ct(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=_t(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},Rt=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},Tt=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:At}=We,{unescape:Lt}=rt;var Pt=class e{constructor(e){this.options=e||At,this.options.renderer=this.options.renderer||new Et,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Rt,this.slugger=new Tt}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,s,i,a,c,l,u,d,p,f,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,Lt(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(l="",c="",s=d.header.length,r=0;r<s;r++)c+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(l+=this.renderer.tablerow(c),u="",s=d.cells.length,r=0;r<s;r++){for(a=d.tokens.cells[r],c="",i=a.length,o=0;o<i;o++)c+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(c)}v+=this.renderer.table(l,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(p=d.ordered,f=d.start,h=d.loose,s=d.items.length,u="",r=0;r<s;r++)g=d.items[r],b=g.checked,w=g.task,m="",g.task&&(y=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,p,f);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const s=e.length;for(n=0;n<s;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:It,checkSanitizeDeprecation:Dt,escape:Nt}=rt,{getDefaults:Ot,changeDefaults:jt,defaults:zt}=We;function Wt(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=It({},Wt.defaults,t||{}),Dt(t),n){const r=t.highlight;let o;try{o=$t.lex(e,t)}catch(e){return n(e)}const s=function(e){let s;if(!e)try{s=Pt.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,s)};if(!r||r.length<3)return s();if(delete t.highlight,!o.length)return s();let i=0;return Wt.walkTokens(o,(function(e){"code"===e.type&&(i++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return s(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),i--,0===i&&s()}))},0))})),void(0===i&&s())}try{const n=$t.lex(e,t);return t.walkTokens&&Wt.walkTokens(n,t.walkTokens),Pt.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Nt(e.message+"",!0)+"</pre>";throw e}}Wt.options=Wt.setOptions=function(e){return It(Wt.defaults,e),jt(Wt.defaults),Wt},Wt.getDefaults=Ot,Wt.defaults=zt,Wt.use=function(e){const t=It({},e);if(e.renderer){const n=Wt.defaults.renderer||new Et;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let s=e.renderer[t].apply(n,o);return!1===s&&(s=r.apply(n,o)),s}}t.renderer=n}if(e.tokenizer){const n=Wt.defaults.tokenizer||new ut;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let s=e.tokenizer[t].apply(n,o);return!1===s&&(s=r.apply(n,o)),s}}t.tokenizer=n}if(e.walkTokens){const n=Wt.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Wt.setOptions(t)},Wt.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Wt.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Wt.walkTokens(n,t);break;case"list":Wt.walkTokens(n.items,t);break;default:n.tokens&&Wt.walkTokens(n.tokens,t)}},Wt.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=It({},Wt.defaults,t||{}),Dt(t);try{const n=$t.lexInline(e,t);return t.walkTokens&&Wt.walkTokens(n,t.walkTokens),Pt.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Nt(e.message+"",!0)+"</pre>";throw e}},Wt.Parser=Pt,Wt.parser=Pt.parse,Wt.Renderer=Et,Wt.TextRenderer=Rt,Wt.Lexer=$t,Wt.lexer=$t.lex,Wt.Tokenizer=ut,Wt.Slugger=Tt,Wt.parse=Wt;var Mt=Wt;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ut=function(e){var t={exports:{}};return e(t,t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function s(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function i(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function c(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return i(""===n?e[r-1]:n,o)}))}function l(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var s=r[o];if(s[0].test(t))return c(t,s)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?i(r,o):e.hasOwnProperty(o)?i(r,e[o]):l(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&l(o,o,n)===o}}function p(e,t,n){return(n?t+" ":"")+(1===t?p.singular(e):p.plural(e))}return p.plural=u(o,r,e),p.isPlural=d(o,r,e),p.singular=u(r,o,t),p.isSingular=d(r,o,t),p.addPluralRule=function(t,n){e.push([s(t),n])},p.addSingularRule=function(e,n){t.push([s(e),n])},p.addUncountableRule=function(e){"string"!=typeof e?(p.addPluralRule(e,"$0"),p.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},p.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return p.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return p.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return p.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(p.addUncountableRule),p}))})),Ft=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=s.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},s;function s(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(i,this)}function i(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,s){for(var i=("selectedIndex"in t),a=i;r<o;){var c,l=e(n[r],1);t.insertBefore(l,s),i&&a&&l.selected&&(a=!a,c=t.selectedIndex,t.selectedIndex=c<0?r:d.call(t.querySelectorAll("option"),l)),r++}}function s(e,t){return e==t}function i(e){return e}function a(e,t,n,r,o,s,i){var a=s-o;if(a<1)return-1;for(;a<=n-t;){for(var c=t,l=o;c<n&&l<s&&i(e[c],r[l]);)c++,l++;if(l===s)return t;t=c+1}return-1}function c(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function l(e,t,n,r){for(;n<r;)f(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,p=function(e,t,n){for(var r=1,o=t;r<o;){var s=(r+o)/2>>>0;n<e[s]?o=s:r=1+s}return r},f=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||s,d=r.node||i,f=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,w=0;g<m&&w<b&&u(t[g],n[w]);)g++,w++;for(;g<m&&w<b&&u(t[m-1],n[b-1]);)m--,b--;var y=g===m,v=w===b;if(y&&v)return n;if(y&&w<b)return o(d,e,n,w,b,c(d,t,g,h,f)),n;if(v&&g<m)return l(d,t,g,m),n;var k=m-g,x=b-w,$=-1;if(k<x){if(-1<($=a(n,w,b,t,g,m,u)))return o(d,e,n,w,$,d(t[g],0)),o(d,e,n,$+k,b,c(d,t,m,h,f)),n}else if(x<k&&-1<($=a(t,g,m,n,w,b,u)))return l(d,t,g,$),l(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,w,b,d(t[g],0)),l(d,t,g,m)):k==x&&function(e,t,n,r,o,s){for(;r<o&&s(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,w,b,c(d,t,m,h,f)):function(e,t,n,r,s,i,a,c,u,d,f,h,m){!function(e,t,n,r,s,i,a,c,u){for(var d=[],p=e.length,f=a,h=0;h<p;)switch(e[h++]){case 0:s++,f++;break;case 1:d.push(r[s]),o(t,n,r,s++,s,f<c?t(i[f],0):u);break;case-1:f++}for(h=0;h<p;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(i[a])?a++:l(t,i,a++,a)}}(function(e,t,n,r,o,s,i){var a,c,l,u,d,p,f=n+s,h=[];e:for(b=0;b<=f;b++){if(50<b)return null;for(p=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(c=(l=a===-b||a!==b&&u[p+a-1]<u[p+a+1]?u[p+a+1]:u[p+a-1]+1)-a;l<s&&c<n&&i(r[o+l],e[t+c]);)l++,c++;if(l===s&&c===n)break e;d[b+a]=l}}for(var m=Array(b/2+f/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<l&&0<c&&i(r[o+l-1],e[t+c-1]);)m[g--]=0,l--,c--;if(!b)break;p=b-1,u=b?h[b-1]:[0,0],(a=l-c)==-b||a!==b&&u[p+a-1]<u[p+a+1]?(c--,m[g--]=1):(l--,m[g--]=-1)}return m}(n,r,i,a,c,d,h)||function(e,t,n,r,o,s,i,a){var c=0,l=r<a?r:a,u=Array(l++),d=Array(l);d[0]=-1;for(var f=1;f<l;f++)d[f]=i;for(var h=o.slice(s,i),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(c=p(d,l,g=b+s))&&(d[c]=g,u[c]={newi:m,oldi:g,prev:u[c-1]})}for(c=--l,--i;d[c]>i;)--c;l=a+r-c;var w=Array(l),y=u[c];for(--n;y;){for(var v=y.newi,k=y.oldi;v<n;)w[--l]=1,--n;for(;k<i;)w[--l]=-1,--i;w[--l]=0,--n,--i,y=y.prev}for(;t<=n;)w[--l]=1,--n;for(;s<=i;)w[--l]=-1,--i;return w}(n,r,s,i,a,c,u,d),e,t,n,r,a,c,f,m)}(d,e,n,w,b,x,t,g,m,k,h,u,f),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,w={};try{w.Map=Map}catch(u){w.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var s=r(o);return s&&(t.splice(e,1),n.splice(e,1)),s},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,s){return n[r(o)?e:t.push(o)-1]=s,this}};function r(n){return-1<(e=t.indexOf(n))}}}var y=w.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,S,_,C,E,R,T={},A={},L=[],P=A.hasOwnProperty,I=0,D={attributes:T,define:function(e,t){e.indexOf("-")<0?(e in A||(I=L.push(e)),A[e]=t):T[e]=t},invoke:function(e,t){for(var n=0;n<I;n++){var r=L[n];if(P.call(e,r))return A[r](e[r],t)}}},N=Array.isArray||(S=($={}.toString).call([]),function(e){return $.call(e)===S}),O=(_=e,C="fragment",R="content"in z(E="template")?function(e){var t=z(E);return t.innerHTML=e,t.content}:function(e){var t,n=z(C),r=z(E);return j(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=z(C),n=z("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",j(t,n.firstChild.childNodes),t}:R)(e)});function j(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function z(e){return e===C?_.createDocumentFragment():_.createElementNS("http://www.w3.org/1999/xhtml",e)}var W,M,U,F,q,B,H,G,V,Z=(M="appendChild",U="cloneNode",F="createTextNode",B=(q="importNode")in(W=e),(H=W.createDocumentFragment())[M](W[F]("g")),H[M](W[F]("")),(B?W[q](H,!0):H[U](!0)).childNodes.length<2?function e(t,n){for(var r=t[U](),o=t.childNodes||[],s=o.length,i=0;n&&i<s;i++)r[M](e(o[i],n));return r}:B?W[q]:function(e,t){return e[U](!!t)}),Y="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},J="-"+Math.random().toFixed(6)+"%",K=!1;try{G=e.createElement("template"),V="tabindex","content"in G&&(G.innerHTML="<p "+V+'="'+J+'"></p>',G.content.childNodes[0].getAttribute(V)==J)||(J="_dt: "+J.slice(1,-1)+";",K=!0)}catch(u){}var X="\x3c!--"+J+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",se="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",ie=new RegExp(oe+re+se+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+se+"*)(["+te+"]*/>)","g"),ce=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+X+"\\2","gi");function le(e,t,n,r){return"<"+t+n.replace(ce,ue)+r}function ue(e,t,n){return t+(n||'"')+J+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var pe=K?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function fe(t,n,r,o){for(var s=t.childNodes,i=s.length,a=0;a<i;){var c=s[a];switch(c.nodeType){case 1:var l=o.concat(a);!function(t,n,r,o){for(var s,i=t.attributes,a=[],c=[],l=pe(i,r),u=l.length,d=0;d<u;){var p=l[d++],f=p.value===J;if(f||1<(s=p.value.split(X)).length){var h=p.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(f?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=i[m]||i[m.toLowerCase()];if(f)n.push(he(g,o,m,null));else{for(var b=s.length-2;b--;)r.shift();n.push(he(g,o,m,s))}}c.push(p)}}for(var w=((d=0)<(u=c.length)&&K&&!("ownerSVGElement"in t));d<u;){var y=c[d++];w&&(y.value=""),t.removeAttribute(y.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=i.length,d=0;d<u;)k.setAttributeNode(i[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(c,n,r,l),fe(c,n,r,l);break;case 8:var u=c.textContent;if(u===J)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:c,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(c),a--,i--}break;case 3:Q.test(t.nodeName)&&Y.call(c.textContent)===X&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function we(e,t){var n=(e.convert||function(e){return e.join(X).replace(ae,de).replace(ie,le)})(t),r=e.transform;r&&(n=r(n));var o=O(n,e.type);ve(o);var s=[];return fe(o,s,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=s.length,i=0,a=0;i<o;){var c=s[i++],l=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,c.path);switch(c.type){case"any":r.push({fn:e.any(l,[]),sparse:!1});break;case"attr":var u=c.sparse,d=e.attribute(l,c.name,c.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(l),sparse:!1}),l.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var s=1,i=1;s<e;){var a=r[s-i];if(a.sparse){var c=a.values,l=c[0],u=1,d=c.length;for(i+=d-2;u<d;)l+=arguments[s++]+c[u++];a.fn(l)}else a.fn(arguments[s++])}return n}}}}var ye=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===Y.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),_e(n,!0)}(e,t):_e(e.style,!1)});function Se(e,t,n){return t+"-"+n.toLowerCase()}function _e(e,t){var n,r;return function(o){var s,i,a,c;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(i in r)i in o||(e[i]="")}else t?e.value="":e.cssText="";for(i in s=t?{}:e,o)a="number"!=typeof(c=o[i])||ke.test(i)?c:c+"px",!t&&/^--/.test(i)?s.setProperty(i,a):s[i]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,Se),":",e[t],";");return n.join("")}(r=s):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ce,Ee,Re=(Ce=[].slice,(Ee=Te.prototype).ELEMENT_NODE=1,Ee.nodeType=111,Ee.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ee.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,s=r.length;o<s;o++)t.appendChild(r[o]);return t},Te);function Te(e){var t=this.childNodes=Ce.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Ae(e){return{html:e}}function Le(e,t){switch(e.nodeType){case Ue:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Le(e.render(),t);default:return e}}function Pe(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Ae).then(t):Promise.resolve(D.invoke(e,t)).then(t)}function Ie(e){return null!=e&&"then"in e}var De,Ne,Oe,je,ze,We="ownerSVGElement",Me=v.prototype.nodeType,Ue=Re.prototype.nodeType,Fe=(Ne=(De={Event:b,WeakSet:u}).Event,Oe=De.WeakSet,je=!0,ze=null,function(e){return je&&(je=!je,ze=new Oe,function(e){var t=new Oe,n=new Oe;try{new MutationObserver(i).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],s=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){i(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){s({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){s({addedNodes:[e.target],removedNodes:[]})}),!0)}function i(e){for(var r,o=e.length,s=0;s<o;s++)a((r=e[s]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,s=new Ne(t),i=e.length,a=0;a<i;1===(o=e[a++]).nodeType&&function e(t,n,r,o,s){ze.has(t)&&!o.has(t)&&(s.delete(t),o.add(t),t.dispatchEvent(n));for(var i=t.children||[],a=i.length,c=0;c<a;e(i[c++],n,r,o,s));}(o,s,t,n,r));}}(e.ownerDocument)),ze.add(e),e}),qe=/^(?:form|list)$/i,Be=[].slice;function He(t){return this.type=t,function(t){var n=ye,r=ve;return function(o){var s,i,a;return n!==o&&(s=t,i=n=o,a=be.get(i)||be.set(i,we(s,i)),r=a.updates(Z.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ge=!(He.prototype={attribute:function(e,t,n){var r,o=We in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return l=e,u=t.slice(1),o?function(e){try{l[u]=e}catch(t){l.setAttribute(u,e)}}:function(e){l[u]=e};if("?"===t.slice(0,1))return i=e,a=t.slice(1),function(e){c!==!!e&&((c=!!e)?i.setAttribute(a,""):i.removeAttribute(a))};if(/^on/.test(t)){var s=t.slice(2);return"connected"===s||"disconnected"===s?Fe(e):t.toLowerCase()in e&&(s=s.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(s,r,!1),(r=t)&&e.addEventListener(s,t,!1))}}if("data"===t||!o&&t in e&&!qe.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in D.attributes)return function(n){var o=D.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var i,a,c,l,u,d=!1,p=n.cloneNode(!0);return function(t){r!==t&&(r=t,p.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(p)),p.value=t):(p.value=t,d||(d=!0,e.setAttributeNode(p)))))}},any:function(e,t){var n,r={node:Le,before:e},o=We in e?"svg":"html",s=!1;return function i(a){switch(typeof a){case"string":case"number":case"boolean":s?n!==a&&(n=a,t[0].textContent=a):(s=!0,n=a,t=h(e.parentNode,t,[(c=a,e.ownerDocument.createTextNode(c))],r));break;case"function":i(a(e));break;case"object":case"undefined":if(null==a){s=!1,t=h(e.parentNode,t,[],r);break}default:if(s=!1,N(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":i({html:a});break;case"object":if(N(a[0])&&(a=a.concat.apply([],a)),Ie(a[0])){Promise.all(a).then(i);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?Be.call(a.childNodes):[a],r):Ie(a)?a.then(i):"placeholder"in a?Pe(a,i):"text"in a?i(String(a.text)):"any"in a?i(a.any):"html"in a?t=h(e.parentNode,t,Be.call(O([].concat(a.html).join(""),o).childNodes),r):i("length"in a?Be.call(a):D.invoke(a,i))}var c}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?Ie(r)?r.then(n):"placeholder"in r?Pe(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?Be.call(r).join(""):D.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,s,i,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),c=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||c?(o={},s=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=c?s:(i=new n,function(e){return i.get(e)||(n=s(t=e),i.set(t,n),n);var t,n})):Ge=!0,Ze(t)};function Ze(e){return Ge?e:Ve(e)}function Ye(e){for(var t=arguments.length,n=[Ze(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Je=new n,Ke=function(e){var t,n,r;return function(){var o=Ye.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Xe=function(e,t){var n=t.indexOf(":"),r=Je.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Je.set(e,r={}),r[o]||(r[o]=Ke(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Re(t):e},et=new n;function tt(){var e=et.get(this),t=Ye.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(We in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,st,it=D.define,at=He.prototype;function ct(e){return arguments.length<2?null==e?Ke("html"):"string"==typeof e?ct.wire(null,e):"raw"in e?Ke("html")(e):"nodeType"in e?ct.bind(e):Xe(e,"html"):("raw"in e?Ke("html"):ct.wire).apply(null,arguments)}return ct.Component=v,ct.bind=function(e){return tt.bind(e)},ct.define=it,ct.diff=h,(ct.hyper=ct).observe=Fe,ct.tagger=at,ct.wire=function(e,t){return null==e?Ke(t||"html"):Xe(e,t||"html")},ct._={WeakMap:n,WeakSet:u},nt=Ke,rt=new n,ot=Object.create,st=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var s,i,a,c=t.get(e)||st(e,t);switch(typeof o){case"object":case"function":var l=c.w||(c.w=new n);return l.get(o)||(s=l,i=o,a=new e(r),s.set(i,a),a);default:var u=c.p||(c.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new y,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),ct}(document); +/*! (c) Andrea Giammarchi (ISC) */const qt=$,Bt=je,Ht=Ft,Gt=Mt,Vt=Ut,Zt=/-/g;const Yt=rn({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}}),Jt=new Intl.DateTimeFormat(["en-ca-iso8601"],{timeZone:"UTC",year:"numeric",month:"2-digit",day:"2-digit"}),Kt=".informative, .note, .issue, .example, .ednote, .practice, .introductory";function Xt(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Qt(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function en(e=[],t=(e=>e),n=s){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(Yt.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=Yt.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function tn(e){return e.replace(/&/g,"&").replace(/>/g,">").replace(/"/g,""").replace(/</g,"<")}function nn(e){return e.trim().replace(/\s+/g," ")}function rn(e,t=s){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function on(e,t=""){return Jt.format(e).replace(Zt,t)}function sn(e=new Date,t=document.documentElement.lang||"en"){e instanceof Date||(e=new Date(e));const n=[t,"en"];return`${e.toLocaleString(n,{day:"2-digit",timeZone:"UTC"})} ${e.toLocaleString(n,{month:"long",timeZone:"UTC"})} ${e.toLocaleString(n,{year:"numeric",timeZone:"UTC"})}`}function an(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){Cn(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}async function cn(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,s;if("caches"in window)try{if(o=await caches.open(r.origin),s=await o.match(n),s&&new Date(s.headers.get("Expires"))>new Date)return s}catch(e){console.error("Failed to use Cache API.",e)}const i=await fetch(n);if(!i.ok&&s)return console.warn("Returning a stale cached response for "+r),s;if(o&&i.ok){const e=i.clone(),r=new Headers(i.headers),s=new Date(Date.now()+t);r.set("Expires",s.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return i}function ln(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Ht`${e}, `);return Ht`${r}${n[n.length-1]}`}function un(e,t=(e=>e)){const n=e.map(t);switch(n.length){case 0:case 1:return n[0];case 2:return Ht`${n[0]}${Yt.x_and_y}${n[1]}`;default:{const e=ln(n.slice(0,-1));return Ht`${e}${Yt.x_y_and_z}${n[n.length-1]}`}}}function dn(e,t=""){return pn(e,t,function(e){let t=0;for(const n of e)t=Math.imul(31,t)+n.charCodeAt(0)|0;return String(t)}(nn(e.textContent)))}function pn(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function fn(e){const t=new Set,n="ltNodefault"in e.dataset?"":nn(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>nn(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(nn(e)))}return[...t]}function hn(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function mn(e,t){const n=t.closest(Kt);let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function gn(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function bn(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function wn(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class yn extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function vn(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>hn(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),kn(t),t}function kn(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...xn(t)])e.remove()}function*xn(e){for(;e.nextNode();)yield e.currentNode}class $n extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class Sn extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||pn(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:s,title:i,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:s,title:i,details:a,stack:n}}}function _n(e,t,n={}){const r={...n,isWarning:!1};An("error",new Sn(e,t,r))}function Cn(e,t,n={}){const r={...n,isWarning:!0};An("warn",new Sn(e,t,r))}function En(e){return`[\`${e}\`](https://respec.org/docs/#${e})`}const Rn="core/pubsubhub",Tn=new Map;function An(e,...t){if(!Tn.has(e))return;if(Array.from(Tn.get(e)).forEach(e=>{try{e(...t)}catch(t){_n(`Error when calling function ${e.name}.`,Rn,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function Ln(e,t,n={once:!1}){return n.once?Ln(e,(function n(...r){!function({topic:e,cb:t}){const n=Tn.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(Tn.has(e)?Tn.get(e).add(t):Tn.set(e,new Set([t])),{topic:e,cb:t})}n(Rn,{sub:Ln});const Pn=["githubToken","githubUser"];class In{constructor(){this._respecDonePromise=new Promise(e=>{Ln("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],Ln("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),Ln("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}}const Dn="core/post-process";const Nn="core/pre-process";const On="core/base-runner";var jn=Object.freeze({__proto__:null,name:On,runAll:async function(e){!function(){const e=new In;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(Cn("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),An("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),Ln("amend-user-config",n),Ln("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of Pn)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),An("amend-user-config",r)}(respecConfig),performance.mark(On+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||_n("Every item in `preProcess` must be a JS function.",Nn),t}).map(async t=>{try{return await t(e,document)}catch(e){_n(`Function ${t.name} threw an error during \`preProcess\`.`,Nn,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const s=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(s),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},An("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||_n("Every item in `postProcess` must be a JS function.",Dn),t}).map(async t=>{try{return await t(e,document)}catch(e){_n(`Function ${t.name} threw an error during \`postProcess\`.`,Dn,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),An("end-all"),Qt(document),performance.mark(On+"-end"),performance.measure(On,On+"-start",On+"-end")}});var zn=String.raw`.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0} +#respec-ui{position:fixed;display:flex;flex-direction:row-reverse;top:20px;right:20px;width:202px;text-align:right;z-index:9000} +#respec-pill,.respec-info-button{background:#fff;height:2.5em;color:#787878;border:1px solid #ccc;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5)} +.respec-info-button{border:none;opacity:.75;border-radius:2em;margin-right:1em;min-width:3.5em} +.respec-info-button:focus,.respec-info-button:hover{opacity:1;transition:opacity .2s} +#respec-pill:disabled{font-size:2.8px;text-indent:-9999em;border-top:1.1em solid rgba(40,40,40,.2);border-right:1.1em solid rgba(40,40,40,.2);border-bottom:1.1em solid rgba(40,40,40,.2);border-left:1.1em solid #fff;transform:translateZ(0);animation:respec-spin .5s infinite linear;box-shadow:none} +#respec-pill:disabled,#respec-pill:disabled:after{border-radius:50%;width:10em;height:10em} +@keyframes respec-spin{ +0%{transform:rotate(0)} +100%{transform:rotate(360deg)} +} +.respec-hidden{visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s linear} +.respec-visible{visibility:visible;opacity:1;transition:opacity .2s linear} +#respec-pill:focus,#respec-pill:hover{color:#000;background-color:#f5f5f5;transition:color .2s} +#respec-menu{position:absolute;margin:0;padding:0;font-family:sans-serif;background:#fff;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5);width:200px;display:none;text-align:left;margin-top:32px;font-size:.8em} +#respec-menu:not([hidden]){display:block} +#respec-menu li{list-style-type:none;margin:0;padding:0} +.respec-save-buttons{display:grid;grid-template-columns:repeat(auto-fill,minmax(47%,2fr));grid-gap:.5cm;padding:.5cm} +.respec-save-button:link{padding-top:16px;color:#f0f0f0;background:#2a5aa8;justify-self:stretch;height:1cm;text-decoration:none;text-align:center;font-size:inherit;border:none;border-radius:.2cm} +.respec-save-button:link:hover{color:#fff;background:#2a5aa8;padding:0;margin:0;border:0;padding-top:16px} +.respec-save-button:link:focus{background:#193766} +#respec-pill:focus,#respec-ui button:focus,.respec-option:focus{outline:0;outline-style:none} +#respec-pill-error{background-color:red;color:#fff} +#respec-pill-warning{background-color:orange;color:#fff} +.respec-error-list,.respec-warning-list{margin:0;padding:0;list-style:none;font-family:sans-serif;background-color:#fffbe6;font-size:.85em} +.respec-error-list>li,.respec-warning-list>li{padding:.4em .7em} +.respec-warning-list>li::before{content:"⚠️";padding-right:.5em} +.respec-error-list p,.respec-warning-list p{padding:0;margin:0} +.respec-warning-list li{color:#5c3b00;border-bottom:thin solid #fff5c2} +.respec-error-list,.respec-error-list li{background-color:#fff0f0} +.respec-error-list li::before{content:"💥";padding-right:.5em} +.respec-error-list li{padding:.4em .7em;color:#5c3b00;border-bottom:thin solid #ffd7d7} +.respec-error-list li>p{margin:0;padding:0;display:inline-block} +.respec-error-list li>p:first-child,.respec-warning-list li>p:first-child{display:inline} +.respec-error-list>li li,.respec-warning-list>li li{margin:0;list-style:disc} +#respec-overlay{display:block;position:fixed;z-index:10000;top:0;left:0;height:100%;width:100%;background:#000} +.respec-show-overlay{transition:opacity .2s linear;opacity:.5} +.respec-hide-overlay{transition:opacity .2s linear;opacity:0} +.respec-modal{display:block;position:fixed;z-index:11000;margin:auto;top:10%;background:#fff;border:5px solid #666;min-width:20%;width:79%;padding:0;max-height:80%;overflow-y:auto;margin:0 -.5cm} +@media screen and (min-width:78em){ +.respec-modal{width:62%} +} +.respec-modal h3{margin:0;padding:.2em;text-align:center;color:#000;background:linear-gradient(to bottom,#eee 0,#eee 50%,#ccc 100%);font-size:1em} +.respec-modal .inside div p{padding-left:1cm} +#respec-menu button.respec-option{background:#fff;padding:0 .2cm;border:none;width:100%;text-align:left;font-size:inherit;padding:1.2em 1.2em} +#respec-menu button.respec-option:hover,#respec-menu button:focus{background-color:#eee} +.respec-cmd-icon{padding-right:.5em} +#respec-ui button.respec-option:last-child{border:none;border-radius:inherit} +.respec-button-copy-paste{position:absolute;height:28px;width:40px;cursor:pointer;background-image:linear-gradient(#fcfcfc,#eee);border:1px solid #90b8de;border-left:0;border-radius:0 0 3px 0;-webkit-user-select:none;user-select:none;-webkit-appearance:none;top:0;left:127px} +@media print{ +#respec-ui{display:none} +} +.respec-iframe{width:100%;min-height:550px;height:100%;overflow:hidden;padding:0;margin:0;border:0} +.respec-iframe:not(.ready){background:url(https://respec.org/xref/loader.gif) no-repeat center} +.respec-iframe+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}`;function Wn(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var Mn=Object.freeze({__proto__:null,name:"core/reindent",reindent:Wn,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=Wn(e.innerHTML)}});const Un=/>/gm,Fn=/&/gm;class qn extends Gt.Renderer{code(e,t,n){const{language:r,...o}=qn.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const s=super.code(e,r,n),{example:i,illegalExample:a}=o;if(!i&&!a)return s;const c=i||a,l=`${r} ${i?"example":"illegal-example"}`;return s.replace("<pre>",`<pre title="${c}" class="${l}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function Bn(e){const t=Wn(e).replace(Un,">").replace(Fn,"&");return Gt(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new qn})}function Hn(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=Bn(e.innerHTML)}class Gn{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function Vn(e,t){return function e(n){const r=new Gn(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function Zn(e){const t=Vn(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const Yn=(Jn="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll(Jn);return t.forEach(Hn),Array.from(t)});var Jn;var Kn=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:Bn,restructure:Zn,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of Yn(document.body))Zn(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=wn(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),Hn(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const s=Vn(o,document);o.append(r,s),document.body.replaceWith(o)}});function Xn(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=zn,e.classList.add("removeOnSave"),document.head.appendChild(e)}();const Qn=Ht`<div id="respec-ui" class="removeOnSave" hidden></div>`,er=Ht`<ul id="respec-menu" role="menu" aria-labelledby="respec-pill" hidden -></ul>`,nr=Ht`<button +></ul>`,tr=Ht`<button class="close-button" - onclick=${()=>fr.closeModal()} + onclick=${()=>pr.closeModal()} title="Close" > ❌ -</button>`;let rr,or;window.addEventListener("load",()=>ur(tr));const sr=[],ir=[],ar={};Pn("start-all",()=>document.body.prepend(er),{once:!0}),Pn("end-all",()=>document.body.prepend(er),{once:!0});const cr=Ht`<button id="respec-pill" disabled>ReSpec</button>`;function lr(){tr.classList.toggle("respec-hidden"),tr.classList.toggle("respec-visible"),tr.hidden=!tr.hidden}function ur(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}er.appendChild(cr),cr.addEventListener("click",e=>{e.stopPropagation(),cr.setAttribute("aria-expanded",String(tr.hidden)),lr(),tr.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{tr.hidden||lr()}),er.appendChild(tr),tr.addEventListener("keydown",e=>{"Escape"!==e.key||tr.hidden||(cr.setAttribute("aria-expanded",String(tr.hidden)),lr(),cr.focus())});const dr=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function pr(e,t,n,r){t.push(e),ar.hasOwnProperty(n)||(ar[n]=function(e,t,n){const r=Ht`<button +</button>`;let nr,rr;window.addEventListener("load",()=>lr(er));const or=[],sr=[],ir={};Ln("start-all",()=>document.body.prepend(Qn),{once:!0}),Ln("end-all",()=>document.body.prepend(Qn),{once:!0});const ar=Ht`<button id="respec-pill" disabled>ReSpec</button>`;function cr(){er.classList.toggle("respec-hidden"),er.classList.toggle("respec-visible"),er.hidden=!er.hidden}function lr(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}Qn.appendChild(ar),ar.addEventListener("click",e=>{e.stopPropagation(),ar.setAttribute("aria-expanded",String(er.hidden)),cr(),er.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{er.hidden||cr()}),Qn.appendChild(er),er.addEventListener("keydown",e=>{"Escape"!==e.key||er.hidden||(ar.setAttribute("aria-expanded",String(er.hidden)),cr(),ar.focus())});const ur=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function dr(e,t,n,r){t.push(e),ir.hasOwnProperty(n)||(ir[n]=function(e,t,n){const r=Ht`<button id="${"respec-pill-"+e}" class="respec-info-button" - ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Ht`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(hr(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}fr.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return Qn(r,o),r}(n,t,r),er.appendChild(ar[n]));const o=ar[n];o.textContent=t.length;const s=1===t.length?Vt.singular(r):r;Qn(o,new Map([["label",`${t.length} ${s}`]]))}Qn(cr,dr);const fr={show(){try{er.hidden=!1}catch(e){console.error(e)}},hide(){er.hidden=!0},enable(){cr.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),s=Ht`<button id="${o}" class="respec-option"> + ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Ht`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(fr(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}pr.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return Xn(r,o),r}(n,t,r),Qn.appendChild(ir[n]));const o=ir[n];o.textContent=t.length;const s=1===t.length?Vt.singular(r):r;Xn(o,new Map([["label",`${t.length} ${s}`]]))}Xn(ar,ur);const pr={show(){try{Qn.hidden=!1}catch(e){console.error(e)}},hide(){Qn.hidden=!0},enable(){ar.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),s=Ht`<button id="${o}" class="respec-option"> <span class="respec-cmd-icon" aria-hidden="true">${r}</span> ${e}… - </button>`,i=Ht`<li role="menuitem">${s}</li>`;return i.addEventListener("click",t),tr.appendChild(i),s},error(e){pr(e,sr,"error","ReSpec Errors")},warning(e){pr(e,ir,"warning","ReSpec Warnings")},closeModal(e){or&&(or.classList.remove("respec-show-overlay"),or.classList.add("respec-hide-overlay"),or.addEventListener("transitionend",()=>{or.remove(),or=null})),e&&e.setAttribute("aria-expanded","false"),rr&&(rr.remove(),rr=null,cr.focus())},freshModal(e,t,n){rr&&rr.remove(),or&&or.remove(),or=Ht`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";rr=Ht`<div + </button>`,i=Ht`<li role="menuitem">${s}</li>`;return i.addEventListener("click",t),er.appendChild(i),s},error(e){dr(e,or,"error","ReSpec Errors")},warning(e){dr(e,sr,"warning","ReSpec Warnings")},closeModal(e){rr&&(rr.classList.remove("respec-show-overlay"),rr.classList.add("respec-hide-overlay"),rr.addEventListener("transitionend",()=>{rr.remove(),rr=null})),e&&e.setAttribute("aria-expanded","false"),nr&&(nr.remove(),nr=null,ar.focus())},freshModal(e,t,n){nr&&nr.remove(),rr&&rr.remove(),rr=Ht`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";nr=Ht`<div id="${r}" class="respec-modal removeOnSave" role="dialog" aria-labelledby="${o}" > - ${nr} + ${tr} <h3 id="${o}">${e}</h3> <div class="inside">${t}</div> - </div>`;const s=new Map([["labelledby",o]]);Qn(rr,s),document.body.append(or,rr),or.addEventListener("click",()=>this.closeModal(n)),or.classList.toggle("respec-show-overlay"),rr.hidden=!1,ur(rr)}};function hr(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${en(e.elements.map(mr))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return Hn(`${t}${e.message}${n}${r}${o}`)}function mr(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&fr.closeModal()}),window.respecUI=fr,Pn("error",e=>fr.error(e)),Pn("warn",e=>fr.warning(e));var gr=Object.freeze({__proto__:null,name:"core/ui",ui:fr});var br=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const yr="w3c/group",wr=["wg","wgURI","wgId","wgPatentURI","wgPatentPolicy"];async function vr(e){let t="",n=e;e.includes("/")&&([t,n]=e.split("/",2));const r=new URL(`${n}/${t}`,"https://respec.org/w3c/groups/"),o=await cn(r.href);if(o.ok){const e=await o.json(),{id:t,name:n,URI:r,patentURI:s,patentPolicy:i,type:a}=e;return{wg:n,wgId:t,wgURI:r,wgPatentURI:s,wgPatentPolicy:i,groupType:a}}const s=await o.text(),i=`Failed to fetch group details (HTTP: ${o.status}). ${s}`,a=404===o.status?"See [supported group names](https://respec.org/w3c/groups/) to use with the [`group`](https://respec.org/docs/#group) configuration option.":void 0;Sn(i,yr,{hint:a})}var kr=Object.freeze({__proto__:null,name:yr,run:async function(e){const t=wr.filter(t=>e[t]);if(!e.group){if(t.length){Cn(`Configuration options ${en(wr,e=>`\`${e}\``)} are deprecated.`,yr,{hint:"Please use the [`group`](https://respec.org/docs/#group) option instead."})}return}if(t.length){Cn(`Configuration options ${en(t,e=>`\`${e}\``)} are superseded by \`group\` and will be overridden by ReSpec.`,yr,{hint:"Please remove them from `respecConfig`."})}const{group:n}=e,r=Array.isArray(n)?await async function(e){const t=await Promise.all(e.map(vr)),n={wg:[],wgId:[],wgURI:[],wgPatentURI:[],wgPatentPolicy:[],groupType:[]};for(const e of t.filter(e=>e))for(const t of Object.keys(n))n[t].push(e[t]);return n}(n):await vr(n);Object.assign(e,r)}});function xr(e){if(!e.key){const t="Found a link without `key` attribute in the configuration. See dev console.";return Cn(t,"core/templates/show-link"),void console.warn(t,e)}return Ht` + </div>`;const s=new Map([["labelledby",o]]);Xn(nr,s),document.body.append(rr,nr),rr.addEventListener("click",()=>this.closeModal(n)),rr.classList.toggle("respec-show-overlay"),nr.hidden=!1,lr(nr)}};function fr(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${en(e.elements.map(hr))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return Bn(`${t}${e.message}${n}${r}${o}`)}function hr(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&pr.closeModal()}),window.respecUI=pr,Ln("error",e=>pr.error(e)),Ln("warn",e=>pr.warning(e));var mr=Object.freeze({__proto__:null,name:"core/ui",ui:pr});var gr=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const br="w3c/group",wr=["wg","wgURI","wgId","wgPatentURI","wgPatentPolicy"];async function yr(e){let t="",n=e;e.includes("/")&&([t,n]=e.split("/",2));const r=new URL(`${n}/${t}`,"https://respec.org/w3c/groups/"),o=await cn(r.href);if(o.ok){const e=await o.json(),{id:t,name:n,URI:r,patentURI:s,patentPolicy:i,type:a}=e;return{wg:n,wgId:t,wgURI:r,wgPatentURI:s,wgPatentPolicy:i,groupType:a}}const s=await o.text(),i=`Failed to fetch group details (HTTP: ${o.status}). ${s}`,a=404===o.status?"See [supported group names](https://respec.org/w3c/groups/) to use with the [`group`](https://respec.org/docs/#group) configuration option.":void 0;_n(i,br,{hint:a})}var vr=Object.freeze({__proto__:null,name:br,run:async function(e){const t=wr.filter(t=>e[t]);if(!e.group){if(t.length){Cn(`Configuration options ${en(wr,e=>`\`${e}\``)} are deprecated.`,br,{hint:"Please use the [`group`](https://respec.org/docs/#group) option instead."})}return}if(t.length){Cn(`Configuration options ${en(t,e=>`\`${e}\``)} are superseded by \`group\` and will be overridden by ReSpec.`,br,{hint:"Please remove them from `respecConfig`."})}const{group:n}=e,r=Array.isArray(n)?await async function(e){const t=await Promise.all(e.map(yr)),n={wg:[],wgId:[],wgURI:[],wgPatentURI:[],wgPatentPolicy:[],groupType:[]};for(const e of t.filter(e=>e))for(const t of Object.keys(n))n[t].push(e[t]);return n}(n):await yr(n);Object.assign(e,r)}});function kr(e){if(!e.key){const t="Found a link without `key` attribute in the configuration. See dev console.";return Cn(t,"core/templates/show-link"),void console.warn(t,e)}return Ht` <dt class="${e.class?e.class:null}">${e.key}</dt> - ${e.data?e.data.map($r):$r(e)} - `}function $r(e){return Ht`<dd class="${e.class?e.class:null}"> + ${e.data?e.data.map(xr):xr(e)} + `}function xr(e){return Ht`<dd class="${e.class?e.class:null}"> ${e.href?Ht`<a href="${e.href}">${e.value||e.href}</a>`:e.value} - </dd>`}function _r(e){const t=Ht`<a href="${e.url||""}" class="logo"></a>`;if(!e.alt){Cn("Found spec logo without an `alt` attribute.","core/templates/show-logo",{elements:[t]})}const n=Ht`<img + </dd>`}function $r(e){const t=Ht`<a href="${e.url||""}" class="logo"></a>`;if(!e.alt){Cn("Found spec logo without an `alt` attribute.","core/templates/show-logo",{elements:[t]})}const n=Ht`<img id="${e.id}" alt="${e.alt}" width="${e.width}" height="${e.height}" - />`;return n.src=e.src,t.append(n),t}const Sr={en:{until:e=>Ht` Until ${e} `},es:{until:e=>Ht` Hasta ${e} `},ko:{until:e=>Ht` ${e} 이전 `},ja:{until:e=>Ht` ${e} 以前 `},de:{until:e=>Ht` bis ${e} `},zh:{until:e=>Ht` 直到 ${e} `}},Cr=s in Sr?s:"en",Er=Ht`<svg + />`;return n.src=e.src,t.append(n),t}const Sr={en:{until:e=>Ht` Until ${e} `},es:{until:e=>Ht` Hasta ${e} `},ko:{until:e=>Ht` ${e} 이전 `},ja:{until:e=>Ht` ${e} 以前 `},de:{until:e=>Ht` bis ${e} `},zh:{until:e=>Ht` 直到 ${e} `}},_r=s in Sr?s:"en",Cr=Ht`<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" @@ -53,7 +107,7 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e class="st1" d="M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z" /> -</svg>`;function Rr(e=[]){const t=Sr[Cr];return e.map((function(e){const r=[e.name],o=[e.company],s=e.w3cid?parseInt(e.w3cid,10):null,i=Ht`<dd +</svg>`;function Er(e=[]){const t=Sr[_r];return e.map((function(e){const r=[e.name],o=[e.company],s=e.w3cid?parseInt(e.w3cid,10):null,i=Ht`<dd class="p-author h-card vcard" data-editor-id="${s}" ></dd>`,a=document.createDocumentFragment(),c=[];e.mailto?c.push(Ht`<a @@ -61,32 +115,32 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e href="${"mailto:"+e.mailto}" >${r}</a >`):e.url?c.push(Ht`<a class="u-url url p-name fn" href="${e.url}">${r}</a>`):c.push(Ht`<span class="p-name fn">${r}</span>`);e.orcid&&c.push(Ht`<a class="p-name orcid" href="${e.orcid}" - >${Er.cloneNode(!0)} + >${Cr.cloneNode(!0)} </a>`);e.company&&(e.companyURL?c.push(Ht` (<a class="p-org org h-org h-card" href="${e.companyURL}" >${o}</a >) - `):c.push(Ht` (${o}) `));e.note&&c.push(document.createTextNode(` (${e.note})`));if(e.extras){const t=e.extras.filter(e=>e.name&&e.name.trim()).map(n);for(const e of t)c.push(document.createTextNode(", "),e)}if(e.retiredDate){const n=new Date(e.retiredDate),r="Invalid Date"!==n.toString(),o=document.createElement("time");if(o.textContent=r?sn(n):"Invalid Date",!r){Sn("The date is invalid. The expected format is YYYY-MM-DD.","core/templates/show-people",{title:"Invalid date",elements:[o]})}o.dateTime=(l=n,Jt.format(l)),c.push(Ht` - ${t.until(o)} `)}var l;return Ht.bind(a)`${c}`,i.appendChild(a),i}));function n(e){const t=Ht`<span class="${e.class||null}"></span>`;let n=t;return e.href&&(n=Ht`<a href="${e.href}"></a>`,t.appendChild(n)),n.textContent=e.name,t}}const Tr="w3c/templates/headers",Ar="https://creativecommons.org/licenses/by/4.0/legalcode",Pr="https://www.w3.org/Consortium/Legal/copyright-documents",Lr="https://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer",Ir="https://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks",Dr=rn({en:{author:"Author:",authors:"Authors:",editor:"Editor:",editors:"Editors:",former_editor:"Former editor:",former_editors:"Former editors:",latest_editors_draft:"Latest editor's draft:",latest_published_version:"Latest published version:",edited_in_place:"edited in place",this_version:"This version:",test_suite:"Test suite:",implementation_report:"Implementation report:",prev_editor_draft:"Previous editor's draft:",prev_version:"Previous version:",prev_recommendation:"Previous Recommendation:",latest_recommendation:"Latest Recommendation:"},ko:{author:"저자:",authors:"저자:",editor:"편집자:",editors:"편집자:",former_editor:"이전 편집자:",former_editors:"이전 편집자:",latest_editors_draft:"최신 편집 초안:",latest_published_version:"최신 버전:",this_version:"현재 버전:"},zh:{author:"作者:",authors:"作者:",editor:"编辑:",editors:"编辑:",former_editor:"原编辑:",former_editors:"原编辑:",latest_editors_draft:"最新编辑草稿:",latest_published_version:"最新发布版本:",this_version:"本版本:",test_suite:"测试套件:",implementation_report:"实现报告:",prev_editor_draft:"上一版编辑草稿:",prev_version:"上一版:",prev_recommendation:"上一版正式推荐标准:",latest_recommendation:"最新发布的正式推荐标准:"},ja:{author:"著者:",authors:"著者:",editor:"編者:",editors:"編者:",former_editor:"以前の版の編者:",former_editors:"以前の版の編者:",latest_editors_draft:"最新の編集用草案:",latest_published_version:"最新バージョン:",this_version:"このバージョン:",test_suite:"テストスイート:",implementation_report:"実装レポート:"},nl:{author:"Auteur:",authors:"Auteurs:",editor:"Redacteur:",editors:"Redacteurs:",latest_editors_draft:"Laatste werkversie:",latest_published_version:"Laatst gepubliceerde versie:",this_version:"Deze versie:"},es:{author:"Autor:",authors:"Autores:",editor:"Editor:",editors:"Editores:",latest_editors_draft:"Borrador de editor mas reciente:",latest_published_version:"Versión publicada mas reciente:",this_version:"Ésta versión:"},de:{author:"Autor/in:",authors:"Autor/innen:",editor:"Redaktion:",editors:"Redaktion:",former_editor:"Frühere Mitwirkende:",former_editors:"Frühere Mitwirkende:",latest_editors_draft:"Letzter Entwurf:",latest_published_version:"Letzte publizierte Fassung:",this_version:"Diese Fassung:"}});var Nr=(e,t)=>Ht`<div class="head"> - ${e.logos.map(_r)} ${document.querySelector("h1#title")} + `):c.push(Ht` (${o}) `));e.note&&c.push(document.createTextNode(` (${e.note})`));if(e.extras){const t=e.extras.filter(e=>e.name&&e.name.trim()).map(n);for(const e of t)c.push(document.createTextNode(", "),e)}if(e.retiredDate){const n=new Date(e.retiredDate),r="Invalid Date"!==n.toString(),o=document.createElement("time");if(o.textContent=r?sn(n):"Invalid Date",!r){_n("The date is invalid. The expected format is YYYY-MM-DD.","core/templates/show-people",{title:"Invalid date",elements:[o]})}o.dateTime=(l=n,Jt.format(l)),c.push(Ht` - ${t.until(o)} `)}var l;return Ht.bind(a)`${c}`,i.appendChild(a),i}));function n(e){const t=Ht`<span class="${e.class||null}"></span>`;let n=t;return e.href&&(n=Ht`<a href="${e.href}"></a>`,t.appendChild(n)),n.textContent=e.name,t}}const Rr="w3c/templates/headers",Tr="https://creativecommons.org/licenses/by/4.0/legalcode",Ar="https://www.w3.org/Consortium/Legal/copyright-documents",Lr="https://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer",Pr="https://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks",Ir=rn({en:{author:"Author:",authors:"Authors:",editor:"Editor:",editors:"Editors:",former_editor:"Former editor:",former_editors:"Former editors:",latest_editors_draft:"Latest editor's draft:",latest_published_version:"Latest published version:",edited_in_place:"edited in place",this_version:"This version:",test_suite:"Test suite:",implementation_report:"Implementation report:",prev_editor_draft:"Previous editor's draft:",prev_version:"Previous version:",prev_recommendation:"Previous Recommendation:",latest_recommendation:"Latest Recommendation:"},ko:{author:"저자:",authors:"저자:",editor:"편집자:",editors:"편집자:",former_editor:"이전 편집자:",former_editors:"이전 편집자:",latest_editors_draft:"최신 편집 초안:",latest_published_version:"최신 버전:",this_version:"현재 버전:"},zh:{author:"作者:",authors:"作者:",editor:"编辑:",editors:"编辑:",former_editor:"原编辑:",former_editors:"原编辑:",latest_editors_draft:"最新编辑草稿:",latest_published_version:"最新发布版本:",this_version:"本版本:",test_suite:"测试套件:",implementation_report:"实现报告:",prev_editor_draft:"上一版编辑草稿:",prev_version:"上一版:",prev_recommendation:"上一版正式推荐标准:",latest_recommendation:"最新发布的正式推荐标准:"},ja:{author:"著者:",authors:"著者:",editor:"編者:",editors:"編者:",former_editor:"以前の版の編者:",former_editors:"以前の版の編者:",latest_editors_draft:"最新の編集用草案:",latest_published_version:"最新バージョン:",this_version:"このバージョン:",test_suite:"テストスイート:",implementation_report:"実装レポート:"},nl:{author:"Auteur:",authors:"Auteurs:",editor:"Redacteur:",editors:"Redacteurs:",latest_editors_draft:"Laatste werkversie:",latest_published_version:"Laatst gepubliceerde versie:",this_version:"Deze versie:"},es:{author:"Autor:",authors:"Autores:",editor:"Editor:",editors:"Editores:",latest_editors_draft:"Borrador de editor mas reciente:",latest_published_version:"Versión publicada mas reciente:",this_version:"Ésta versión:"},de:{author:"Autor/in:",authors:"Autor/innen:",editor:"Redaktion:",editors:"Redaktion:",former_editor:"Frühere Mitwirkende:",former_editors:"Frühere Mitwirkende:",latest_editors_draft:"Letzter Entwurf:",latest_published_version:"Letzte publizierte Fassung:",this_version:"Diese Fassung:"}});var Dr=(e,t)=>Ht`<div class="head"> + ${e.logos.map($r)} ${document.querySelector("h1#title")} ${function(e){let t=document.querySelector("h2#subtitle");return t&&t.parentElement?(t.remove(),e.subtitle=t.textContent.trim()):e.subtitle&&(t=document.createElement("h2"),t.textContent=e.subtitle,t.id="subtitle"),t&&t.classList.add("subtitle"),t}(e)} <h2> ${e.prependW3C?"W3C ":""}${e.isCR?""+e.longStatus:""+e.textStatus} <time class="dt-published" datetime="${e.dashDate}" >${e.publishHumanDate}</time - >${e.modificationDate?Ht`, ${Dr.edited_in_place}${" "} + >${e.modificationDate?Ht`, ${Ir.edited_in_place}${" "} ${function(e){const t=sn(new Date(e));return Ht`<time class="dt-modified" datetime="${e}" >${t}</time >`}(e.modificationDate)}`:""} </h2> <dl> ${e.isNoTrack?"":Ht` - <dt>${Dr.this_version}</dt> + <dt>${Ir.this_version}</dt> <dd> <a class="u-url" href="${e.thisVersion}" >${e.thisVersion}</a > </dd> - <dt>${Dr.latest_published_version}</dt> + <dt>${Ir.latest_published_version}</dt> <dd> ${e.latestVersion?Ht`<a href="${e.latestVersion}" >${e.latestVersion}</a @@ -94,15 +148,15 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </dd> `} ${e.edDraftURI?Ht` - <dt>${Dr.latest_editors_draft}</dt> + <dt>${Ir.latest_editors_draft}</dt> <dd><a href="${e.edDraftURI}">${e.edDraftURI}</a></dd> `:""} ${e.testSuiteURI?Ht` - <dt>${Dr.test_suite}</dt> + <dt>${Ir.test_suite}</dt> <dd><a href="${e.testSuiteURI}">${e.testSuiteURI}</a></dd> `:""} ${e.implementationReportURI?Ht` - <dt>${Dr.implementation_report}</dt> + <dt>${Ir.implementation_report}</dt> <dd> <a href="${e.implementationReportURI}" >${e.implementationReportURI}</a @@ -110,33 +164,33 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </dd> `:""} ${e.isED&&e.prevED?Ht` - <dt>${Dr.prev_editor_draft}</dt> + <dt>${Ir.prev_editor_draft}</dt> <dd><a href="${e.prevED}">${e.prevED}</a></dd> `:""} ${e.showPreviousVersion?Ht` - <dt>${Dr.prev_version}</dt> + <dt>${Ir.prev_version}</dt> <dd><a href="${e.prevVersion}">${e.prevVersion}</a></dd> `:""} ${e.prevRecURI?e.isRec?Ht` - <dt>${Dr.prev_recommendation}</dt> + <dt>${Ir.prev_recommendation}</dt> <dd><a href="${e.prevRecURI}">${e.prevRecURI}</a></dd> `:Ht` - <dt>${Dr.latest_recommendation}</dt> + <dt>${Ir.latest_recommendation}</dt> <dd><a href="${e.prevRecURI}">${e.prevRecURI}</a></dd> `:""} - <dt>${e.multipleEditors?Dr.editors:Dr.editor}</dt> - ${Rr(e.editors)} + <dt>${e.multipleEditors?Ir.editors:Ir.editor}</dt> + ${Er(e.editors)} ${Array.isArray(e.formerEditors)&&e.formerEditors.length>0?Ht` <dt> - ${e.multipleFormerEditors?Dr.former_editors:Dr.former_editor} + ${e.multipleFormerEditors?Ir.former_editors:Ir.former_editor} </dt> - ${Rr(e.formerEditors)} + ${Er(e.formerEditors)} `:""} ${e.authors?Ht` - <dt>${e.multipleAuthors?Dr.authors:Dr.author}</dt> - ${Rr(e.authors)} + <dt>${e.multipleAuthors?Ir.authors:Ir.author}</dt> + ${Er(e.authors)} `:""} - ${e.otherLinks?e.otherLinks.map(xr):""} + ${e.otherLinks?e.otherLinks.map(kr):""} </dl> ${e.errata?Ht`<p> Please check the @@ -155,9 +209,9 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e ${t.multipleAlternates?"This document is also available in these non-normative formats:":"This document is also available in this non-normative format:"} ${t.alternatesHTML} </p>`:""} - ${function(e){const t=document.querySelector(".copyright");if(t)return t.remove(),t;if(e.hasOwnProperty("overrideCopyright")){return Cn("The `overrideCopyright` configuration option is deprecated.",Tr,{hint:'Please add a `<p class="copyright">` element directly to your document instead'}),Ht`${[e.overrideCopyright]}`}if(e.isUnofficial&&e.licenseInfo)return Ht`<p class="copyright"> + ${function(e){const t=document.querySelector(".copyright");if(t)return t.remove(),t;if(e.hasOwnProperty("overrideCopyright")){return Cn("The `overrideCopyright` configuration option is deprecated.",Rr,{hint:'Please add a `<p class="copyright">` element directly to your document instead'}),Ht`${[e.overrideCopyright]}`}if(e.isUnofficial&&e.licenseInfo)return Ht`<p class="copyright"> This document is licensed under a - ${jr(e.licenseInfo.name,e.licenseInfo.url,"subfoot")} + ${Nr(e.licenseInfo.name,e.licenseInfo.url,"subfoot")} (${e.licenseInfo.short}). </p>`;return function(e){return Ht`<p class="copyright"> <a href="https://www.w3.org/Consortium/Legal/ipr-notice#Copyright" @@ -179,16 +233,16 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e >, <a href="https://www.keio.ac.jp/">Keio</a>, <a href="https://ev.buaa.edu.cn/">Beihang</a>). ${function(e){if(!e.isCCBY)return;return Ht` Some Rights Reserved: this document is dual-licensed, - ${jr("CC-BY",Ar)} and - ${jr("W3C Document License",Pr)}. + ${Nr("CC-BY",Tr)} and + ${Nr("W3C Document License",Ar)}. `}(e)} W3C <a href="${Lr}">liability</a>, - <a href="${Ir}">trademark</a> and ${function(e){if(e.isCCBY)return jr("document use","https://www.w3.org/Consortium/Legal/2013/copyright-documents-dual.html");if(e.isW3CSoftAndDocLicense)return jr("permissive document license","https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document");return jr("document use",Pr)}(e)} rules + <a href="${Pr}">trademark</a> and ${function(e){if(e.isCCBY)return Nr("document use","https://www.w3.org/Consortium/Legal/2013/copyright-documents-dual.html");if(e.isW3CSoftAndDocLicense)return Nr("permissive document license","https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document");return Nr("document use",Ar)}(e)} rules apply. </p>`}(e)}(e)} <hr title="Separator for header" /> - </div>`;function jr(e,t,n){return Ht`<a rel="license" href="${t}" class="${n}">${e}</a>`}var Or=(e,t)=>{const n=document.querySelector(".copyright");n&&n.remove();const r=document.querySelector("h1#title"),o=r.cloneNode(!0);return Ht`<div class="head"> - ${e.logos.map(_r)} ${r} + </div>`;function Nr(e,t,n){return Ht`<a rel="license" href="${t}" class="${n}">${e}</a>`}var Or=(e,t)=>{const n=document.querySelector(".copyright");n&&n.remove();const r=document.querySelector("h1#title"),o=r.cloneNode(!0);return Ht`<div class="head"> + ${e.logos.map($r)} ${r} ${e.subtitle?Ht`<h2 id="subtitle">${e.subtitle}</h2>`:""} <h2> ${e.longStatus} @@ -198,7 +252,7 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </h2> <dl> ${e.thisVersion?Ht` - <dt>${Dr.this_version}</dt> + <dt>${Ir.this_version}</dt> <dd> <a class="u-url" href="${e.thisVersion}" >${e.thisVersion}</a @@ -206,13 +260,13 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </dd> `:""} ${e.latestVersion?Ht` - <dt>${Dr.latest_published_version}</dt> + <dt>${Ir.latest_published_version}</dt> <dd> <a href="${e.latestVersion}">${e.latestVersion}</a> </dd> `:""} ${e.edDraftURI?Ht` - <dt>${Dr.latest_editors_draft}</dt> + <dt>${Ir.latest_editors_draft}</dt> <dd><a href="${e.edDraftURI}">${e.edDraftURI}</a></dd> `:""} ${e.testSuiteURI?Ht` @@ -237,19 +291,19 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e <dd><a href="${e.prevED}">${e.prevED}</a></dd> `:""} `} - <dt>${e.multipleEditors?Dr.editors:Dr.editor}</dt> - ${Rr(e.editors)} + <dt>${e.multipleEditors?Ir.editors:Ir.editor}</dt> + ${Er(e.editors)} ${Array.isArray(e.formerEditors)&&e.formerEditors.length>0?Ht` <dt> - ${e.multipleFormerEditors?Dr.former_editors:Dr.former_editor} + ${e.multipleFormerEditors?Ir.former_editors:Ir.former_editor} </dt> - ${Rr(e.formerEditors)} + ${Er(e.formerEditors)} `:""} ${e.authors?Ht` - <dt>${e.multipleAuthors?Dr.authors:Dr.author}</dt> - ${Rr(e.authors)} + <dt>${e.multipleAuthors?Ir.authors:Ir.author}</dt> + ${Er(e.authors)} `:""} - ${e.otherLinks?e.otherLinks.map(xr):""} + ${e.otherLinks?e.otherLinks.map(kr):""} </dl> ${e.alternateFormats?Ht`<p> ${t.multipleAlternates?"This document is also available in these non-normative formats:":"This document is also available in this non-normative format:"} @@ -286,9 +340,9 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e `} </p>`} <hr title="Separator for header" /> - </div>`};const zr=rn({en:{sotd:"Status of This Document"},ko:{sotd:"현재 문서의 상태"},zh:{sotd:"关于本文档"},ja:{sotd:"この文書の位置付け"},nl:{sotd:"Status van dit document"},es:{sotd:"Estado de este Document"},de:{sotd:"Status dieses Dokuments"}});var Wr=(e,t)=>Ht` - <h2>${zr.sotd}</h2> - ${e.isPreview?Mr(e):""} + </div>`};const jr=rn({en:{sotd:"Status of This Document"},ko:{sotd:"현재 문서의 상태"},zh:{sotd:"关于本文档"},ja:{sotd:"この文書の位置付け"},nl:{sotd:"Status van dit document"},es:{sotd:"Estado de este Document"},de:{sotd:"Status dieses Dokuments"}});var zr=(e,t)=>Ht` + <h2>${jr.sotd}</h2> + ${e.isPreview?Wr(e):""} ${e.isUnofficial?function(e){const{additionalContent:t}=e;return Ht` <p> This document is a draft of a potential specification. It has no official @@ -329,7 +383,7 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e >list of acknowledged W3C Member Submissions</a >. </p>`}(e):e.isTeamSubmission?function(e,t){return Ht` - ${Ur(e,t)} + ${Mr(e,t)} <p> Please consult the complete <a href="https://www.w3.org/TeamSubmission/">list of Team Submissions</a>. @@ -352,7 +406,7 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e This document was published by ${e.wgHTML} as ${e.anOrA} ${e.longStatus}. ${t} ${e.notYetRec?"This document is intended to become a W3C Recommendation.":""} - </p>`}(e)} ${Fr(e,t)} + </p>`}(e)} ${Ur(e,t)} `} ${e.sotdAfterWGinfo?t.additionalContent:""} ${e.isRec?function({updateableRec:e,revisionTypes:t=[],humanRevisedRecEnd:n}){let r="";t.includes("addition")&&(r="additions");t.includes("correction")&&!r&&(r="corrections");return Ht`<p> @@ -458,7 +512,7 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e `} `} ${t.additionalSections} - `;function Mr(e){const{prUrl:t,prNumber:n,edDraftURI:r}=e;return Ht`<details class="annoying-warning" open=""> + `;function Wr(e){const{prUrl:t,prNumber:n,edDraftURI:r}=e;return Ht`<details class="annoying-warning" open=""> <summary> This is a preview${t&&n?Ht` @@ -474,13 +528,13 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e <a href="${r}">${r}</a> for the Editor's draft. `:""} </p> - </details>`}function Ur(e,t){const{mailToWGPublicListWithSubject:n,mailToWGPublicListSubscription:r}=t,{wgPublicList:o,subjectPrefix:s}=e;return Ht`<p> + </details>`}function Mr(e,t){const{mailToWGPublicListWithSubject:n,mailToWGPublicListSubscription:r}=t,{wgPublicList:o,subjectPrefix:s}=e;return Ht`<p> If you wish to make comments regarding this document, please send them to <a href="${n}">${o}@w3.org</a> (<a href="${r}">subscribe</a>, <a href="${`https://lists.w3.org/Archives/Public/${o}/`}">archives</a>)${s?Ht` with <code>${s}</code> at the start of your email's subject`:""}. - </p>`}function Fr(e,t){if(e.github||e.wgPublicList)return Ht`<p> + </p>`}function Ur(e,t){if(e.github||e.wgPublicList)return Ht`<p> ${e.github?Ht` <a href="${e.issueBase}">GitHub Issues</a> are preferred for discussion of this specification. @@ -498,9 +552,9 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e >)${e.subjectPrefix?Ht` with <code>${e.subjectPrefix}</code> at the start of your email's subject`:""}. `:""} - </p>`}var qr=(e,t)=>Ht` - <h2>${zr.sotd}</h2> - ${e.isPreview?Mr(e):""} + </p>`}var Fr=(e,t)=>Ht` + <h2>${jr.sotd}</h2> + ${e.isPreview?Wr(e):""} <p> This specification was published by the <a href="${e.wgURI}">${e.wg}</a>. It is not a W3C Standard nor is it @@ -524,20 +578,76 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e >. </p> ${e.sotdAfterWGinfo?"":t.additionalContent} - ${!e.github&&e.wgPublicList?Ur(e,t):""} - ${e.github?Fr(e,t):""} + ${!e.github&&e.wgPublicList?Mr(e,t):""} + ${e.github?Ur(e,t):""} ${e.sotdAfterWGinfo?t.additionalContent:""} ${t.additionalSections} - `;const Br="w3c/headers",Hr=new Intl.DateTimeFormat(["en-AU"],{timeZone:"UTC",year:"numeric",month:"long",day:"2-digit"}),Gr={LS:"WD",LD:"WD",FPWD:"WD",LC:"WD",FPLC:"WD","FPWD-NOTE":"NOTE","WD-NOTE":"WD","LC-NOTE":"LC","IG-NOTE":"NOTE","WG-NOTE":"NOTE"},Vr={NOTE:"w3p:NOTE",WD:"w3p:WD",LC:"w3p:LastCall",CR:"w3p:CR",CRD:"w3p:CRD",PR:"w3p:PR",REC:"w3p:REC",PER:"w3p:PER",RSCND:"w3p:RSCND"},Zr={NOTE:"Working Group Note","WG-NOTE":"Working Group Note","CG-NOTE":"Co-ordination Group Note","IG-NOTE":"Interest Group Note","Member-SUBM":"Member Submission","Team-SUBM":"Team Submission",MO:"Member-Only Document",ED:"Editor's Draft",LS:"Living Standard",LD:"Living Document",FPWD:"First Public Working Draft",WD:"Working Draft","FPWD-NOTE":"Working Group Note","WD-NOTE":"Working Draft","LC-NOTE":"Working Draft",FPLC:"First Public and Last Call Working Draft",LC:"Last Call Working Draft",CR:"Candidate Recommendation",CRD:"Candidate Recommendation",PR:"Proposed Recommendation",PER:"Proposed Edited Recommendation",REC:"Recommendation",RSCND:"Rescinded Recommendation",unofficial:"Unofficial Draft",base:"Document",finding:"TAG Finding","draft-finding":"Draft TAG Finding","CG-DRAFT":"Draft Community Group Report","CG-FINAL":"Final Community Group Report","BG-DRAFT":"Draft Business Group Report","BG-FINAL":"Final Business Group Report"},Yr={...Zr,CR:"Candidate Recommendation Snapshot",CRD:"Candidate Recommendation Draft","FPWD-NOTE":"First Public Working Group Note","LC-NOTE":"Last Call Working Draft"},Jr=["FPWD","WD"],Kr=["FPLC","LC","CR","CRD","PR","PER","REC"],Xr=["CG-DRAFT","CG-FINAL"],Qr=["BG-DRAFT","BG-FINAL"],eo=[...Xr,...Qr],to=["base",...Xr,...Qr,"draft-finding","finding","MO","unofficial"],no=["ED","IG-NOTE"],ro=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["w3c-software",{name:"W3C Software Notice and License",short:"W3C Software",url:"https://www.w3.org/Consortium/Legal/2002/copyright-software-20021231"}],["w3c-software-doc",{name:"W3C Software and Document Notice and License",short:"W3C Software and Document",url:"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}]]),oo=Object.freeze({id:"",alt:"",href:"",src:"",height:"48",width:"72"});function so(e,t,n=new Date){const r=e[t]?new Date(e[t]):new Date(n);if(Number.isFinite(r.valueOf())){const e=Jt.format(r);return new Date(e)}return Sn(`[\`${t}\`](https://github.com/w3c/respec/wiki/${t}) is not a valid date: "${e[t]}". Expected format 'YYYY-MM-DD'.`,Br),new Date(Jt.format(new Date))}function io(e,{isTagFinding:t=!1}){const n=e.cloneNode(!0),r=document.createDocumentFragment();for(;n.hasChildNodes()&&(n.firstChild.nodeType!==Node.ELEMENT_NODE||"section"!==n.firstChild.localName);)r.appendChild(n.firstChild);if(t&&!r.hasChildNodes()){Cn("ReSpec does not support automated SotD generation for TAG findings.",Br,{hint:"Please add the prerequisite content in the 'sotd' section."})}return{additionalContent:r,additionalSections:n.childNodes}}var ao=Object.freeze({__proto__:null,name:Br,cgStatus:Xr,bgStatus:Qr,cgbgStatus:eo,run:function(e){if(!e.specStatus){const e=`Missing required configuration: ${En("specStatus")}.`,t=`Please select an appropriate status from ${En("specStatus")} based on your W3C group. If in doubt, use \`"unofficial"\`.`;Sn(e,Br,{hint:t})}if(e.isUnofficial="unofficial"===e.specStatus,e.isUnofficial&&!Array.isArray(e.logos)&&(e.logos=[]),e.isUnofficial){if(e.license&&!ro.has(e.license)){const t=`The ${En("license")} configuration option has an invalid value: "\`${e.license}\`". Defaulting to "cc-by".`,n=[...ro.keys()].map(e=>`\`"${e}"\``).join(", "),r=`Please explicitly set ${En("license")} to one of: ${n}.`;Sn(t,Br,{hint:r}),e.license="cc-by"}void 0===e.license&&(e.license="cc-by")}if(e.isCCBY="cc-by"===e.license,e.isW3CSoftAndDocLicense="w3c-software-doc"===e.license,!e.isUnofficial&&["cc-by"].includes(e.license)){const t=`You cannot use license "\`${e.license}\`" with W3C Specs.`,n=`Please set ${En("license")} to "w3c-software-doc" instead.`;Sn(t,Br,{hint:n})}if(e.licenseInfo=ro.get(e.license),e.isCGBG=eo.includes(e.specStatus),e.isCGFinal=e.isCGBG&&e.specStatus.endsWith("G-FINAL"),e.isBasic="base"===e.specStatus,e.isRegular=!e.isCGBG&&!e.isBasic,e.isRegular&&!e.shortName){Sn("Missing required configuration: `shortName`",Br)}if(e.testSuiteURI){const t=new URL(e.testSuiteURI,location.href),{host:n,pathname:r}=t;if("github.com"===n&&r.startsWith("/w3c/web-platform-tests/")){const t="Web Platform Tests have moved to a new Github Organization at https://github.com/web-platform-tests. ",n=`Please update your ${En("testSuiteURI")} to point to the new tests repository (e.g., https://github.com/web-platform-tests/wpt/tree/master/${e.shortName} ).`;Cn(t,Br,{hint:n})}}if(e.subtitle||(e.subtitle=""),e.publishDate=so(e,"publishDate",document.lastModified),e.publishYear=e.publishDate.getUTCFullYear(),e.publishHumanDate=Hr.format(e.publishDate),e.isNoTrack=to.includes(e.specStatus),e.isRecTrack=!e.noRecTrack&&Kr.concat(Jr).includes(e.specStatus),e.isMemberSubmission="Member-SUBM"===e.specStatus,e.isMemberSubmission){const t={alt:"W3C Member Submission",href:"https://www.w3.org/Submission/",src:"https://www.w3.org/Icons/member_subm-v.svg",width:"211"};e.logos.push({...oo,...t})}if(e.isTeamSubmission="Team-SUBM"===e.specStatus,e.isTeamSubmission){const t={alt:"W3C Team Submission",href:"https://www.w3.org/TeamSubmission/",src:"https://www.w3.org/Icons/team_subm-v.svg",width:"211"};e.logos.push({...oo,...t})}if(e.isSubmission=e.isMemberSubmission||e.isTeamSubmission,e.anOrA=no.includes(e.specStatus)?"an":"a",e.isTagFinding="finding"===e.specStatus||"draft-finding"===e.specStatus,e.isRecTrack&&!function(e){return e.github||e.otherLinks&&e.otherLinks.find(e=>e.data.find(e=>e.href&&e.href.toString().match(/^https:\/\/github\.com\/.*\/issues/)))}(e)){Sn("Rec-track documents must link to Github issues from their head.",Br,{hint:"Please use the [`github`](https://respec.org/docs/#github) configuration option."})}if(!e.edDraftURI&&(e.edDraftURI="","ED"===e.specStatus)){Cn("Editor's Drafts should set edDraftURI.",Br)}e.maturity=Gr[e.specStatus]?Gr[e.specStatus]:e.specStatus;let t="TR";"Member-SUBM"===e.specStatus?t="Submission":"Team-SUBM"===e.specStatus&&(t="TeamSubmission"),e.isRegular&&(e.thisVersion=`https://www.w3.org/${t}/${e.publishDate.getUTCFullYear()}/${e.maturity}-${e.shortName}-${on(e.publishDate)}/`),"ED"===e.specStatus&&(e.thisVersion=e.edDraftURI);const n="ED"===e.specStatus&&null===e.latestVersion;if(e.isRegular&&!n&&(e.latestVersion=`https://www.w3.org/${t}/${e.shortName}/`),e.isTagFinding&&(e.latestVersion="https://www.w3.org/2001/tag/doc/"+e.shortName,e.thisVersion=`${e.latestVersion}-${Jt.format(e.publishDate)}`),e.previousPublishDate){if(!e.previousMaturity&&!e.isTagFinding){Sn("`previousPublishDate` is set, but not `previousMaturity`.",Br)}e.previousPublishDate=so(e,"previousPublishDate");const t=Gr[e.previousMaturity]?Gr[e.previousMaturity]:e.previousMaturity;e.isTagFinding?e.prevVersion=`${e.latestVersion}-${Jt.format(e.previousPublishDate)}`:e.isCGBG?e.prevVersion=e.prevVersion||"":e.isBasic?e.prevVersion="":e.prevVersion=`https://www.w3.org/TR/${e.previousPublishDate.getUTCFullYear()}/${t}-${e.shortName}-${on(e.previousPublishDate)}/`}else{if(!(e.specStatus.endsWith("NOTE")||"FPWD"===e.specStatus||"FPLC"===e.specStatus||"ED"===e.specStatus||e.noRecTrack||e.isNoTrack||e.isSubmission)){Sn("Document on track but no previous version.",Br,{hint:"Add [`previousMaturity`](https://respec.org/docs/#previousMaturity) and [`previousPublishDate`](https://respec.org/docs/#previousPublishDate) to ReSpec's config."})}e.prevVersion||(e.prevVersion="")}e.prevRecShortname&&!e.prevRecURI&&(e.prevRecURI="https://www.w3.org/TR/"+e.prevRecShortname);const r=function(e){if(!e.name){Sn("All authors and editors must have a `name` property.",Br,{hint:"See [Person](https://respec.org/docs/#person) configuration for available options."})}if(e.orcid)try{e.orcid=function(e){const t=new URL(e,"https://orcid.org/");if("https://orcid.org"!==t.origin)throw new Error(`The origin should be "https://orcid.org", not "${t.origin}".`);const n=t.pathname.slice(1).replace(/\/$/,"");if(!/^\d{4}-\d{4}-\d{4}-\d{3}(\d|X)$/.test(n))throw new Error(`ORCIDs have the format "1234-1234-1234-1234", not "${n}"`);const r=n[n.length-1],o=(12-n.split("").slice(0,-1).filter(e=>/\d/.test(e)).map(Number).reduce((e,t)=>2*(e+t),0)%11)%11,s=10===o?"X":String(o);if(r!==s)throw new Error(`"${n}" has an invalid checksum.`);return t.href}(e.orcid)}catch(t){Sn(`"${e.orcid}" is not an ORCID. ${t.message}`,Br),delete e.orcid}};if(e.formerEditors||(e.formerEditors=[]),e.editors){e.editors.forEach(r);for(let t=0;t<e.editors.length;t++){const n=e.editors[t];"retiredDate"in n&&(e.formerEditors.push(n),e.editors.splice(t--,1))}}if(!e.editors||0===e.editors.length){Sn("At least one editor is required",Br)}if(e.formerEditors.length&&e.formerEditors.forEach(r),e.authors&&e.authors.forEach(r),e.multipleEditors=e.editors&&e.editors.length>1,e.multipleFormerEditors=e.formerEditors.length>1,e.multipleAuthors=e.authors&&e.authors.length>1,(e.alternateFormats||[]).forEach(e=>{if(!e.uri||!e.label){Sn("All alternate formats must have a uri and a label.",Br)}}),e.copyrightStart&&e.copyrightStart==e.publishYear&&(e.copyrightStart=""),e.longStatus=Yr[e.specStatus],e.textStatus=Zr[e.specStatus],Vr[e.specStatus]&&(e.rdfStatus=Vr[e.specStatus]),e.showThisVersion=!e.isNoTrack||e.isTagFinding,e.showPreviousVersion="FPWD"!==e.specStatus&&"FPLC"!==e.specStatus&&"ED"!==e.specStatus&&!e.isNoTrack&&!e.isSubmission,e.specStatus.endsWith("NOTE")&&!e.prevVersion&&(e.showPreviousVersion=!1),e.isTagFinding&&(e.showPreviousVersion=!!e.previousPublishDate),e.notYetRec=e.isRecTrack&&"REC"!==e.specStatus,e.isRec=e.isRecTrack&&"REC"===e.specStatus,e.isRec&&!e.errata){Sn("Recommendations must have an errata link.",Br,{hint:"Add an [`errata`](https://respec.org/docs/#errata) URL to your respecConfig."})}if(e.prependW3C=!e.isUnofficial,e.isED="ED"===e.specStatus,e.isCR="CR"===e.specStatus||"CRD"===e.specStatus,e.isCRDraft="CRD"===e.specStatus,e.isPR="PR"===e.specStatus,e.isPER="PER"===e.specStatus,e.isMO="MO"===e.specStatus,e.isNote=["FPWD-NOTE","WG-NOTE"].includes(e.specStatus),e.isIGNote="IG-NOTE"===e.specStatus,e.dashDate=Jt.format(e.publishDate),e.publishISODate=e.publishDate.toISOString(),e.shortISODate=Jt.format(e.publishDate),e.wgPatentPolicy&&!["PP2017","PP2020"].includes(e.wgPatentPolicy)){Sn("Invalid [`wgPatentPolicy`](https://respec.org/docs#wgPatentPolicy) value.",Br,{hint:'Please use `"PP2017"` or `"PP2020"`.'})}e.hasOwnProperty("wgPatentURI")&&!Array.isArray(e.wgPatentURI)?Object.defineProperty(e,"wgId",{get(){const e=this.wgPatentURI.split("/"),t=e.findIndex(e=>"pp-impl"===e)+1;return e[t]||""}}):e.wgId=e.wgId?e.wgId:"";const o={get multipleAlternates(){return e.alternateFormats&&e.alternateFormats.length>1},get alternatesHTML(){return e.alternateFormats&&un(e.alternateFormats,e=>{const t=e.hasOwnProperty("lang")&&e.lang?e.lang:null,n=e.hasOwnProperty("type")&&e.type?e.type:null;return Ht`<a + `;const qr="w3c/headers",Br=new Intl.DateTimeFormat(["en-AU"],{timeZone:"UTC",year:"numeric",month:"long",day:"2-digit"}),Hr={LS:"WD",LD:"WD",FPWD:"WD",LC:"WD",FPLC:"WD","FPWD-NOTE":"NOTE","WD-NOTE":"WD","LC-NOTE":"LC","IG-NOTE":"NOTE","WG-NOTE":"NOTE"},Gr={NOTE:"w3p:NOTE",WD:"w3p:WD",LC:"w3p:LastCall",CR:"w3p:CR",CRD:"w3p:CRD",PR:"w3p:PR",REC:"w3p:REC",PER:"w3p:PER",RSCND:"w3p:RSCND"},Vr={NOTE:"Working Group Note","WG-NOTE":"Working Group Note","CG-NOTE":"Co-ordination Group Note","IG-NOTE":"Interest Group Note","Member-SUBM":"Member Submission","Team-SUBM":"Team Submission",MO:"Member-Only Document",ED:"Editor's Draft",LS:"Living Standard",LD:"Living Document",FPWD:"First Public Working Draft",WD:"Working Draft","FPWD-NOTE":"Working Group Note","WD-NOTE":"Working Draft","LC-NOTE":"Working Draft",FPLC:"First Public and Last Call Working Draft",LC:"Last Call Working Draft",CR:"Candidate Recommendation",CRD:"Candidate Recommendation",PR:"Proposed Recommendation",PER:"Proposed Edited Recommendation",REC:"Recommendation",RSCND:"Rescinded Recommendation",unofficial:"Unofficial Draft",base:"Document",finding:"TAG Finding","draft-finding":"Draft TAG Finding","CG-DRAFT":"Draft Community Group Report","CG-FINAL":"Final Community Group Report","BG-DRAFT":"Draft Business Group Report","BG-FINAL":"Final Business Group Report"},Zr={...Vr,CR:"Candidate Recommendation Snapshot",CRD:"Candidate Recommendation Draft","FPWD-NOTE":"First Public Working Group Note","LC-NOTE":"Last Call Working Draft"},Yr=["FPWD","WD"],Jr=["FPLC","LC","CR","CRD","PR","PER","REC"],Kr=["CG-DRAFT","CG-FINAL"],Xr=["BG-DRAFT","BG-FINAL"],Qr=[...Kr,...Xr],eo=["base",...Kr,...Xr,"draft-finding","finding","MO","unofficial"],to=["ED","IG-NOTE"],no=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["w3c-software",{name:"W3C Software Notice and License",short:"W3C Software",url:"https://www.w3.org/Consortium/Legal/2002/copyright-software-20021231"}],["w3c-software-doc",{name:"W3C Software and Document Notice and License",short:"W3C Software and Document",url:"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}]]),ro=["PP2017","PP2020"],oo=Object.freeze({id:"",alt:"",href:"",src:"",height:"48",width:"72"});function so(e,t,n=new Date){const r=e[t]?new Date(e[t]):new Date(n);if(Number.isFinite(r.valueOf())){const e=Jt.format(r);return new Date(e)}return _n(`[\`${t}\`](https://github.com/w3c/respec/wiki/${t}) is not a valid date: "${e[t]}". Expected format 'YYYY-MM-DD'.`,qr),new Date(Jt.format(new Date))}function io(e,{isTagFinding:t=!1}){const n=e.cloneNode(!0),r=document.createDocumentFragment();for(;n.hasChildNodes()&&(n.firstChild.nodeType!==Node.ELEMENT_NODE||"section"!==n.firstChild.localName);)r.appendChild(n.firstChild);if(t&&!r.hasChildNodes()){Cn("ReSpec does not support automated SotD generation for TAG findings.",qr,{hint:"Please add the prerequisite content in the 'sotd' section."})}return{additionalContent:r,additionalSections:n.childNodes}}var ao=Object.freeze({__proto__:null,name:qr,cgStatus:Kr,bgStatus:Xr,cgbgStatus:Qr,run:function(e){if(!e.specStatus){const e=`Missing required configuration: ${En("specStatus")}.`,t=`Please select an appropriate status from ${En("specStatus")} based on your W3C group. If in doubt, use \`"unofficial"\`.`;_n(e,qr,{hint:t})}if(e.isUnofficial="unofficial"===e.specStatus,e.isUnofficial&&!Array.isArray(e.logos)&&(e.logos=[]),e.isUnofficial){if(e.license&&!no.has(e.license)){const t=`The ${En("license")} configuration option has an invalid value: "\`${e.license}\`". Defaulting to "cc-by".`,n=[...no.keys()].map(e=>`\`"${e}"\``).join(", "),r=`Please explicitly set ${En("license")} to one of: ${n}.`;_n(t,qr,{hint:r}),e.license="cc-by"}void 0===e.license&&(e.license="cc-by")}if(e.isCCBY="cc-by"===e.license,e.isW3CSoftAndDocLicense="w3c-software-doc"===e.license,!e.isUnofficial&&["cc-by"].includes(e.license)){const t=`You cannot use license "\`${e.license}\`" with W3C Specs.`,n=`Please set ${En("license")} to "w3c-software-doc" instead.`;_n(t,qr,{hint:n})}if(e.licenseInfo=no.get(e.license),e.isCGBG=Qr.includes(e.specStatus),e.isCGFinal=e.isCGBG&&e.specStatus.endsWith("G-FINAL"),e.isBasic="base"===e.specStatus,e.isRegular=!e.isCGBG&&!e.isBasic,e.isRegular&&!e.shortName){_n("Missing required configuration: `shortName`",qr)}if(e.testSuiteURI){const t=new URL(e.testSuiteURI,location.href),{host:n,pathname:r}=t;if("github.com"===n&&r.startsWith("/w3c/web-platform-tests/")){const t="Web Platform Tests have moved to a new Github Organization at https://github.com/web-platform-tests. ",n=`Please update your ${En("testSuiteURI")} to point to the new tests repository (e.g., https://github.com/web-platform-tests/wpt/tree/master/${e.shortName} ).`;Cn(t,qr,{hint:n})}}if(e.subtitle||(e.subtitle=""),e.publishDate=so(e,"publishDate",document.lastModified),e.publishYear=e.publishDate.getUTCFullYear(),e.publishHumanDate=Br.format(e.publishDate),e.isNoTrack=eo.includes(e.specStatus),e.isRecTrack=!e.noRecTrack&&Jr.concat(Yr).includes(e.specStatus),e.isMemberSubmission="Member-SUBM"===e.specStatus,e.isMemberSubmission){const t={alt:"W3C Member Submission",href:"https://www.w3.org/Submission/",src:"https://www.w3.org/Icons/member_subm-v.svg",width:"211"};e.logos.push({...oo,...t})}if(e.isTeamSubmission="Team-SUBM"===e.specStatus,e.isTeamSubmission){const t={alt:"W3C Team Submission",href:"https://www.w3.org/TeamSubmission/",src:"https://www.w3.org/Icons/team_subm-v.svg",width:"211"};e.logos.push({...oo,...t})}if(e.isSubmission=e.isMemberSubmission||e.isTeamSubmission,e.anOrA=to.includes(e.specStatus)?"an":"a",e.isTagFinding="finding"===e.specStatus||"draft-finding"===e.specStatus,e.isRecTrack&&!function(e){return e.github||e.otherLinks&&e.otherLinks.find(e=>e.data.find(e=>e.href&&e.href.toString().match(/^https:\/\/github\.com\/.*\/issues/)))}(e)){_n("Rec-track documents must link to Github issues from their head.",qr,{hint:"Please use the [`github`](https://respec.org/docs/#github) configuration option."})}if(!e.edDraftURI&&(e.edDraftURI="","ED"===e.specStatus)){Cn("Editor's Drafts should set edDraftURI.",qr)}e.maturity=Hr[e.specStatus]?Hr[e.specStatus]:e.specStatus;let t="TR";"Member-SUBM"===e.specStatus?t="Submission":"Team-SUBM"===e.specStatus&&(t="TeamSubmission"),e.isRegular&&(e.thisVersion=`https://www.w3.org/${t}/${e.publishDate.getUTCFullYear()}/${e.maturity}-${e.shortName}-${on(e.publishDate)}/`),"ED"===e.specStatus&&(e.thisVersion=e.edDraftURI);const n="ED"===e.specStatus&&null===e.latestVersion;if(e.isRegular&&!n&&(e.latestVersion=`https://www.w3.org/${t}/${e.shortName}/`),e.isTagFinding&&(e.latestVersion="https://www.w3.org/2001/tag/doc/"+e.shortName,e.thisVersion=`${e.latestVersion}-${Jt.format(e.publishDate)}`),e.previousPublishDate){if(!e.previousMaturity&&!e.isTagFinding){_n("`previousPublishDate` is set, but not `previousMaturity`.",qr)}e.previousPublishDate=so(e,"previousPublishDate");const t=Hr[e.previousMaturity]?Hr[e.previousMaturity]:e.previousMaturity;e.isTagFinding?e.prevVersion=`${e.latestVersion}-${Jt.format(e.previousPublishDate)}`:e.isCGBG?e.prevVersion=e.prevVersion||"":e.isBasic?e.prevVersion="":e.prevVersion=`https://www.w3.org/TR/${e.previousPublishDate.getUTCFullYear()}/${t}-${e.shortName}-${on(e.previousPublishDate)}/`}else{if(!(e.specStatus.endsWith("NOTE")||"FPWD"===e.specStatus||"FPLC"===e.specStatus||"ED"===e.specStatus||e.noRecTrack||e.isNoTrack||e.isSubmission)){_n("Document on track but no previous version.",qr,{hint:"Add [`previousMaturity`](https://respec.org/docs/#previousMaturity) and [`previousPublishDate`](https://respec.org/docs/#previousPublishDate) to ReSpec's config."})}e.prevVersion||(e.prevVersion="")}e.prevRecShortname&&!e.prevRecURI&&(e.prevRecURI="https://www.w3.org/TR/"+e.prevRecShortname);const r=function(e){if(!e.name){_n("All authors and editors must have a `name` property.",qr,{hint:"See [Person](https://respec.org/docs/#person) configuration for available options."})}if(e.orcid)try{e.orcid=function(e){const t=new URL(e,"https://orcid.org/");if("https://orcid.org"!==t.origin)throw new Error(`The origin should be "https://orcid.org", not "${t.origin}".`);const n=t.pathname.slice(1).replace(/\/$/,"");if(!/^\d{4}-\d{4}-\d{4}-\d{3}(\d|X)$/.test(n))throw new Error(`ORCIDs have the format "1234-1234-1234-1234", not "${n}"`);const r=n[n.length-1],o=(12-n.split("").slice(0,-1).filter(e=>/\d/.test(e)).map(Number).reduce((e,t)=>2*(e+t),0)%11)%11,s=10===o?"X":String(o);if(r!==s)throw new Error(`"${n}" has an invalid checksum.`);return t.href}(e.orcid)}catch(t){_n(`"${e.orcid}" is not an ORCID. ${t.message}`,qr),delete e.orcid}};if(e.formerEditors||(e.formerEditors=[]),e.editors){e.editors.forEach(r);for(let t=0;t<e.editors.length;t++){const n=e.editors[t];"retiredDate"in n&&(e.formerEditors.push(n),e.editors.splice(t--,1))}}if(!e.editors||0===e.editors.length){_n("At least one editor is required",qr)}if(e.formerEditors.length&&e.formerEditors.forEach(r),e.authors&&e.authors.forEach(r),e.multipleEditors=e.editors&&e.editors.length>1,e.multipleFormerEditors=e.formerEditors.length>1,e.multipleAuthors=e.authors&&e.authors.length>1,(e.alternateFormats||[]).forEach(e=>{if(!e.uri||!e.label){_n("All alternate formats must have a uri and a label.",qr)}}),e.copyrightStart&&e.copyrightStart==e.publishYear&&(e.copyrightStart=""),e.longStatus=Zr[e.specStatus],e.textStatus=Vr[e.specStatus],Gr[e.specStatus]&&(e.rdfStatus=Gr[e.specStatus]),e.showThisVersion=!e.isNoTrack||e.isTagFinding,e.showPreviousVersion="FPWD"!==e.specStatus&&"FPLC"!==e.specStatus&&"ED"!==e.specStatus&&!e.isNoTrack&&!e.isSubmission,e.specStatus.endsWith("NOTE")&&!e.prevVersion&&(e.showPreviousVersion=!1),e.isTagFinding&&(e.showPreviousVersion=!!e.previousPublishDate),e.notYetRec=e.isRecTrack&&"REC"!==e.specStatus,e.isRec=e.isRecTrack&&"REC"===e.specStatus,e.isRec&&!e.errata){_n("Recommendations must have an errata link.",qr,{hint:"Add an [`errata`](https://respec.org/docs/#errata) URL to your respecConfig."})}e.prependW3C=!e.isUnofficial,e.isED="ED"===e.specStatus,e.isCR="CR"===e.specStatus||"CRD"===e.specStatus,e.isCRDraft="CRD"===e.specStatus,e.isPR="PR"===e.specStatus,e.isPER="PER"===e.specStatus,e.isMO="MO"===e.specStatus,e.isNote=["FPWD-NOTE","WG-NOTE"].includes(e.specStatus),e.isIGNote="IG-NOTE"===e.specStatus,e.dashDate=Jt.format(e.publishDate),e.publishISODate=e.publishDate.toISOString(),e.shortISODate=Jt.format(e.publishDate),function(e){if(!e.hasOwnProperty("wgPatentPolicy"))return;const t=new Set([].concat(e.wgPatentPolicy));if(t.size&&![...t].every(e=>ro.includes(e))){const t=`Invalid [\`wgPatentPolicy\`](https://respec.org/docs#wgPatentPolicy) value: "${e.wgPatentPolicy}".`,n=`Please use one of: ${ro.map(e=>`\`${e}\``).join(", ")} .`;_n(t,qr,{hint:n})}if(1!==t.size){const e="When collaborating across multiple groups, they must use the same patent policy.",n=`Please check the patent policies of each group. The patent policies were: ${[...t].join(", ")}.`;_n(e,qr,{hint:n})}e.wgPatentPolicy=[...t][0]}(e),e.hasOwnProperty("wgPatentURI")&&!Array.isArray(e.wgPatentURI)?Object.defineProperty(e,"wgId",{get(){const e=this.wgPatentURI.split("/"),t=e.findIndex(e=>"pp-impl"===e)+1;return e[t]||""}}):e.wgId=e.wgId?e.wgId:"";const o={get multipleAlternates(){return e.alternateFormats&&e.alternateFormats.length>1},get alternatesHTML(){return e.alternateFormats&&un(e.alternateFormats,e=>{const t=e.hasOwnProperty("lang")&&e.lang?e.lang:null,n=e.hasOwnProperty("type")&&e.type?e.type:null;return Ht`<a rel="alternate" href="${e.uri}" hreflang="${t}" type="${n}" >${e.label}</a - >`})}},s=(e.isCGBG?Or:Nr)(e,o);document.body.prepend(s),document.body.classList.add("h-entry");const i=document.getElementById("sotd")||document.createElement("section");if((e.isCGBG||!e.isNoTrack||e.isTagFinding)&&!i.id){Sn("A custom SotD paragraph is required for your type of document.",Br)}i.id=i.id||"sotd",i.classList.add("introductory");const a=[e.wg,e.wgURI,e.wgPatentURI];if(a.some(e=>Array.isArray(e))&&!a.every(e=>Array.isArray(e))){Sn("If one of '`wg`', '`wgURI`', or '`wgPatentURI`' is an array, they all have to be.",Br)}if(e.isCGBG&&!e.wg){Sn("[`wg`](https://github.com/w3c/respec/wiki/wg) configuration option is required for this kind of document.",Br)}if(Array.isArray(e.wg)){e.multipleWGs=e.wg.length>1,e.wgHTML=un(e.wg,(t,n)=>Ht`the <a href="${e.wgURI[n]}">${t}</a>`);const t=[];for(let n=0,r=e.wg.length;n<r;n++)t.push(Ht`a + >`})}},s=(e.isCGBG?Or:Dr)(e,o);document.body.prepend(s),document.body.classList.add("h-entry");const i=document.getElementById("sotd")||document.createElement("section");if((e.isCGBG||!e.isNoTrack||e.isTagFinding)&&!i.id){_n("A custom SotD paragraph is required for your type of document.",qr)}i.id=i.id||"sotd",i.classList.add("introductory");const a=[e.wg,e.wgURI,e.wgPatentURI];if(a.some(e=>Array.isArray(e))&&!a.every(e=>Array.isArray(e))){_n("If one of '`wg`', '`wgURI`', or '`wgPatentURI`' is an array, they all have to be.",qr)}if(e.isCGBG&&!e.wg){_n("[`wg`](https://github.com/w3c/respec/wiki/wg) configuration option is required for this kind of document.",qr)}if(Array.isArray(e.wg)){e.multipleWGs=e.wg.length>1,e.wgHTML=un(e.wg,(t,n)=>Ht`the <a href="${e.wgURI[n]}">${t}</a>`);const t=[];for(let n=0,r=e.wg.length;n<r;n++)t.push(Ht`a <a href="${e.wgPatentURI[n]}" rel="disclosure" >public list of any patent disclosures (${e.wg[n]})</a - >`);e.wgPatentHTML=un(t)}else e.multipleWGs=!1,e.wg&&(e.wgHTML=Ht`the <a href="${e.wgURI}">${e.wg}</a>`);if("PR"===e.specStatus&&!e.crEnd){Sn('`specStatus` is "PR" but no `crEnd` is specified (needed to indicate end of previous CR).',Br)}if("CR"===e.specStatus&&!e.crEnd){Sn('`specStatus` is "CR", but no `crEnd` is specified in Respec config.',Br)}if(e.crEnd=so(e,"crEnd"),e.humanCREnd=Hr.format(e.crEnd),"PR"===e.specStatus&&!e.prEnd){Sn('`specStatus` is "PR" but no `prEnd` is specified.',Br)}if(e.prEnd=so(e,"prEnd"),e.humanPREnd=Hr.format(e.prEnd),"PER"===e.specStatus&&!e.perEnd){Sn("Status is PER but no perEnd is specified",Br)}e.perEnd=so(e,"perEnd"),e.humanPEREnd=Hr.format(e.perEnd);const c=["addition","correction"];if("REC"===e.specStatus&&e.revisionTypes&&e.revisionTypes.length>0){const t=e.revisionTypes.find(e=>!c.includes(e));if(t){Sn(`\`specStatus\` is "REC" with unknown revision type '${t}'`,Br)}if(e.revisionTypes.includes("addition")&&!e.updateableRec){Sn('`specStatus` is "REC" with proposed additions but the Rec is not marked as a allowing new features.',Br)}}if("REC"===e.specStatus&&e.updateableRec&&e.revisionTypes&&e.revisionTypes.length>0&&!e.revisedRecEnd){Sn('`specStatus` is "REC" with proposed corrections or additions but no `revisedRecEnd` is specified.',Br)}if(e.revisedRecEnd=so(e,"revisedRecEnd"),e.humanRevisedRecEnd=Hr.format(e.revisedRecEnd),e.recNotExpected=!(!e.noRecTrack&&!e.recNotExpected)||!e.isRecTrack&&"WD"==e.maturity&&"FPWD-NOTE"!==e.specStatus,e.noRecTrack&&Kr.includes(e.specStatus)){const t=`Document configured as [\`noRecTrack\`](https://github.com/w3c/respec/wiki/noRecTrack), but its status ("${e.specStatus}") puts it on the W3C Rec Track.`,n=`Status cannot be any of: ${Kr.join(", ")}.`;Sn(t,Br,{hint:n})}if(e.isIGNote&&!e.charterDisclosureURI){Sn("IG-NOTEs must link to charter's disclosure section using `charterDisclosureURI`.",Br)}if(i.classList.contains("override")||Ht.bind(i)`${function(e,t){const n={...io(t,e),get mailToWGPublicList(){return`mailto:${e.wgPublicList}@w3.org`},get mailToWGPublicListWithSubject(){const t=e.subjectPrefix?"?subject="+encodeURIComponent(e.subjectPrefix):"";return this.mailToWGPublicList+t},get mailToWGPublicListSubscription(){return`mailto:${e.wgPublicList}-request@w3.org?subject=subscribe`}};return(e.isCGBG?qr:Wr)(e,n)}(e,i)}`,!e.implementationReportURI&&e.isCR){Sn("CR documents must have an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).",Br)}if(!e.implementationReportURI&&e.isPR){Cn("PR documents should include an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).",Br)}An("amend-user-config",{publishISODate:e.publishISODate,generatedSubtitle:`${e.longStatus} ${e.publishHumanDate}`})}});const co=new WeakMap;class lo{constructor(e,t){co.set(this,{name:e,lintingFunction:t})}get name(){return co.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return co.get(this).lintingFunction(e,t)}}const uo="check-charset",po={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},fo=s in po?s:"en";const ho=new lo(uo,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:uo,occurrences:n.length,...po[fo]}})),mo="check-internal-slots",go={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},bo=s in go?s:"en";const yo=new lo(mo,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:mo,offendingElements:n,occurrences:n.length,...go[bo]}})),wo="check-punctuation",vo=[".",":","!","?"],ko={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${vo.map(e=>`"${e}"`).join(", ")}.`}},xo=s in ko?s:"en";const $o=new lo(wo,(function(e,t){const n=new RegExp(`[${vo.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:wo,offendingElements:r,occurrences:r.length,...ko[xo]}})),_o="core/linter",So=new WeakMap;const Co=new class{constructor(){So.set(this,{rules:new Set})}get rules(){return So.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...So.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...Eo,...t},{description:r,help:o,howToFix:s,name:i,occurrences:a,offendingElements:c}=n,l=c.length?r:`${r} (Count: ${a})`;Cn(l,`${_o}/${i}`,{hint:`${s} ${o}`,elements:c})}(n.lint(e,t)));await n}},Eo={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var Ro=Object.freeze({__proto__:null,name:_o,default:Co,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await Co.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const To="local-refs-exist",Ao={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},Po=s in Ao?s:"en";const Lo=new lo(To,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(Io);if(n.length)return{name:To,offendingElements:n,occurrences:n.length,...Ao[Po]}}));function Io(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const Do="no-headingless-sections",No={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},jo=s in No?s:"en",Oo=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const zo=new lo(Do,(function(e,t){const n=[...t.querySelectorAll("section")].filter(Oo);if(n.length)return{name:Do,offendingElements:n,occurrences:n.length,...No[jo]}})),Wo="no-http-props",Mo={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},Uo=s in Mo?s:"en";const Fo=new lo(Wo,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:Wo,occurrences:n.length,...Mo[Uo]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),qo="no-unused-vars",Bo={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Ho=s in Bo?s:"en";const Go=new lo(qo,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=nn(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:qo,offendingElements:n,occurrences:n.length,...Bo[Ho]}})),Vo="privsec-section",Zo={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},Yo=s in Zo?s:"en";const Jo=new lo(Vo,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Vo,occurrences:1,...Zo[Yo]}}));Co.register(Fo,zo,Go,$o,Lo,yo,ho,Jo);const Ko={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0},Xo="wpt-tests-exist",Qo={en:{description:"Non-existent Web Platform Tests",howToFix:"Please fix the tests mentioned.",help:"See developer console."}},es=s in Qo?s:"en";const ts=new lo(Xo,(async function(e,t){const n=await async function(e,t){let n;try{const t=new URL(e);if(t.pathname.startsWith("/web-platform-tests/wpt/tree/master/")){const e=/web-platform-tests\/wpt\/tree\/master\/(.+)/;n=t.pathname.match(e)[1].replace(/\//g,"")}else n=t.pathname.replace(/\//g,"")}catch(e){return Cn("Failed to parse WPT directory from testSuiteURI","linter/"+Xo),console.error(e),null}const r=new URL("web-platform-tests/wpt/files",t+"/");r.searchParams.set("path",n);const o=await fetch(r);if(!o.ok){return Cn(`Failed to fetch files from WPT repository. Request failed with error: ${await o.text()} (${o.status})`,"linter/"+Xo),null}const{entries:s}=await o.json(),i=s.filter(e=>!e.endsWith("/"));return new Set(i)}(e.testSuiteURI,e.githubAPI);if(!n)return;const r=[],o=new Set,s=[...t.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);for(const e of s){const t=e.dataset.tests.split(/,/gm).map(e=>e.trim().split("#")[0]).filter(e=>e).filter(e=>!n.has(e));t.length&&(r.push(e),t.forEach(e=>o.add(e)))}if(!r.length)return;const i=[...o].map(e=>`\`${e}\``);return{name:Xo,offendingElements:r,occurrences:r.length,...Qo[es],description:`${Qo[es].description}: ${i.join(", ")}.`}}));const ns="w3c/defaults";Co.register(Jo,ts);const rs={src:"https://www.w3.org/StyleSheets/TR/2016/logos/W3C",alt:"W3C",height:48,width:72,url:"https://www.w3.org/"},os={lint:{"privsec-section":!0,"wpt-tests-exist":!1},doJsonLd:!1,logos:[],xref:!0};function ss(e){return e.map(e=>`\`"${e}"\``).join(", ")}var is=Object.freeze({__proto__:null,name:ns,run:function(e){const t=!1!==e.lint&&{...Ko.lint,...os.lint,...e.lint};e.specStatus&&"unofficial"!==e.specStatus.toLowerCase()&&(os.logos.push(rs),e.hasOwnProperty("license")||(os.license="w3c-software-doc")),Object.assign(e,{...Ko,...os,...e,lint:t}),e.groupType&&e.specStatus&&function(e){const{specStatus:t,groupType:n}=e;switch(n){case"cg":if(![...eo,"unofficial"].includes(t)){const n=`W3C Community Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,r=`Please use one of: ${ss(Xr)}. Automatically falling back to \`"CG-DRAFT"\`.`;Sn(n,ns,{hint:r}),e.specStatus="CG-DRAFT"}break;case"bg":if(![...Qr,"unofficial"].includes(t)){const n=`W3C Business Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,r=`Please use one of: ${ss(Qr)}. Automatically falling back to \`"BG-DRAFT"\`.`;Sn(n,ns,{hint:r}),e.specStatus="BG-DRAFT"}break;case"wg":if(eo.includes(t)){const e=`W3C Working Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,n=`Please see ${En("specStatus")} for appropriate values for this type of group.`;Sn(e,ns,{hint:n})}}}(e)}});const as=async function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Su}))).default}catch{return Wn("respec.css")}}(),document.head.appendChild(e),e}();var cs=Object.freeze({__proto__:null,name:"core/style",run:async function(e){e.noReSpecCSS&&(await as).remove()}});const ls="w3c/style";const us=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/base.css",as:"style"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/logos/W3C",as:"image"}],t=document.createDocumentFragment();for(const n of e.map(Xt))t.appendChild(n);return t}();us.appendChild(function(){const e=document.createElement("link");return e.rel="stylesheet",e.href="https://www.w3.org/StyleSheets/TR/2016/base.css",e.classList.add("removeOnSave"),e}()),document.head.querySelector("meta[name=viewport]")||us.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(us);var ds=Object.freeze({__proto__:null,name:ls,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'base'.";e.specStatus="base",Cn(t,ls)}let t="W3C-";switch(e.specStatus.toUpperCase()){case"CG-DRAFT":case"CG-FINAL":case"BG-DRAFT":case"BG-FINAL":t=e.specStatus.toLowerCase();break;case"FPWD":case"LC":case"WD-NOTE":case"LC-NOTE":t+="WD";break;case"WG-NOTE":case"FPWD-NOTE":t+="WG-NOTE.css";break;case"UNOFFICIAL":t+="UD";break;case"FINDING":case"FINDING-DRAFT":case"BASE":t="base.css";break;default:t+=e.specStatus}const n=function(e){let t="";switch(e){case null:case!0:t="2016";break;default:e&&!isNaN(e)&&(t=e.toString().trim())}return t}(e.useExperimentalStyles||"2016");n&&!e.noToc&&Pn("end-all",()=>{!function(e,t){const n=e.createElement("script");location.hash&&n.addEventListener("load",()=>{window.location.href=location.hash},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,n)},{once:!0});const r=`https://www.w3.org/StyleSheets/TR/${n?n+"/":""}${t}`;var o;!function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,r),Pn("beforesave",(o=r,e=>{const t=e.querySelector(`head link[href="${o}"]`);e.querySelector("head").append(t)}))}});const ps={en:{status_at_publication:Ht`This section describes the status of this + >`);e.wgPatentHTML=un(t)}else e.multipleWGs=!1,e.wg&&(e.wgHTML=Ht`the <a href="${e.wgURI}">${e.wg}</a>`);if("PR"===e.specStatus&&!e.crEnd){_n('`specStatus` is "PR" but no `crEnd` is specified (needed to indicate end of previous CR).',qr)}if("CR"===e.specStatus&&!e.crEnd){_n('`specStatus` is "CR", but no `crEnd` is specified in Respec config.',qr)}if(e.crEnd=so(e,"crEnd"),e.humanCREnd=Br.format(e.crEnd),"PR"===e.specStatus&&!e.prEnd){_n('`specStatus` is "PR" but no `prEnd` is specified.',qr)}if(e.prEnd=so(e,"prEnd"),e.humanPREnd=Br.format(e.prEnd),"PER"===e.specStatus&&!e.perEnd){_n("Status is PER but no perEnd is specified",qr)}e.perEnd=so(e,"perEnd"),e.humanPEREnd=Br.format(e.perEnd);const c=["addition","correction"];if("REC"===e.specStatus&&e.revisionTypes&&e.revisionTypes.length>0){const t=e.revisionTypes.find(e=>!c.includes(e));if(t){_n(`\`specStatus\` is "REC" with unknown revision type '${t}'`,qr)}if(e.revisionTypes.includes("addition")&&!e.updateableRec){_n('`specStatus` is "REC" with proposed additions but the Rec is not marked as a allowing new features.',qr)}}if("REC"===e.specStatus&&e.updateableRec&&e.revisionTypes&&e.revisionTypes.length>0&&!e.revisedRecEnd){_n('`specStatus` is "REC" with proposed corrections or additions but no `revisedRecEnd` is specified.',qr)}if(e.revisedRecEnd=so(e,"revisedRecEnd"),e.humanRevisedRecEnd=Br.format(e.revisedRecEnd),e.recNotExpected=!(!e.noRecTrack&&!e.recNotExpected)||!e.isRecTrack&&"WD"==e.maturity&&"FPWD-NOTE"!==e.specStatus,e.noRecTrack&&Jr.includes(e.specStatus)){const t=`Document configured as [\`noRecTrack\`](https://github.com/w3c/respec/wiki/noRecTrack), but its status ("${e.specStatus}") puts it on the W3C Rec Track.`,n=`Status cannot be any of: ${Jr.join(", ")}.`;_n(t,qr,{hint:n})}if(e.isIGNote&&!e.charterDisclosureURI){_n("IG-NOTEs must link to charter's disclosure section using `charterDisclosureURI`.",qr)}if(i.classList.contains("override")||Ht.bind(i)`${function(e,t){const n={...io(t,e),get mailToWGPublicList(){return`mailto:${e.wgPublicList}@w3.org`},get mailToWGPublicListWithSubject(){const t=e.subjectPrefix?"?subject="+encodeURIComponent(e.subjectPrefix):"";return this.mailToWGPublicList+t},get mailToWGPublicListSubscription(){return`mailto:${e.wgPublicList}-request@w3.org?subject=subscribe`}};return(e.isCGBG?Fr:zr)(e,n)}(e,i)}`,!e.implementationReportURI&&e.isCR){_n("CR documents must have an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).",qr)}if(!e.implementationReportURI&&e.isPR){Cn("PR documents should include an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).",qr)}An("amend-user-config",{publishISODate:e.publishISODate,generatedSubtitle:`${e.longStatus} ${e.publishHumanDate}`})}});const co=new WeakMap;class lo{constructor(e,t){co.set(this,{name:e,lintingFunction:t})}get name(){return co.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return co.get(this).lintingFunction(e,t)}}const uo="check-charset",po={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},fo=s in po?s:"en";const ho=new lo(uo,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:uo,occurrences:n.length,...po[fo]}})),mo="check-internal-slots",go={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},bo=s in go?s:"en";const wo=new lo(mo,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:mo,offendingElements:n,occurrences:n.length,...go[bo]}})),yo="check-punctuation",vo=[".",":","!","?"],ko={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${vo.map(e=>`"${e}"`).join(", ")}.`}},xo=s in ko?s:"en";const $o=new lo(yo,(function(e,t){const n=new RegExp(`[${vo.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:yo,offendingElements:r,occurrences:r.length,...ko[xo]}})),So="core/linter",_o=new WeakMap;const Co=new class{constructor(){_o.set(this,{rules:new Set})}get rules(){return _o.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[..._o.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...Eo,...t},{description:r,help:o,howToFix:s,name:i,occurrences:a,offendingElements:c}=n,l=c.length?r:`${r} (Count: ${a})`;Cn(l,`${So}/${i}`,{hint:`${s} ${o}`,elements:c})}(n.lint(e,t)));await n}},Eo={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var Ro=Object.freeze({__proto__:null,name:So,default:Co,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await Co.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const To="local-refs-exist",Ao={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},Lo=s in Ao?s:"en";const Po=new lo(To,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(Io);if(n.length)return{name:To,offendingElements:n,occurrences:n.length,...Ao[Lo]}}));function Io(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const Do="no-headingless-sections",No={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},Oo=s in No?s:"en",jo=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const zo=new lo(Do,(function(e,t){const n=[...t.querySelectorAll("section")].filter(jo);if(n.length)return{name:Do,offendingElements:n,occurrences:n.length,...No[Oo]}})),Wo="no-http-props",Mo={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},Uo=s in Mo?s:"en";const Fo=new lo(Wo,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:Wo,occurrences:n.length,...Mo[Uo]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),qo="no-unused-vars",Bo={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Ho=s in Bo?s:"en";const Go=new lo(qo,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=nn(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:qo,offendingElements:n,occurrences:n.length,...Bo[Ho]}})),Vo="privsec-section",Zo={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},Yo=s in Zo?s:"en";const Jo=new lo(Vo,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Vo,occurrences:1,...Zo[Yo]}}));Co.register(Fo,zo,Go,$o,Po,wo,ho,Jo);const Ko={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0},Xo="wpt-tests-exist",Qo={en:{description:"Non-existent Web Platform Tests",howToFix:"Please fix the tests mentioned.",help:"See developer console."}},es=s in Qo?s:"en";const ts=new lo(Xo,(async function(e,t){const n=await async function(e,t){let n;try{const t=new URL(e);if(t.pathname.startsWith("/web-platform-tests/wpt/tree/master/")){const e=/web-platform-tests\/wpt\/tree\/master\/(.+)/;n=t.pathname.match(e)[1].replace(/\//g,"")}else n=t.pathname.replace(/\//g,"")}catch(e){return Cn("Failed to parse WPT directory from testSuiteURI","linter/"+Xo),console.error(e),null}const r=new URL("web-platform-tests/wpt/files",t+"/");r.searchParams.set("path",n);const o=await fetch(r);if(!o.ok){return Cn(`Failed to fetch files from WPT repository. Request failed with error: ${await o.text()} (${o.status})`,"linter/"+Xo),null}const{entries:s}=await o.json(),i=s.filter(e=>!e.endsWith("/"));return new Set(i)}(e.testSuiteURI,e.githubAPI);if(!n)return;const r=[],o=new Set,s=[...t.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);for(const e of s){const t=e.dataset.tests.split(/,/gm).map(e=>e.trim().split("#")[0]).filter(e=>e).filter(e=>!n.has(e));t.length&&(r.push(e),t.forEach(e=>o.add(e)))}if(!r.length)return;const i=[...o].map(e=>`\`${e}\``);return{name:Xo,offendingElements:r,occurrences:r.length,...Qo[es],description:`${Qo[es].description}: ${i.join(", ")}.`}}));const ns="w3c/defaults";Co.register(Jo,ts);const rs={src:"https://www.w3.org/StyleSheets/TR/2016/logos/W3C",alt:"W3C",height:48,width:72,url:"https://www.w3.org/"},os={lint:{"privsec-section":!0,"wpt-tests-exist":!1},doJsonLd:!1,logos:[],xref:!0};function ss(e){return e.map(e=>`\`"${e}"\``).join(", ")}var is=Object.freeze({__proto__:null,name:ns,run:function(e){const t=!1!==e.lint&&{...Ko.lint,...os.lint,...e.lint};e.specStatus&&"unofficial"!==e.specStatus.toLowerCase()&&(os.logos.push(rs),e.hasOwnProperty("license")||(os.license="w3c-software-doc")),Object.assign(e,{...Ko,...os,...e,lint:t}),e.groupType&&e.specStatus&&function(e){const{specStatus:t,groupType:n}=e;switch(n){case"cg":if(![...Qr,"unofficial"].includes(t)){const n=`W3C Community Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,r=`Please use one of: ${ss(Kr)}. Automatically falling back to \`"CG-DRAFT"\`.`;_n(n,ns,{hint:r}),e.specStatus="CG-DRAFT"}break;case"bg":if(![...Xr,"unofficial"].includes(t)){const n=`W3C Business Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,r=`Please use one of: ${ss(Xr)}. Automatically falling back to \`"BG-DRAFT"\`.`;_n(n,ns,{hint:r}),e.specStatus="BG-DRAFT"}break;case"wg":if(Qr.includes(t)){const e=`W3C Working Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,n=`Please see ${En("specStatus")} for appropriate values for this type of group.`;_n(e,ns,{hint:n})}}}(e)}});var as=String.raw`@keyframes pop{ +0%{transform:scale(1,1)} +25%{transform:scale(1.25,1.25);opacity:.75} +100%{transform:scale(1,1)} +} +.hljs{background:0 0!important} +a abbr,h1 abbr,h2 abbr,h3 abbr,h4 abbr,h5 abbr,h6 abbr{border:none} +dfn{font-weight:700} +a.internalDFN{color:inherit;border-bottom:1px solid #99c;text-decoration:none} +a.externalDFN{color:inherit;border-bottom:1px dotted #ccc;text-decoration:none} +a.bibref{text-decoration:none} +.respec-offending-element:target{animation:pop .25s ease-in-out 0s 1} +.respec-offending-element,a[href].respec-offending-element{text-decoration:red wavy underline} +@supports not (text-decoration:red wavy underline){ +.respec-offending-element:not(pre){display:inline-block} +.respec-offending-element{background:url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=) bottom repeat-x} +} +#references :target{background:#eaf3ff;animation:pop .4s ease-in-out 0s 1} +cite .bibref{font-style:normal} +code{color:#c63501} +th code{color:inherit} +a[href].orcid{padding-left:4px;padding-right:4px} +a[href].orcid>svg{margin-bottom:-2px} +.toc a,.tof a{text-decoration:none} +a .figno,a .secno{color:#000} +ol.tof,ul.tof{list-style:none outside none} +.caption{margin-top:.5em;font-style:italic} +table.simple{border-spacing:0;border-collapse:collapse;border-bottom:3px solid #005a9c} +.simple th{background:#005a9c;color:#fff;padding:3px 5px;text-align:left} +.simple th a{color:#fff;padding:3px 5px;text-align:left} +.simple th[scope=row]{background:inherit;color:inherit;border-top:1px solid #ddd} +.simple td{padding:3px 10px;border-top:1px solid #ddd} +.simple tr:nth-child(even){background:#f0f6ff} +.section dd>p:first-child{margin-top:0} +.section dd>p:last-child{margin-bottom:0} +.section dd{margin-bottom:1em} +.section dl.attrs dd,.section dl.eldef dd{margin-bottom:0} +#issue-summary>ul{column-count:2} +#issue-summary li{list-style:none;display:inline-block} +details.respec-tests-details{margin-left:1em;display:inline-block;vertical-align:top} +details.respec-tests-details>*{padding-right:2em} +details.respec-tests-details[open]{z-index:999999;position:absolute;border:thin solid #cad3e2;border-radius:.3em;background-color:#fff;padding-bottom:.5em} +details.respec-tests-details[open]>summary{border-bottom:thin solid #cad3e2;padding-left:1em;margin-bottom:1em;line-height:2em} +details.respec-tests-details>ul{width:100%;margin-top:-.3em} +details.respec-tests-details>li{padding-left:1em} +a[href].self-link:hover{opacity:1;text-decoration:none;background-color:transparent} +h2,h3,h4,h5,h6{position:relative} +aside.example .marker>a.self-link{color:inherit} +h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{border:none;color:inherit;font-size:83%;height:2em;left:-1.6em;opacity:.5;position:absolute;text-align:center;text-decoration:none;top:0;transition:opacity .2s;width:2em} +h2>a.self-link::before,h3>a.self-link::before,h4>a.self-link::before,h5>a.self-link::before,h6>a.self-link::before{content:"§";display:block} +@media (max-width:767px){ +dd{margin-left:0} +h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left:auto;top:auto} +} +@media print{ +.removeOnSave{display:none} +}`;const cs=function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=as,document.head.appendChild(e),e}();var ls=Object.freeze({__proto__:null,name:"core/style",run:function(e){e.noReSpecCSS&&cs.remove()}});const us="w3c/style";const ds=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/base.css",as:"style"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/logos/W3C",as:"image"}],t=document.createDocumentFragment();for(const n of e.map(Xt))t.appendChild(n);return t}();ds.appendChild(function(){const e=document.createElement("link");return e.rel="stylesheet",e.href="https://www.w3.org/StyleSheets/TR/2016/base.css",e.classList.add("removeOnSave"),e}()),document.head.querySelector("meta[name=viewport]")||ds.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(ds);var ps=Object.freeze({__proto__:null,name:us,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'base'.";e.specStatus="base",Cn(t,us)}let t="W3C-";switch(e.specStatus.toUpperCase()){case"CG-DRAFT":case"CG-FINAL":case"BG-DRAFT":case"BG-FINAL":t=e.specStatus.toLowerCase();break;case"FPWD":case"LC":case"WD-NOTE":case"LC-NOTE":t+="WD";break;case"WG-NOTE":case"FPWD-NOTE":t+="WG-NOTE.css";break;case"UNOFFICIAL":t+="UD";break;case"FINDING":case"FINDING-DRAFT":case"BASE":t="base.css";break;default:t+=e.specStatus}const n=function(e){let t="";switch(e){case null:case!0:t="2016";break;default:e&&!isNaN(e)&&(t=e.toString().trim())}return t}(e.useExperimentalStyles||"2016");n&&!e.noToc&&Ln("end-all",()=>{!function(e,t){const n=e.createElement("script");location.hash&&n.addEventListener("load",()=>{window.location.href=location.hash},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,n)},{once:!0});const r=`https://www.w3.org/StyleSheets/TR/${n?n+"/":""}${t}`;var o;!function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,r),Ln("beforesave",(o=r,e=>{const t=e.querySelector(`head link[href="${o}"]`);e.querySelector("head").append(t)}))}});const fs={en:{status_at_publication:Ht`This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the @@ -561,50 +671,50 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e Dokument obsolet machen. Eine Liste der aktuellen Publikatinen des W3C und die aktuellste Fassung dieser Spezifikation kann im <a href="https://www.w3.org/TR/">W3C technical reports index</a> unter - https://www.w3.org/TR/ abgerufen werden.`}};Object.keys(ps).forEach(e=>{o[e]||(o[e]={}),Object.assign(o[e],ps[e])});var fs=Object.freeze({__proto__:null,name:"w3c/l10n"});const hs="core/github";let ms,gs;const bs=new Promise((e,t)=>{ms=e,gs=e=>{Sn(e,hs),t(new Error(e))}}),ys=rn({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});var ws=Object.freeze({__proto__:null,name:hs,github:bs,run:async function(e){if(!e.hasOwnProperty("github")||!e.github)return void ms(null);if("object"==typeof e.github&&!e.github.hasOwnProperty("repoURL")){return void gs("Config option `[github](https://github.com/w3c/respec/wiki/github)` is missing property `repoURL`.")}let t,n=e.github.repoURL||e.github;n.endsWith("/")||(n+="/");try{t=new URL(n,"https://github.com")}catch{return void gs(`\`respecConf.github\` is not a valid URL? (${t})`)}if("https://github.com"!==t.origin){return void gs(`\`respecConf.github\` must be HTTPS and pointing to GitHub. (${t})`)}const[r,o]=t.pathname.split("/").filter(e=>e);if(!r||!o){return void gs("`respecConf.github` URL needs a path with, for example, w3c/my-spec")}const s=e.github.branch||"gh-pages",i=new URL("./issues/",t).href,a={edDraftURI:`https://${r.toLowerCase()}.github.io/${o}/`,githubToken:void 0,githubUser:void 0,issueBase:i,atRiskBase:i,otherLinks:[],pullBase:new URL("./pulls/",t).href,shortName:o},c={key:ys.participate,data:[{value:`GitHub ${r}/${o}`,href:t},{value:ys.file_a_bug,href:a.issueBase},{value:ys.commit_history,href:new URL("./commits/"+s,t.href).href},{value:"Pull requests",href:a.pullBase}]};let l="https://respec.org/github";if(e.githubAPI)if(new URL(e.githubAPI).hostname===window.parent.location.hostname)l=e.githubAPI;else{Cn("`respecConfig.githubAPI` should not be added manually.",hs)}const u={branch:s,repoURL:t.href,apiBase:l,fullName:`${r}/${o}`};ms(u);const d={...a,...e,github:u,githubAPI:l};Object.assign(e,d),e.otherLinks.unshift(c)}});const vs="core/data-include";function ks(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=an(e,r.dataset.oninclude,n),s="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=Hn(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&Yn(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:s}),s||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var xs=Object.freeze({__proto__:null,name:vs,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);ks(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),Sn(r,vs,{elements:[e]})}});await Promise.all(t)}});const $s="core/title",_s=rn({en:{default_title:"No Title"},de:{default_title:"Kein Titel"},zh:{default_title:"无标题"}});var Ss=Object.freeze({__proto__:null,name:$s,run:function(e){const t=document.querySelector("h1#title")||Ht`<h1 id="title"></h1>`;if(t.isConnected&&""===t.textContent.trim()){Sn('The document is missing a title, so using a default title. To fix this, please give your document a `<title>`. If you need special markup in the document\'s title, please use a `<h1 id="title">`.',$s,{title:"Document is missing a title",elements:[t]})}t.id||(t.id="title"),t.classList.add("title"),function(e,t){t.isConnected||(t.textContent=document.title||""+_s.default_title);let n=nn(t.textContent);if(e.isPreview&&e.prNumber){const r=e.prUrl||`${e.github.repoURL}pull/${e.prNumber}`,{childNodes:o}=Ht` + https://www.w3.org/TR/ abgerufen werden.`}};Object.keys(fs).forEach(e=>{o[e]||(o[e]={}),Object.assign(o[e],fs[e])});var hs=Object.freeze({__proto__:null,name:"w3c/l10n"});const ms="core/github";let gs,bs;const ws=new Promise((e,t)=>{gs=e,bs=e=>{_n(e,ms),t(new Error(e))}}),ys=rn({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});var vs=Object.freeze({__proto__:null,name:ms,github:ws,run:async function(e){if(!e.hasOwnProperty("github")||!e.github)return void gs(null);if("object"==typeof e.github&&!e.github.hasOwnProperty("repoURL")){return void bs("Config option `[github](https://github.com/w3c/respec/wiki/github)` is missing property `repoURL`.")}let t,n=e.github.repoURL||e.github;n.endsWith("/")||(n+="/");try{t=new URL(n,"https://github.com")}catch{return void bs(`\`respecConf.github\` is not a valid URL? (${t})`)}if("https://github.com"!==t.origin){return void bs(`\`respecConf.github\` must be HTTPS and pointing to GitHub. (${t})`)}const[r,o]=t.pathname.split("/").filter(e=>e);if(!r||!o){return void bs("`respecConf.github` URL needs a path with, for example, w3c/my-spec")}const s=e.github.branch||"gh-pages",i=new URL("./issues/",t).href,a={edDraftURI:`https://${r.toLowerCase()}.github.io/${o}/`,githubToken:void 0,githubUser:void 0,issueBase:i,atRiskBase:i,otherLinks:[],pullBase:new URL("./pulls/",t).href,shortName:o},c={key:ys.participate,data:[{value:`GitHub ${r}/${o}`,href:t},{value:ys.file_a_bug,href:a.issueBase},{value:ys.commit_history,href:new URL("./commits/"+s,t.href).href},{value:"Pull requests",href:a.pullBase}]};let l="https://respec.org/github";if(e.githubAPI)if(new URL(e.githubAPI).hostname===window.parent.location.hostname)l=e.githubAPI;else{Cn("`respecConfig.githubAPI` should not be added manually.",ms)}const u={branch:s,repoURL:t.href,apiBase:l,fullName:`${r}/${o}`};gs(u);const d={...a,...e,github:u,githubAPI:l};Object.assign(e,d),e.otherLinks.unshift(c)}});const ks="core/data-include";function xs(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=an(e,r.dataset.oninclude,n),s="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=Bn(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&Zn(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:s}),s||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var $s=Object.freeze({__proto__:null,name:ks,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);xs(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),_n(r,ks,{elements:[e]})}});await Promise.all(t)}});const Ss="core/title",_s=rn({en:{default_title:"No Title"},de:{default_title:"Kein Titel"},zh:{default_title:"无标题"}});var Cs=Object.freeze({__proto__:null,name:Ss,run:function(e){const t=document.querySelector("h1#title")||Ht`<h1 id="title"></h1>`;if(t.isConnected&&""===t.textContent.trim()){_n('The document is missing a title, so using a default title. To fix this, please give your document a `<title>`. If you need special markup in the document\'s title, please use a `<h1 id="title">`.',Ss,{title:"Document is missing a title",elements:[t]})}t.id||(t.id="title"),t.classList.add("title"),function(e,t){t.isConnected||(t.textContent=document.title||""+_s.default_title);let n=nn(t.textContent);if(e.isPreview&&e.prNumber){const r=e.prUrl||`${e.github.repoURL}pull/${e.prNumber}`,{childNodes:o}=Ht` Preview of PR <a href="${r}">#${e.prNumber}</a>: - `;t.prepend(...o),n=`Preview of PR #${e.prNumber}: ${n}`}document.title=n,e.title=n}(e,t),document.body.prepend(t)}});const Cs="w3c/level",Es=rn({en:{level:"Level"}});var Rs=Object.freeze({__proto__:null,name:Cs,run:function(e){if(!e.hasOwnProperty("level"))return;const t=document.querySelector("h1#title"),n=parseInt(e.level);if(!Number.isInteger(n)||n<0){Sn(`The \`level\` configuration option must be a number greater or equal to 0. It is currently set to \`${n}\``,Cs,{title:"Invalid level config.",elements:[t]})}else t.append(` ${Es.level} ${n}`),document.title=`${document.title} ${Es.level} ${n}`,e.shortName=`${e.shortName}-${n}`,e.level=n}});const Ts="w3c/abstract",As=rn({en:{abstract:"Abstract"},ko:{abstract:"요약"},zh:{abstract:"摘要"},ja:{abstract:"要約"},nl:{abstract:"Samenvatting"},es:{abstract:"Resumen"},de:{abstract:"Zusammenfassung"}});var Ps=Object.freeze({__proto__:null,name:Ts,run:async function(){const e=document.getElementById("abstract");if(!e){return void Sn('Document must have one element with `id="abstract"`.',Ts)}e.classList.add("introductory");let t=document.querySelector("#abstract>h2");t||(t=document.createElement("h2"),t.textContent=As.abstract,e.prepend(t))}});var Ls=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=an(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const Is="core/dfn-abbr";function Ds(e){const t=(n=e).dataset.abbr?n.dataset.abbr:n.textContent.match(/\b([a-z])/gi).join("").toUpperCase();var n;const r=e.textContent.replace(/\s\s+/g," ").trim();e.insertAdjacentHTML("afterend",` (<abbr title="${r}">${t}</abbr>)`);const o=e.dataset.lt||"";e.dataset.lt=o.split("|").filter(e=>e.trim()).concat(t).join("|")}var Ns=Object.freeze({__proto__:null,name:Is,run:function(){const e=document.querySelectorAll("[data-abbr]");for(const t of e){const{localName:e}=t;switch(e){case"dfn":Ds(t);break;default:Sn(`\`data-abbr\` attribute not supported on \`${e}\` elements.`,Is,{elements:[t],title:"Error: unsupported."})}}}});const js=/^[a-z]+(\s+[a-z]+)+$/,Os=/\B"([^"]*)"\B/,zs=/(\w+)\((.*)\)$/,Ws=/^\[\[(\w+)\]\]$/,Ms=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,Us=/^(\w+)\["([\w- ]*)"\]$/,Fs=/\.?(\w+\(.*\)$)/;function qs(e){const{identifier:t,renderParent:n}=e;if(n)return Ht`<a data-xref-type="_IDL_" data-link-type="idl" + `;t.prepend(...o),n=`Preview of PR #${e.prNumber}: ${n}`}document.title=n,e.title=n}(e,t),document.body.prepend(t)}});const Es="w3c/level",Rs=rn({en:{level:"Level"}});var Ts=Object.freeze({__proto__:null,name:Es,run:function(e){if(!e.hasOwnProperty("level"))return;const t=document.querySelector("h1#title"),n=parseInt(e.level);if(!Number.isInteger(n)||n<0){_n(`The \`level\` configuration option must be a number greater or equal to 0. It is currently set to \`${n}\``,Es,{title:"Invalid level config.",elements:[t]})}else t.append(` ${Rs.level} ${n}`),document.title=`${document.title} ${Rs.level} ${n}`,e.shortName=`${e.shortName}-${n}`,e.level=n}});const As="w3c/abstract",Ls=rn({en:{abstract:"Abstract"},ko:{abstract:"요약"},zh:{abstract:"摘要"},ja:{abstract:"要約"},nl:{abstract:"Samenvatting"},es:{abstract:"Resumen"},de:{abstract:"Zusammenfassung"}});var Ps=Object.freeze({__proto__:null,name:As,run:async function(){const e=document.getElementById("abstract");if(!e){return void _n('Document must have one element with `id="abstract"`.',As)}e.classList.add("introductory");let t=document.querySelector("#abstract>h2");t||(t=document.createElement("h2"),t.textContent=Ls.abstract,e.prepend(t))}});var Is=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=an(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const Ds="core/dfn-abbr";function Ns(e){const t=(n=e).dataset.abbr?n.dataset.abbr:n.textContent.match(/\b([a-z])/gi).join("").toUpperCase();var n;const r=e.textContent.replace(/\s\s+/g," ").trim();e.insertAdjacentHTML("afterend",` (<abbr title="${r}">${t}</abbr>)`);const o=e.dataset.lt||"";e.dataset.lt=o.split("|").filter(e=>e.trim()).concat(t).join("|")}var Os=Object.freeze({__proto__:null,name:Ds,run:function(){const e=document.querySelectorAll("[data-abbr]");for(const t of e){const{localName:e}=t;switch(e){case"dfn":Ns(t);break;default:_n(`\`data-abbr\` attribute not supported on \`${e}\` elements.`,Ds,{elements:[t],title:"Error: unsupported."})}}}});const js=/^[a-z]+(\s+[a-z]+)+$/,zs=/\B"([^"]*)"\B/,Ws=/(\w+)\((.*)\)$/,Ms=/^\[\[(\w+)\]\]$/,Us=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,Fs=/^(\w+)\["([\w- ]*)"\]$/,qs=/\.?(\w+\(.*\)$)/;function Bs(e){const{identifier:t,renderParent:n}=e;if(n)return Ht`<a data-xref-type="_IDL_" data-link-type="idl" ><code>${t}</code></a - >`}function Bs(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Ht`${n&&r?".":""}<a + >`}function Hs(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Ht`${n&&r?".":""}<a data-xref-type="attribute" data-link-for=${o} data-xref-for=${o} data-lt="${`[[${t}]]`}" ><code>[[${t}]]</code></a - >`}function Hs(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Ht`${r?".":""}<a + >`}function Gs(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Ht`${r?".":""}<a data-link-type="idl" data-xref-type="attribute|dict-member" data-link-for="${o}" data-xref-for="${o}" ><code>${n}</code></a - >`}function Gs(e){const{args:t,identifier:n,type:r,parent:o,renderParent:s}=e,{identifier:i}=o||{},a=ln(t,e=>Ht`<var>${e}</var>`),c=`${n}(${t.join(", ")})`;return Ht`${o&&s?".":""}<a + >`}function Vs(e){const{args:t,identifier:n,type:r,parent:o,renderParent:s}=e,{identifier:i}=o||{},a=ln(t,e=>Ht`<var>${e}</var>`),c=`${n}(${t.join(", ")})`;return Ht`${o&&s?".":""}<a data-link-type="idl" data-xref-type="${r}" data-link-for="${i}" data-xref-for="${i}" data-lt="${c}" ><code>${n}</code></a - ><code>(${a})</code>`}function Vs(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Ht`"<a + ><code>(${a})</code>`}function Zs(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Ht`"<a data-link-type="idl" data-xref-type="enum-value" data-link-for="${o}" data-xref-for="${o}" data-lt="${n?null:"the-empty-string"}" ><code>${n}</code></a - >"`}function Zs(e){const{identifier:t}=e;return Ht`"<a + >"`}function Ys(e){const{identifier:t}=e;return Ht`"<a data-link-type="idl" data-cite="WebIDL" data-xref-type="exception" ><code>${t}</code></a - >"`}function Ys(e){const{identifier:t}=e;return Ht`<a + >"`}function Js(e){const{identifier:t}=e;return Ht`<a data-link-type="idl" data-cite="WebIDL" data-xref-type="interface" ><code>${t}</code></a - >`}function Js(e){let t;try{t=function(e){const[t,n]=e.split(Fs),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),s=[];for(;r.length;){const t=r.pop();if(zs.test(t)){const[,e,n]=t.match(zs),r=n.split(/,\s*/).filter(e=>e);s.push({type:"method",identifier:e,args:r,renderParent:o})}else if(Us.test(t)){const[,e,n]=t.match(Us);s.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(Os.test(t)){const[,e]=t.match(Os);o?s.push({type:"exception",identifier:e}):s.push({type:"enum",enumValue:e,renderParent:o})}else if(Ws.test(t)){const[,e]=t.match(Ws);s.push({type:"internal-slot",identifier:e,renderParent:o})}else if(Ms.test(t)&&r.length){const[,e]=t.match(Ms);s.push({type:"attribute",identifier:e,renderParent:o})}else if(js.test(t))s.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!Ms.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);s.push({type:"base",identifier:t,renderParent:o})}}return s.forEach((e,t,n)=>{e.parent=n[t+1]||null}),s.reverse()}(e)}catch(t){const n=Ht`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return Sn(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Ht(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=qs(e);t&&r.push(t);break}case"attribute":r.push(Hs(e));break;case"internal-slot":r.push(Bs(e));break;case"method":r.push(Gs(e));break;case"enum":r.push(Vs(e));break;case"exception":r.push(Zs(e));break;case"idl-primitive":r.push(Ys(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const Ks=new Set(["alias","reference"]),Xs=async function(){return await qt.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const Qs={get ready(){return Xs},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!Ks.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!Ks.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...Ks].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!Ks.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...Ks],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},ei={},ti=new URL("https://specref.herokuapp.com/bibrefs?refs="),ni=Xt({hint:"dns-prefetch",href:ti.origin});let ri;document.head.appendChild(ni);const oi=new Promise(e=>{ri=e});async function si(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(ti.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await Qs.addAll(o)}catch(e){console.error(e)}return o}async function ii(e){const t=await oi;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await ii(n.aliasOf):n}var ai=Object.freeze({__proto__:null,biblio:ei,name:"core/biblio",updateFromNetwork:si,resolveRef:ii,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=ei;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await Qs.ready;const n=e.map(async e=>({id:e,data:await Qs.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{ei[e.id]=e.data});const s=o.noData.map(e=>e.id);if(s.length){const e=await si(s,{forceUpdate:!0});Object.assign(ei,e)}Object.assign(ei,this.conf.localBiblio),(()=>{ri(this.conf.biblio)})()}},wireReference:yi,stringifyReference:wi});const ci="core/render-biblio",li=rn({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),ui=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),di=Object.freeze({authors:[],date:"",href:"",publisher:"",status:"",title:"",etAl:!1}),pi=(fi=".",e=>{const t=e.trim();return!t||t.endsWith(fi)?t:t+fi});var fi;function hi(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(mi)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),s=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),i=Ht`<section> + >`}function Ks(e){let t;try{t=function(e){const[t,n]=e.split(qs),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),s=[];for(;r.length;){const t=r.pop();if(Ws.test(t)){const[,e,n]=t.match(Ws),r=n.split(/,\s*/).filter(e=>e);s.push({type:"method",identifier:e,args:r,renderParent:o})}else if(Fs.test(t)){const[,e,n]=t.match(Fs);s.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(zs.test(t)){const[,e]=t.match(zs);o?s.push({type:"exception",identifier:e}):s.push({type:"enum",enumValue:e,renderParent:o})}else if(Ms.test(t)){const[,e]=t.match(Ms);s.push({type:"internal-slot",identifier:e,renderParent:o})}else if(Us.test(t)&&r.length){const[,e]=t.match(Us);s.push({type:"attribute",identifier:e,renderParent:o})}else if(js.test(t))s.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!Us.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);s.push({type:"base",identifier:t,renderParent:o})}}return s.forEach((e,t,n)=>{e.parent=n[t+1]||null}),s.reverse()}(e)}catch(t){const n=Ht`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return _n(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Ht(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=Bs(e);t&&r.push(t);break}case"attribute":r.push(Gs(e));break;case"internal-slot":r.push(Hs(e));break;case"method":r.push(Vs(e));break;case"enum":r.push(Zs(e));break;case"exception":r.push(Ys(e));break;case"idl-primitive":r.push(Js(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const Xs=new Set(["alias","reference"]),Qs=async function(){return await qt.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const ei={get ready(){return Qs},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!Xs.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!Xs.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...Xs].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!Xs.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...Xs],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},ti={},ni=new URL("https://api.specref.org/bibrefs?refs="),ri=Xt({hint:"dns-prefetch",href:ni.origin});let oi;document.head.appendChild(ri);const si=new Promise(e=>{oi=e});async function ii(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(ni.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await ei.addAll(o)}catch(e){console.error(e)}return o}async function ai(e){const t=await si;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await ai(n.aliasOf):n}var ci=Object.freeze({__proto__:null,biblio:ti,name:"core/biblio",updateFromNetwork:ii,resolveRef:ai,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=ti;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await ei.ready;const n=e.map(async e=>({id:e,data:await ei.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{ti[e.id]=e.data});const s=o.noData.map(e=>e.id);if(s.length){const e=await ii(s,{forceUpdate:!0});Object.assign(ti,e)}Object.assign(ti,this.conf.localBiblio),(()=>{oi(this.conf.biblio)})()}}});const li="core/render-biblio",ui=rn({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),di=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),pi=(fi=".",e=>{const t=e.trim();return!t||t.endsWith(fi)?t:t+fi});var fi;function hi(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(mi)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),s=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),i=Ht`<section> <h3>${t}</h3> <dl class="bibliography">${s.map(bi)}</dl> - </section>`;pn(i,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());Sn(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,ci),console.warn("Bad references: ",t)})}(r),i}function mi(e){let t=ei[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;Sn(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,ci)}else n=t.aliasOf,t=ei[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function gi(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Ht`<cite + </section>`;pn(i,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());_n(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,li),console.warn("Bad references: ",t)})}(r),i}function mi(e){let t=ti[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;_n(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,li)}else n=t.aliasOf,t=ti[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function gi(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Ht`<cite ><a class="bibref" href="${r}" data-link-type="biblio">${t||n}</a></cite >`;return t?o:Ht`[${o}]`}function bi({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Ht` <dt id="${n}">[${e}]</dt> @@ -612,37 +722,17 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e `:Ht` <dt id="${n}">[${e}]</dt> <dd><em class="respec-offending-element">Reference not found.</em></dd> - `}function yi(e,t="_blank"){if("object"!=typeof e)throw new TypeError("Only modern object references are allowed");const n=Object.assign({},di,e),r=n.authors.join("; ")+(n.etAl?" et al":""),o=ui.get(n.status)||n.status;return Ht.wire(n)` - <cite> - <a - href="${n.href}" - target="${t}" - rel="noopener noreferrer"> - ${n.title.trim()}</a>. - </cite> - <span class="authors"> - ${pi(r)} - </span> - <span class="publisher"> - ${pi(n.publisher)} - </span> - <span class="pubDate"> - ${pi(n.date)} - </span> - <span class="pubStatus"> - ${pi(o)} - </span> - `}function wi(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${pi(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(ui.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var vi=Object.freeze({__proto__:null,name:ci,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Ht`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Ht`<h2>${li.references}</h2>`),r.classList.add("appendix"),n.length){const e=hi(n,li.norm_references);r.appendChild(e)}if(t.length){const e=hi(t,li.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:gi,wireReference:yi,stringifyReference:wi});const ki="core/inlines",xi={},$i=rn({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),_i=/(?:`[^`]+`)(?!`)/,Si=/(?:{{[^}]+}})/,Ci=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,Ei=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,Ri=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,Ti=/(?:\[=[^=]+=\])/,Ai=/(?:\[\^[^^]+\^\])/;function Pi(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[s,i,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Ht`<code + `}function wi(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${pi(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(di.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var yi=Object.freeze({__proto__:null,name:li,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Ht`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Ht`<h2>${ui.references}</h2>`),r.classList.add("appendix"),n.length){const e=hi(n,ui.norm_references);r.appendChild(e)}if(t.length){const e=hi(t,ui.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:gi});const vi="core/inlines",ki={},xi=rn({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),$i=/(?:`[^`]+`)(?!`)/,Si=/(?:{{[^}]+}})/,_i=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,Ci=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,Ei=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,Ri=/(?:\[=[^=]+=\])/,Ti=/(?:\[\^[^^]+\^\])/;function Ai(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[s,i,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Ht`<code ><a data-xref-type="${s}" data-xref-for="${i}" >${a}</a ></code - >`}function Li(e){const t=nn(e),n=Ht`<em class="rfc2119">${t}</em>`;return xi[t]=!0,n}function Ii(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Ht`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Ht`<a href="${t}"></a>`;const n=Ht`<span>${e}</span>`;return Sn(`Wasn't able to expand ${e} as it didn't match any id in the document.`,ki,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function Di(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):Js(nn(t))}function Ni(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,s]=r.split("|").map(nn),{type:i,illegal:a}=mn(o,t.parentNode),c=gi(o,s),l=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(l)){const e=c.childNodes[1]||c;Cn("Normative references in informative sections are not allowed. ",ki,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==i||a?n.normativeReferences.add(l):n.informativeReferences.add(l),c.childNodes[1]?c.childNodes:[c]}function ji(e,t,n){return"ABBR"===t.parentElement.tagName?e:Ht`<abbr title="${n.get(e)}">${e}</abbr>`}function Oi(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Ht`<var data-type="${r}">${n}</var>`}function zi(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,s]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],i=Mi(s),a=n?nn(n):null;return Ht`<a + >`}function Li(e){const t=nn(e),n=Ht`<em class="rfc2119">${t}</em>`;return ki[t]=!0,n}function Pi(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Ht`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Ht`<a href="${t}"></a>`;const n=Ht`<span>${e}</span>`;return _n(`Wasn't able to expand ${e} as it didn't match any id in the document.`,vi,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function Ii(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):Ks(nn(t))}function Di(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,s]=r.split("|").map(nn),{type:i,illegal:a}=mn(o,t.parentNode),c=gi(o,s),l=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(l)){const e=c.childNodes[1]||c;Cn("Normative references in informative sections are not allowed. ",vi,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==i||a?n.normativeReferences.add(l):n.informativeReferences.add(l),c.childNodes[1]?c.childNodes:[c]}function Ni(e,t,n){return"ABBR"===t.parentElement.tagName?e:Ht`<abbr title="${n.get(e)}">${e}</abbr>`}function Oi(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Ht`<var data-type="${r}">${n}</var>`}function ji(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,s]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],i=Wi(s),a=n?nn(n):null;return Ht`<a data-link-type="dfn" data-link-for="${a}" data-xref-for="${a}" data-lt="${o}" >${i}</a - >`}function Wi(e){const t=e.slice(1,-1);return Ht`<code>${t}</code>`}function Mi(e){return _i.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?Wi(e):Mi(e)):document.createTextNode(e)}var Ui=Object.freeze({__proto__:null,name:ki,rfc2119Usage:xi,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new wn,e.informativeReferences=new wn,e.respecRFC2119||(e.respecRFC2119=xi);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,s=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),s=[];let i;for(;i=o.nextNode();)s.push(i);return s}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),i=$i.rfc2119Keywords(),a=new RegExp(`(${[i.source,Si.source,Ci.source,Ei.source,Ri.source,Ti.source,_i.source,Ai.source,...o?[o]:[]].join("|")})`);for(const n of s){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let s=!0;for(const a of r)if(s=!s,s)if(a.startsWith("{{")){const e=Di(a);o.append(e)}else if(a.startsWith("[[[")){const e=Ii(a);o.append(e)}else if(a.startsWith("[[")){const t=Ni(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=Oi(a);o.append(e)}else if(a.startsWith("[=")){const e=zi(a);o.append(e)}else if(a.startsWith("`")){const e=Wi(a);o.append(e)}else if(a.startsWith("[^")){const e=Pi(a);o.append(e)}else if(t.has(a)){const e=ji(a,n,t);o.append(e)}else{if(!i.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=Li(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const Fi="w3c/conformance",qi=rn({en:{conformance:"Conformance",normativity:"As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.",keywordInterpretation:(e,t)=>Ht`<p> + >`}function zi(e){const t=e.slice(1,-1);return Ht`<code>${t}</code>`}function Wi(e){return $i.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?zi(e):Wi(e)):document.createTextNode(e)}var Mi=Object.freeze({__proto__:null,name:vi,rfc2119Usage:ki,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new yn,e.informativeReferences=new yn,e.respecRFC2119||(e.respecRFC2119=ki);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,s=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),s=[];let i;for(;i=o.nextNode();)s.push(i);return s}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),i=xi.rfc2119Keywords(),a=new RegExp(`(${[i.source,Si.source,_i.source,Ci.source,Ei.source,Ri.source,$i.source,Ti.source,...o?[o]:[]].join("|")})`);for(const n of s){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let s=!0;for(const a of r)if(s=!s,s)if(a.startsWith("{{")){const e=Ii(a);o.append(e)}else if(a.startsWith("[[[")){const e=Pi(a);o.append(e)}else if(a.startsWith("[[")){const t=Di(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=Oi(a);o.append(e)}else if(a.startsWith("[=")){const e=ji(a);o.append(e)}else if(a.startsWith("`")){const e=zi(a);o.append(e)}else if(a.startsWith("[^")){const e=Ai(a);o.append(e)}else if(t.has(a)){const e=Ni(a,n,t);o.append(e)}else{if(!i.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=Li(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const Ui="w3c/conformance",Fi=rn({en:{conformance:"Conformance",normativity:"As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.",keywordInterpretation:(e,t)=>Ht`<p> The key word${t?"s":""} ${e} in this document ${t?"are":"is"} to be interpreted as described in <a href="https://datatracker.ietf.org/doc/html/bcp14">BCP 14</a> @@ -659,33 +749,74 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e > zu interpretieren, wenn und nur wenn ${t?"sie":"es"} wie hier gezeigt durchgehend groß geschrieben wurde${t?"n":""}. - </p>`}});var Bi=Object.freeze({__proto__:null,name:Fi,run:function(e){const t=document.querySelector("section#conformance");if(t&&!t.classList.contains("override")&&function(e,t){const n=[...Object.keys(xi)];n.length&&(t.normativeReferences.add("RFC2119"),t.normativeReferences.add("RFC8174"));const r=un(n.sort(),e=>Ht`<em class="rfc2119">${e}</em>`),o=n.length>1,s=Ht` - <h2>${qi.conformance}</h2> - <p>${qi.normativity}</p> - ${n.length?qi.keywordInterpretation(r,o):null} - `;e.prepend(...s.childNodes)}(t,e),!t&&Object.keys(xi).length){Cn("Document uses RFC2119 keywords but lacks a conformance section.",Fi,{hint:'Please add a `<section id="conformance">`.'})}}});const Hi=new $n;function Gi(e,t){for(const n of t)Hi.has(n)||Hi.set(n,new Set),Hi.get(n).add(e)}var Vi=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=fn(e);Gi(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===nn(e.textContent)||(e.dataset.lt=t.join("|"))})}});var Zi=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=nn(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=nn(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=nn(n).toLowerCase(),o=Vt.isSingular(r)?Vt.plural(r):Vt.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),Gi(e,n)}})}});const Yi=rn({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}}),Ji=async function(){try{return(await Promise.resolve().then((function(){return Cu}))).default}catch{return Wn("examples.css")}}();function Ki(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Ht`<span class="example-title">: ${n.title}</span>`:"";return Ht`<div class="marker"> + </p>`}});var qi=Object.freeze({__proto__:null,name:Ui,run:function(e){const t=document.querySelector("section#conformance");if(t&&!t.classList.contains("override")&&function(e,t){const n=[...Object.keys(ki)];n.length&&(t.normativeReferences.add("RFC2119"),t.normativeReferences.add("RFC8174"));const r=un(n.sort(),e=>Ht`<em class="rfc2119">${e}</em>`),o=n.length>1,s=Ht` + <h2>${Fi.conformance}</h2> + <p>${Fi.normativity}</p> + ${n.length?Fi.keywordInterpretation(r,o):null} + `;e.prepend(...s.childNodes)}(t,e),!t&&Object.keys(ki).length){Cn("Document uses RFC2119 keywords but lacks a conformance section.",Ui,{hint:'Please add a `<section id="conformance">`.'})}}});const Bi=new $n;function Hi(e,t){for(const n of t)Bi.has(n)||Bi.set(n,new Set),Bi.get(n).add(e)}var Gi=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=fn(e);Hi(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===nn(e.textContent)||(e.dataset.lt=t.join("|"))})}});var Vi=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=nn(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=nn(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=nn(n).toLowerCase(),o=Vt.isSingular(r)?Vt.plural(r):Vt.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),Hi(e,n)}})}});var Zi=String.raw`span.example-title{text-transform:none} +aside.example,div.example,div.illegal-example{padding:.5em;margin:1em 0;position:relative;clear:both} +div.illegal-example{color:red} +div.illegal-example p{color:#000} +aside.example,div.example{padding:.5em;border-left-width:.5em;border-left-style:solid;border-color:#e0cb52;background:#fcfaee} +aside.example div.example{border-left-width:.1em;border-color:#999;background:#fff} +aside.example div.example span.example-title{color:#999} +.example pre{background-color:rgba(0,0,0,.03)}`;const Yi=rn({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}});function Ji(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Ht`<span class="example-title">: ${n.title}</span>`:"";return Ht`<div class="marker"> <a class="self-link">${Yi.example}<bdi>${r}</bdi></a >${o} - </div>`}var Xi=Object.freeze({__proto__:null,name:"core/examples",run:async function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;const t=await Ji;document.head.insertBefore(Ht`<style> - ${t} - </style>`,document.querySelector("link"));let n=0;e.forEach(e=>{const t=e.classList.contains("illegal-example"),r={number:n,illegal:t},{title:o}=e;if("aside"===e.localName){++n;const t=Ki(e,n,r);e.prepend(t),o?pn(e,"example-"+n,o):pn(e,"example",String(n));const{id:s}=e;t.querySelector("a.self-link").href="#"+s,An("example",r)}else{const t=!!e.closest("aside");t||++n,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const s=e.id?e.id:null;s&&e.removeAttribute("id");const i=Ki(e,t?0:n,r),a=Ht`<div class="example" id="${s}"> + </div>`}var Ki=Object.freeze({__proto__:null,name:"core/examples",run:function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;document.head.insertBefore(Ht`<style> + ${Zi} + </style>`,document.querySelector("link"));let t=0;e.forEach(e=>{const n=e.classList.contains("illegal-example"),r={number:t,illegal:n},{title:o}=e;if("aside"===e.localName){++t;const n=Ji(e,t,r);e.prepend(n),o?pn(e,"example-"+t,o):pn(e,"example",String(t));const{id:s}=e;n.querySelector("a.self-link").href="#"+s,An("example",r)}else{const n=!!e.closest("aside");n||++t,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const s=e.id?e.id:null;s&&e.removeAttribute("id");const i=Ji(e,n?0:t,r),a=Ht`<div class="example" id="${s}"> ${i} ${e.cloneNode(!0)} - </div>`;o&&pn(a,"example-"+n,o),pn(a,"example",String(n));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),t||An("example",r)}})}});const Qi="core/issues-notes",ea=async function(){try{return(await Promise.resolve().then((function(){return Eu}))).default}catch{return Wn("issues-notes.css")}}();const ta=rn({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function na(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:s,displayType:i,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),s=t?"issue":n?"warning":r?"ednote":"note",i=t?o?ta.feature_at_risk:ta.issue:n?ta.warning:r?ta.editors_note:ta.note;return{type:s,displayType:i,isFeatureAtRisk:o}}(e),c="issue"===s,l="span"===e.localName,{number:u}=e.dataset,d={type:s,inline:l,title:e.title,number:r(e)};if(!l){const r=Ht`<div class="${a?s+" atrisk":s}" role="${"note"===s?"note":null}"></div>`,l=document.createElement("span"),p=Ht`<div role="heading" class="${s+"-title marker"}">${l}</div>`;pn(p,"h",s);let f,h=i;if(e.id?(r.id=e.id,e.removeAttribute("id")):pn(r,"issue-container",d.number?"number-"+d.number:""),c){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Ht`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Ht`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(l.before(e),e.append(l)),l.classList.add("issue-number"),f=t.get(u),!f){Cn(`Failed to fetch issue number ${u}.`,Qi)}f&&!d.title&&(d.title=f.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Ht`<span style="text-transform: none">: ${t.title}</span>`:"";return Ht`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(ta.issue,d,r.id))}if(l.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=f?f.labels:[];f&&"CLOSED"===f.state&&r.classList.add("closed"),p.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const s=(i=n,parseInt(i,16)>8388607.5?"#000":"#fff");var i;return Ht`<a + </div>`;o&&pn(a,"example-"+t,o),pn(a,"example",String(t));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),n||An("example",r)}})}});var Xi=String.raw`.issue-label{text-transform:initial} +.warning>p:first-child{margin-top:0} +.warning{padding:.5em;border-left-width:.5em;border-left-style:solid} +span.warning{padding:.1em .5em .15em} +.issue.closed span.issue-number{text-decoration:line-through} +.warning{border-color:#f11;border-width:.2em;border-style:solid;background:#fbe9e9} +.warning-title:before{content:"⚠";font-size:1.3em;float:left;padding-right:.3em;margin-top:-.3em} +li.task-list-item{list-style:none} +input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} +.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}`;const Qi="core/issues-notes",ea=rn({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function ta(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:s,displayType:i,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),s=t?"issue":n?"warning":r?"ednote":"note",i=t?o?ea.feature_at_risk:ea.issue:n?ea.warning:r?ea.editors_note:ea.note;return{type:s,displayType:i,isFeatureAtRisk:o}}(e),c="issue"===s,l="span"===e.localName,{number:u}=e.dataset,d={type:s,inline:l,title:e.title,number:r(e)};if(!l){const r=Ht`<div class="${a?s+" atrisk":s}" role="${"note"===s?"note":null}"></div>`,l=document.createElement("span"),p=Ht`<div role="heading" class="${s+"-title marker"}">${l}</div>`;pn(p,"h",s);let f,h=i;if(e.id?(r.id=e.id,e.removeAttribute("id")):pn(r,"issue-container",d.number?"number-"+d.number:""),c){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Ht`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Ht`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(l.before(e),e.append(l)),l.classList.add("issue-number"),f=t.get(u),!f){Cn(`Failed to fetch issue number ${u}.`,Qi)}f&&!d.title&&(d.title=f.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Ht`<span style="text-transform: none">: ${t.title}</span>`:"";return Ht`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(ea.issue,d,r.id))}if(l.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=f?f.labels:[];f&&"CLOSED"===f.state&&r.classList.add("closed"),p.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const s=(i=n,parseInt(i,16)>8388607.5?"#000":"#fff");var i;return Ht`<a class="respec-gh-label" style="${`background-color: #${n}; color: ${s}`}" href="${o.href}" >${r}</a >`}(e,n)),o=e.map(e=>e.name),s=en(o);r.length&&r.unshift(document.createTextNode(" "));if(o.length){return Ht`<span class="issue-label" aria-label="${`This issue is labelled as ${s}.`}" >: ${t}${r}</span - >`}return Ht`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(s),m.removeAttribute("data-number"),f&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(f.bodyHTML)),r.append(p,m);const g=bn(p,"section").length+2;p.setAttribute("aria-level",g)}An(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Ht`<p>${ta.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${ta.issue_summary}</h2>`)}(o)}var ra=Object.freeze({__proto__:null,name:Qi,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return Sn(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,Qi),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),r=await ea,{head:o}=document;o.insertBefore(Ht`<style> - ${r} - </style>`,o.querySelector("link")),na(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const oa="core/best-practices",sa={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},ia=rn(sa),aa=s in sa?s:"en";var ca=Object.freeze({__proto__:null,name:oa,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=pn(e,"bp"),o=Ht`<a class="marker self-link" href="${"#"+r}" - ><bdi lang="${aa}">${ia.best_practice}${t+1}</bdi></a - >`;if(n){const t=Ht`<li>${o}: ${vn(e)}</li>`;n.appendChild(t)}const s=e.closest("div");if(!s)return void e.classList.add("advisement");s.classList.add("advisement");const i=Ht`${o.cloneNode(!0)}: ${e}`;s.prepend(...i.childNodes)}),e.length)t&&(t.appendChild(Ht`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){Cn("Using best practices summary (#bp-summary) but no best practices found.",oa),t.remove()}}});const la="core/figures",ua=rn({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var da=Object.freeze({__proto__:null,name:la,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;pn(e,"fig",r),gn(t,Ht`<span class="fig-title"></span>`),t.prepend(ua.fig,Ht`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{hn(e,"span").removeAttribute("href")}),Ht`<li class="tofline"> + >`}return Ht`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(s),m.removeAttribute("data-number"),f&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(f.bodyHTML)),r.append(p,m);const g=bn(p,"section").length+2;p.setAttribute("aria-level",g)}An(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Ht`<p>${ea.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${ea.issue_summary}</h2>`)}(o)}var na=Object.freeze({__proto__:null,name:Qi,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return _n(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,Qi),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),{head:r}=document;r.insertBefore(Ht`<style> + ${Xi} + </style>`,r.querySelector("link")),ta(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const ra="core/best-practices",oa={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},sa=rn(oa),ia=s in oa?s:"en";var aa=Object.freeze({__proto__:null,name:ra,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=pn(e,"bp"),o=Ht`<a class="marker self-link" href="${"#"+r}" + ><bdi lang="${ia}">${sa.best_practice}${t+1}</bdi></a + >`;if(n){const t=Ht`<li>${o}: ${vn(e)}</li>`;n.appendChild(t)}const s=e.closest("div");if(!s)return void e.classList.add("advisement");s.classList.add("advisement");const i=Ht`${o.cloneNode(!0)}: ${e}`;s.prepend(...i.childNodes)}),e.length)t&&(t.appendChild(Ht`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){Cn("Using best practices summary (#bp-summary) but no best practices found.",ra),t.remove()}}});const ca="core/figures",la=rn({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var ua=Object.freeze({__proto__:null,name:ca,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;pn(e,"fig",r),gn(t,Ht`<span class="fig-title"></span>`),t.prepend(la.fig,Ht`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{hn(e,"span").removeAttribute("href")}),Ht`<li class="tofline"> <a class="tocxref" href="${"#"+e}">${n.childNodes}</a> - </li>`}(t.id,r));else{Cn("Found a `<figure>` without a `<figcaption>`.",la,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Ht`<h2>${ua.list_of_figures}</h2>`,Ht`<ul class="tof"> + </li>`}(t.id,r));else{Cn("Found a `<figure>` without a `<figcaption>`.",ca,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Ht`<h2>${la.list_of_figures}</h2>`,Ht`<ul class="tof"> ${e} - </ul>`))}});const pa=new Set(["callback interface","callback","dictionary","enum","interface mixin","interface","typedef"]);function fa(e,t,{parent:n=""}={}){switch(e.type){case"constructor":case"operation":return function(e,t,n){if(n.includes("!overload"))return ha(e,t,n);return ha(e,t,n+"()",n)}(e,n,t);default:return ha(e,n,t)}}function ha(e,t,...n){const{type:r}=e;for(const e of n){let n="enum-value"===r&&""===e?"the-empty-string":e,o=ga(n,t,e,r);if(0===o.length&&""!==t){n=`${t}.${n}`;const e=Hi.get(n);e&&1===e.size&&(o=[...e],Gi(o[0],[n]))}else n=e;if(o.length>1){Sn(`WebIDL identifier \`${e}\` ${t?`for \`${t}\``:""} is defined multiple times`,e,{title:"Duplicate definition.",elements:o})}if(o.length)return o[0]}}function ma(e,t,n,r){if(!e.id){const t=n.toLowerCase(),o=t?t+"-":"";let s=r.toLowerCase().replace(/[()]/g,"").replace(/\s/g,"-");""===s&&(s="the-empty-string"),e.id=`dom-${o}${s}`}switch(e.dataset.idl=t.type,e.dataset.title=e.textContent,e.dataset.dfnFor=n,t.type){case"operation":case"attribute":case"field":e.dataset.type=ba(t)}switch(e.querySelector("code")||e.closest("code")||!e.children||gn(e,e.ownerDocument.createElement("code")),t.type){case"attribute":case"constructor":case"operation":!function(e,t){const{local:n,exportable:r}=t,o=e.dataset.lt?new Set(e.dataset.lt.split("|")):new Set;for(const e of r)o.add(e);n.filter(e=>o.has(e)).forEach(e=>o.delete(e)),e.dataset.lt=[...o].join("|"),e.dataset.localLt=n.join("|"),Gi(e,[...n,...r])}(e,function(e,t,n){const{type:r}=e,o=`${t}.${n}`;switch(r){case"constructor":case"operation":return{local:[o,o+"()",n],exportable:[n+"()",...function(e,t){const n=[];if(0===t.length)return n;const r=[],o=[];for(const{name:e,optional:n,variadic:s}of t)n||s?o.push(e):r.push(e);const s=r.join(", "),i=`${e}(${s})`;n.push(i);const a=o.map((t,n)=>{const s=[...r,...o.slice(0,n+1)].join(", ");return`${e}(${s})`});return n.push(...a),n}(n,e.arguments)]};case"attribute":return{local:[o],exportable:[n]}}}(t,n,r))}return e}function ga(e,t,n,r){const o=Hi.get(e);if(!o||0===o.size)return[];const s=[...o],i=s.filter(e=>{if("dfn"===e.dataset.dfnType)return!1;const n=e.closest("[data-dfn-for]");return n&&n.dataset.dfnFor===t});if(0===i.length&&""===t&&1===s.length)return s[0].textContent===n?s:[];if(pa.has(r)&&s.length){const e=s.find(e=>e.textContent.trim()===n);if(e)return[e]}return i}function ba(e={}){const{idlType:t,generic:n,union:r}=e;return void 0===t?"":"string"==typeof t?t:n||(r?t.map(ba).join("|"):ba(t))}const ya=function(){const e=document.createElement("button");return e.innerHTML='<svg height="16" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z"/></svg>',e.title="Copy IDL to clipboard",e.classList.add("respec-button-copy-paste","removeOnSave"),e}();function wa(e){const t=e.closest("pre.idl").cloneNode(!0);t.querySelector(".idlHeader").remove();const{textContent:n}=t,r=ya.cloneNode(!0);r.addEventListener("click",()=>{navigator.clipboard.writeText(n)}),e.append(r)}var va=Object.freeze({__proto__:null,name:"core/webidl-clipboard",addCopyIDLButton:wa});const ka="core/webidl",xa=ka,$a={},_a={},Sa={wrap:e=>e.flat().filter(e=>""!==e).map(e=>"string"==typeof e?new Text(e):e),trivia:e=>e.trim()?Ht`<span class="idlSectionComment">${e}</span>`:e,generic:e=>/^[A-Z]/.test(e)?Ht`<a data-xref-type="interface" data-cite="WebIDL">${e}</a>`:Ht`<a data-xref-type="dfn" data-cite="WebIDL">${e}</a>`,reference(e,t,n){if("extended-attribute"===n.type&&"Exposed"!==n.name)return e;let r,o="_IDL_",s=null;switch(t){case"Window":o="interface",s="HTML";break;case"object":o="interface",s="WebIDL";break;default:t.includes("Worker")&&"extended-attribute"===n.type&&(r=t+"GlobalScope",o="interface",s=["Worker","DedicatedWorker","SharedWorker"].includes(t)?"HTML":null)}return Ht`<a data-xref-type="${o}" data-cite="${s}" data-lt="${r}" + </ul>`))}});const da=new Set(["callback interface","callback","dictionary","enum","interface mixin","interface","typedef"]);function pa(e,t,{parent:n=""}={}){switch(e.type){case"constructor":case"operation":return function(e,t,n){if(n.includes("!overload"))return fa(e,t,n);return fa(e,t,n+"()",n)}(e,n,t);default:return fa(e,n,t)}}function fa(e,t,...n){const{type:r}=e;for(const e of n){let n="enum-value"===r&&""===e?"the-empty-string":e,o=ma(n,t,e,r);if(0===o.length&&""!==t){n=`${t}.${n}`;const e=Bi.get(n);e&&1===e.size&&(o=[...e],Hi(o[0],[n]))}else n=e;if(o.length>1){_n(`WebIDL identifier \`${e}\` ${t?`for \`${t}\``:""} is defined multiple times`,e,{title:"Duplicate definition.",elements:o})}if(o.length)return o[0]}}function ha(e,t,n,r){if(!e.id){const t=n.toLowerCase(),o=t?t+"-":"";let s=r.toLowerCase().replace(/[()]/g,"").replace(/\s/g,"-");""===s&&(s="the-empty-string"),e.id=`dom-${o}${s}`}switch(e.dataset.idl=t.type,e.dataset.title=e.textContent,e.dataset.dfnFor=n,t.type){case"operation":case"attribute":case"field":e.dataset.type=ga(t)}switch(e.querySelector("code")||e.closest("code")||!e.children||gn(e,e.ownerDocument.createElement("code")),t.type){case"attribute":case"constructor":case"operation":!function(e,t){const{local:n,exportable:r}=t,o=e.dataset.lt?new Set(e.dataset.lt.split("|")):new Set;for(const e of r)o.add(e);n.filter(e=>o.has(e)).forEach(e=>o.delete(e)),e.dataset.lt=[...o].join("|"),e.dataset.localLt=n.join("|"),Hi(e,[...n,...r])}(e,function(e,t,n){const{type:r}=e,o=`${t}.${n}`;switch(r){case"constructor":case"operation":return{local:[o,o+"()",n],exportable:[n+"()",...function(e,t){const n=[];if(0===t.length)return n;const r=[],o=[];for(const{name:e,optional:n,variadic:s}of t)n||s?o.push(e):r.push(e);const s=r.join(", "),i=`${e}(${s})`;n.push(i);const a=o.map((t,n)=>{const s=[...r,...o.slice(0,n+1)].join(", ");return`${e}(${s})`});return n.push(...a),n}(n,e.arguments)]};case"attribute":return{local:[o],exportable:[n]}}}(t,n,r))}return e}function ma(e,t,n,r){const o=Bi.get(e);if(!o||0===o.size)return[];const s=[...o],i=s.filter(e=>{if("dfn"===e.dataset.dfnType)return!1;const n=e.closest("[data-dfn-for]");return n&&n.dataset.dfnFor===t});if(0===i.length&&""===t&&1===s.length)return s[0].textContent===n?s:[];if(da.has(r)&&s.length){const e=s.find(e=>e.textContent.trim()===n);if(e)return[e]}return i}function ga(e={}){const{idlType:t,generic:n,union:r}=e;return void 0===t?"":"string"==typeof t?t:n||(r?t.map(ga).join("|"):ga(t))}const ba=function(){const e=document.createElement("button");return e.innerHTML='<svg height="16" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z"/></svg>',e.title="Copy IDL to clipboard",e.classList.add("respec-button-copy-paste","removeOnSave"),e}();function wa(e){const t=e.closest("pre.idl").cloneNode(!0);t.querySelector(".idlHeader").remove();const{textContent:n}=t,r=ba.cloneNode(!0);r.addEventListener("click",()=>{navigator.clipboard.writeText(n)}),e.append(r)}var ya=Object.freeze({__proto__:null,name:"core/webidl-clipboard",addCopyIDLButton:wa});var va=String.raw`pre.idl{padding:1em;position:relative} +pre.idl>code{color:#000} +@media print{ +pre.idl{white-space:pre-wrap} +} +.idlHeader{display:block;width:150px;background:#8ccbf2;color:#fff;font-family:sans-serif;font-weight:700;margin:-1em 0 1em -1em;height:28px;line-height:28px} +.idlHeader a.self-link{margin-left:.3cm;text-decoration:none;border-bottom:none} +.idlID{font-weight:700;color:#005a9c} +.idlType{color:#005a9c} +.idlName{color:#ff4500} +.idlName a{color:#ff4500;border-bottom:1px dotted #ff4500;text-decoration:none} +a.idlEnumItem{color:#000;border-bottom:1px dotted #ccc;text-decoration:none} +.idlSuperclass{font-style:italic;color:#005a9c} +.idlDefaultValue,.idlParamName{font-style:italic} +.extAttr{color:#666} +.idlSectionComment{color:gray} +.idlIncludes a{font-weight:700} +.respec-button-copy-paste:focus{text-decoration:none;border-color:#51a7e8;outline:0;box-shadow:0 0 5px rgba(81,167,232,.5)} +.respec-button-copy-paste.selected:focus,.respec-button-copy-paste:focus:hover{border-color:#51a7e8} +.respec-button-copy-paste.zeroclipboard-is-active,.respec-button-copy-paste.zeroclipboard-is-hover,.respec-button-copy-paste:active,.respec-button-copy-paste:hover{text-decoration:none;background-color:#ddd;background-image:linear-gradient(#eee,#ddd);border-color:#ccc} +.respec-button-copy-paste.selected,.respec-button-copy-paste.zeroclipboard-is-active,.respec-button-copy-paste:active{background-color:#dcdcdc;background-image:none;border-color:#b5b5b5;box-shadow:inset 0 2px 4px rgba(0,0,0,.15)} +.respec-button-copy-paste.selected:hover{background-color:#cfcfcf} +.respec-button-copy-paste.disabled,.respec-button-copy-paste.disabled:hover,.respec-button-copy-paste:disabled,.respec-button-copy-paste:disabled:hover{color:rgba(102,102,102,.5);cursor:default;background-color:rgba(229,229,229,.5);background-image:none;border-color:rgba(197,197,197,.5);box-shadow:none} +@media print{ +.respec-button-copy-paste{visibility:hidden} +}`;const ka="core/webidl",xa=ka,$a={},Sa={},_a={wrap:e=>e.flat().filter(e=>""!==e).map(e=>"string"==typeof e?new Text(e):e),trivia:e=>e.trim()?Ht`<span class="idlSectionComment">${e}</span>`:e,generic:e=>/^[A-Z]/.test(e)?Ht`<a data-xref-type="interface" data-cite="WebIDL">${e}</a>`:Ht`<a data-xref-type="dfn" data-cite="WebIDL">${e}</a>`,reference(e,t,n){if("extended-attribute"===n.type&&"Exposed"!==n.name)return e;let r,o="_IDL_",s=null;switch(t){case"Window":o="interface",s="HTML";break;case"object":o="interface",s="WebIDL";break;default:t.includes("Worker")&&"extended-attribute"===n.type&&(r=t+"GlobalScope",o="interface",s=["Worker","DedicatedWorker","SharedWorker"].includes(t)?"HTML":null)}return Ht`<a data-xref-type="${o}" data-cite="${s}" data-lt="${r}" >${e}</a >`},name(e,{data:t,parent:n}){if(t.idlType&&"argument-type"===t.idlType.type)return Ht`<span class="idlParamName">${e}</span>`;const r=Ca(e,t,n);if("enum-value"!==t.type){const e=n?"idlName":"idlID";r.classList.add(e)}return r},nameless(e,{data:t,parent:n}){switch(t.type){case"operation":case"constructor":return Ca(e,t,n);default:return e}},type:e=>Ht`<span class="idlType">${e}</span>`,inheritance:e=>Ht`<span class="idlSuperclass">${e}</span>`,definition(e,{data:t,parent:n}){const r=function(e){switch(e.type){case"callback interface":return"idlInterface";case"operation":return"idlMethod";case"field":return"idlMember";case"enum-value":return"idlEnumItem";case"callback function":return"idlCallback"}return`idl${e.type[0].toUpperCase()}${e.type.slice(1)}`}(t);switch(t.type){case"includes":case"enum-value":return Ht`<span class="${r}">${e}</span>`}const o=n?n.name:"",{name:s,idlId:i}=Ra(t,o);return Ht`<span class="${r}" @@ -693,7 +824,7 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e data-idl data-title="${s}" >${e}</span - >`},extendedAttribute:e=>Ht`<span class="extAttr">${e}</span>`,extendedAttributeReference:e=>Ht`<a data-xref-type="extended-attribute">${e}</a>`};function Ca(e,t,n){const r=n?n.name:"",{name:o}=Ra(t,r),s=fa(t,o,{parent:r}),i=function(e){switch(e){case"operation":return"method";case"field":return"dict-member";case"callback interface":case"interface mixin":return"interface";default:return e}}(t.type);if(s){t.partial||(s.dataset.export="",s.dataset.dfnType=i),ma(s,t,r,o);const n="#"+s.id;return Ht`<a + >`},extendedAttribute:e=>Ht`<span class="extAttr">${e}</span>`,extendedAttributeReference:e=>Ht`<a data-xref-type="extended-attribute">${e}</a>`};function Ca(e,t,n){const r=n?n.name:"",{name:o}=Ra(t,r),s=pa(t,o,{parent:r}),i=function(e){switch(e){case"operation":return"method";case"field":return"dict-member";case"callback interface":case"interface mixin":return"interface";default:return e}}(t.type);if(s){t.partial||(s.dataset.export="",s.dataset.dfnType=i),ha(s,t,r,o);const n="#"+s.id;return Ht`<a data-link-for="${r}" data-link-type="${i}" href="${n}" @@ -703,17 +834,25 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e >${e}</a >`;if(!t.partial){const n=Ht`<dfn data-export data-dfn-type="${i}" >${e}</dfn - >`;return Gi(n,[o]),ma(n,t,r,o),n}const a=Ht`<a + >`;return Hi(n,[o]),ha(n,t,r,o),n}const a=Ht`<a data-idl="${t.partial?"partial":null}" data-link-type="${i}" data-title="${t.name}" data-xref-type="${i}" >${e}</a - >`;if(o&&"typedef"!==t.type&&!(t.partial&&!s)){Cn(`Missing \`<dfn>\` for${r?` \`${r}\`'s`:""} \`${"operation"===t.type?o+"()":o}\` ${t.type}. [More info](https://github.com/w3c/respec/wiki/WebIDL-thing-is-not-defined).`,xa,{elements:[a]})}return a}const Ea=new WeakMap;function Ra(e,t=""){if(Ea.has(e))return Ea.get(e);const n=function(e,t){let n=function(e){switch(e.type){case"enum-value":return e.value;case"operation":return e.name||e.special;default:return e.name||e.type}}(e);let r=function(e,t){if(!t)return"idl-def-"+e.toLowerCase();return`idl-def-${t.toLowerCase()}-${e.toLowerCase()}`}((e.special&&""===e.name?"anonymous-":"")+n,t);switch(e.type){case"callback interface":case"dictionary":case"interface":case"interface mixin":r+=function(e){if(!e.partial)return"";_a[e.name]||(_a[e.name]=0);return _a[e.name]+=1,"-partial-"+_a[e.name]}(e);break;case"constructor":case"operation":{const o=function(e,t){const n=`${t}.${e}`,r=n+"()";let o;$a[r]||($a[r]=0);$a[n]?o="!overload-"+$a[n]:$a[n]=0;return $a[r]+=1,$a[n]+=1,o||""}(n,t);o?(n+=o,r+=o):e.arguments.length&&(r+=e.arguments.map(e=>"-"+e.name.toLowerCase()).join(""));break}}return{name:n,idlId:r}}(e,t);return Ea.set(e,n),n}function Ta(e,t){let n;try{n=Bt.parse(e.textContent,{sourceName:String(t)})}catch(t){return Sn(`Failed to parse WebIDL: ${t.bareMessage}.`,xa,{title:t.bareMessage,details:`<pre>${t.context}</pre>`,elements:[e]}),[]}e.classList.add("def","idl");const r=Bt.write(n,{templates:Sa});Ht.bind(e)`${r}`,gn(e,document.createElement("code")),e.querySelectorAll("[data-idl]").forEach(e=>{if(e.dataset.dfnFor)return;const t=e.dataset.title,n=e.parentElement.closest("[data-idl][data-title]");n&&(e.dataset.dfnFor=n.dataset.title),"dfn"===e.localName&&Gi(e,[t])});const o=e.closest("[data-cite], body"),{dataset:s}=o;if(s.cite||(s.cite="WebIDL"),!/\bwebidl\b/i.test(s.cite)){const e=s.cite.trim().split(/\s+/);s.cite=["WebIDL",...e].join(" ")}return Aa(e),n}function Aa(e){dn(e,"webidl");const t=Ht`<span class="idlHeader" + >`;if(o&&"typedef"!==t.type&&!(t.partial&&!s)){Cn(`Missing \`<dfn>\` for${r?` \`${r}\`'s`:""} \`${"operation"===t.type?o+"()":o}\` ${t.type}. [More info](https://github.com/w3c/respec/wiki/WebIDL-thing-is-not-defined).`,xa,{elements:[a]})}return a}const Ea=new WeakMap;function Ra(e,t=""){if(Ea.has(e))return Ea.get(e);const n=function(e,t){let n=function(e){switch(e.type){case"enum-value":return e.value;case"operation":return e.name||e.special;default:return e.name||e.type}}(e);let r=function(e,t){if(!t)return"idl-def-"+e.toLowerCase();return`idl-def-${t.toLowerCase()}-${e.toLowerCase()}`}((e.special&&""===e.name?"anonymous-":"")+n,t);switch(e.type){case"callback interface":case"dictionary":case"interface":case"interface mixin":r+=function(e){if(!e.partial)return"";Sa[e.name]||(Sa[e.name]=0);return Sa[e.name]+=1,"-partial-"+Sa[e.name]}(e);break;case"constructor":case"operation":{const o=function(e,t){const n=`${t}.${e}`,r=n+"()";let o;$a[r]||($a[r]=0);$a[n]?o="!overload-"+$a[n]:$a[n]=0;return $a[r]+=1,$a[n]+=1,o||""}(n,t);o?(n+=o,r+=o):e.arguments.length&&(r+=e.arguments.map(e=>"-"+e.name.toLowerCase()).join(""));break}}return{name:n,idlId:r}}(e,t);return Ea.set(e,n),n}function Ta(e,t){let n;try{n=Bt.parse(e.textContent,{sourceName:String(t)})}catch(t){return _n(`Failed to parse WebIDL: ${t.bareMessage}.`,xa,{title:t.bareMessage,details:`<pre>${t.context}</pre>`,elements:[e]}),[]}e.classList.add("def","idl");const r=Bt.write(n,{templates:_a});Ht.bind(e)`${r}`,gn(e,document.createElement("code")),e.querySelectorAll("[data-idl]").forEach(e=>{if(e.dataset.dfnFor)return;const t=e.dataset.title,n=e.parentElement.closest("[data-idl][data-title]");n&&(e.dataset.dfnFor=n.dataset.title),"dfn"===e.localName&&Hi(e,[t])});const o=e.closest("[data-cite], body"),{dataset:s}=o;if(s.cite||(s.cite="WebIDL"),!/\bwebidl\b/i.test(s.cite)){const e=s.cite.trim().split(/\s+/);s.cite=["WebIDL",...e].join(" ")}return Aa(e),n}function Aa(e){dn(e,"webidl");const t=Ht`<span class="idlHeader" ><a class="self-link" href="${"#"+e.id}">WebIDL</a></span - >`;e.prepend(t),wa(t)}const Pa=async function(){try{return(await Promise.resolve().then((function(){return Ru}))).default}catch{return Wn("webidl.css")}}();var La=Object.freeze({__proto__:null,name:ka,addIDLHeader:Aa,run:async function(){const e=document.querySelectorAll("pre.idl, pre.webidl");if(!e.length)return;if(!document.querySelector(".idl:not(pre), .webidl:not(pre)")){const e=document.querySelector("head link");if(e){const t=document.createElement("style");t.textContent=await Pa,e.before(t)}}const t=[...e].map(Ta),n=Bt.validate(t);for(const r of n){let n=`<pre>${tn(r.context)}</pre>`;if(r.autofix){r.autofix();n+=`Try fixing as:\n <pre>${tn(Bt.write(t[r.sourceName]))}</pre>`}Sn("WebIDL validation error: "+r.bareMessage,xa,{details:n,elements:[e[r.sourceName]],title:r.bareMessage})}document.normalize()}});const Ia="core/data-cite",Da="__SPEC__";async function Na(e){const{key:t,frag:n,path:r}=e;let o="",s="";if(t===Da)o=document.location.href;else{const e=await ii(t);if(!e)return null;o=e.href,s=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:s}}function ja(e,t,n){const{href:r,title:o}=t,s=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?gn(e,t):(t.textContent=o,e.append(t)),s){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){Sn("Exporting an linked external definition is not allowed.",Ia,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,s){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function Oa(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const za=Oa("#"),Wa=Oa("/");function Ma(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:s}=r?Ma(r):{key:Da,isNormative:!1};return t.cite=s?o:"?"+o,t.citeFrag=n.replace("#",""),Ma(e)}const s=r?"#"+r:za(n),i=o||Wa(n).split("#")[0],{type:a}=mn(n,e),c="normative"===a,l=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(l)),isNormative:c,frag:s,path:i}}function Ua(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var Fa=Object.freeze({__proto__:null,name:Ia,THIS_SPEC:Da,toCiteDetails:Ma,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(Ma).map(async e=>({entry:e,result:await ii(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await si(n);r&&Object.assign(ei,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=Ma(t),r=await Na(n);if(r)ja(t,r,n);else{Cn(`Couldn't find a match for "${e}"`,Ia,{elements:[t]})}}Pn("beforesave",Ua)}});const qa="core/link-to-dfn",Ba=[],Ha=rn({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function Ga(e){const t=new Map,n=[];for(const r of Hi.get(e)){const{dfnFor:o="",dfnType:s="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(s)){const e=t.get(o).get(s),i="dfn"===e.localName,a="dfn"===r.localName,c=s===(e.dataset.dfnType||"dfn"),l=o===(e.dataset.dfnFor||"");if(i&&a&&c&&l){n.push(r);continue}}const i="idl"in r.dataset||"dfn"!==s?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(i,r),pn(r,"dfn",e)}return{result:t,duplicates:n}}function Va(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return fn(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function Za(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:s}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==s)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=Ya(e)&&Ya(t,n);r&&!o||gn(e,document.createElement("code"))}(e,t),!r}function Ya(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function Ja(e){e.forEach(e=>{Cn(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,qa,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var Ka=Object.freeze({__proto__:null,name:qa,possibleExternalLinks:Ba,run:async function(e){const t=function(){const e=new $n;for(const t of Hi.keys()){const{result:n,duplicates:r}=Ga(t);e.set(t,n),r.length>0&&Sn(Ha.duplicateMsg(t),qa,{title:Ha.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=Va(e,t);if(r){Za(e,r,t)||Ba.push(e)}else""===e.dataset.cite?n.push(e):Ba.push(e)}Ja(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=Ma(t);r!==Da&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||Ja(Ba)}});const Xa="xrefs",Qa=3e5;async function ec(){return await qt.openDB("xref",2,{upgrade(e){[...e.objectStoreNames].forEach(t=>e.deleteObjectStore(t));e.createObjectStore(Xa,{keyPath:"query.id"}).createIndex("byTerm","query.term",{unique:!1})}})}async function tc(e){const t=new Map;if(await async function(){const e="XREF:LAST_VERSION_CHECK",t=parseInt(localStorage.getItem(e),10),n=Date.now();if(!t)return localStorage.setItem(e,n.toString()),!1;if(n-t<Qa)return!1;const r=new URL("meta/version",oc).href,o=await fetch(r);if(!o.ok)return!1;const s=await o.text();return localStorage.setItem(e,n.toString()),parseInt(s,10)>t}())return await async function(){try{await ec().then(e=>e.clear(Xa))}catch(e){console.error(e)}}(),t;const n=new Set(e.map(e=>e.id));try{const e=await ec();let r=await e.transaction(Xa).store.openCursor();for(;r;)n.has(r.key)&&t.set(r.key,r.value.result),r=await r.continue()}catch(e){console.error(e)}return t}const nc="core/xref",rc={"web-platform":["HTML","INFRA","URL","WEBIDL","DOM","FETCH"]},oc="https://respec.org/xref/";if(!document.querySelector("link[rel='preconnect'][href='https://respec.org']")){const e=Xt({hint:"preconnect",href:"https://respec.org"});document.head.appendChild(e)}function sc(e){const t="xrefType"in e.dataset;let n=ic(e);t||(n=n.toLowerCase());const r=function(e){const t=[];let n=e.closest("[data-cite]");for(;n;){const r=n.dataset.cite.toLowerCase().replace(/[!?]/g,"").split(/\s+/).filter(e=>e);if(r.length&&t.push(r),n===e)break;n=n.parentElement.closest("[data-cite]")}if(n!==e){const n=e.closest("section"),r=[...n?n.querySelectorAll("a.bibref"):[]].map(e=>e.textContent.toLowerCase());r.length&&t.push(r)}return function(e){const t=[];for(const n of e){const e=t[t.length-1]||[],r=[...new Set(n)].filter(t=>!e.includes(t));t.push(r.sort())}return t}(t)}(e),o=function(e,t){if(t)return e.dataset.xrefType?e.dataset.xrefType.split("|"):["_IDL_"];return["_CONCEPT_"]}(e,t),s=function(e,t){if(e.dataset.xrefFor)return nn(e.dataset.xrefFor);if(t){const t=e.closest("[data-xref-for]");if(t)return nn(t.dataset.xrefFor)}return null}(e,t);return{term:n,types:o,...r.length&&{specs:r},..."string"==typeof s&&{for:s}}}function ic(e){const{lt:t}=e.dataset;let n=t?t.split("|",1)[0]:e.textContent;return n=nn(n),"the-empty-string"===n?"":n}function ac(e,t,n,r){const{term:o,specs:s=[]}=t,{uri:i,shortname:a,spec:c,normative:l,type:u,for:d}=n,p=s.flat().includes(c)?c:a,f=new URL(i,"https://example.org"),{pathname:h}=f,m={cite:p,citePath:h,citeFrag:f.hash.slice(1),type:u};d&&(m.linkFor=d[0]),Object.assign(e.dataset,m),function(e,t,n,r,o){if(!function(e){const t=e.closest(".normative"),n=e.closest(Kt);return!n||e===t||t&&n&&n.contains(t)}(e))return void(o.normativeReferences.has(t)||o.informativeReferences.add(t));if(n){const e=o.informativeReferences.has(t)?o.informativeReferences.getCanonicalKey(t):t;return o.normativeReferences.add(e),void o.informativeReferences.delete(e)}Cn(`Normative reference to "${r}" found but term is defined informatively in "${t}"`,nc,{title:"Error: Normative reference to informative term",elements:[e]})}(e,p,l,o,r)}function cc(e){const t=JSON.stringify(e,Object.keys(e).sort()),n=(new TextEncoder).encode(t);return crypto.subtle.digest("SHA-1",n).then(lc)}function lc(e){return[...new Uint8Array(e)].map(e=>e.toString(16).padStart(2,"0")).join("")}function uc(e){const t=e.querySelectorAll("a[data-xref-for], a[data-xref-type], a[data-link-for]"),n=["data-xref-for","data-xref-type","data-link-for"];t.forEach(e=>{n.forEach(t=>e.removeAttribute(t))})}var dc=Object.freeze({__proto__:null,name:nc,API_URL:oc,run:async function(e){if(!e.xref)return;const t=function(e){const t={url:oc,specs:null},n=Object.assign({},t);switch(Array.isArray(e)?"array":typeof e){case"boolean":break;case"string":e.toLowerCase()in rc?Object.assign(n,{specs:rc[e.toLowerCase()]}):r(e);break;case"array":Object.assign(n,{specs:e});break;case"object":if(Object.assign(n,e),e.profile){const t=e.profile.toLowerCase();if(t in rc){const r=(e.specs||[]).concat(rc[t]);Object.assign(n,{specs:r})}else r(e.profile)}break;default:Sn(`Invalid value for \`xref\` configuration option. Received: "${e}".`,nc)}return n;function r(e){Sn(`Invalid profile "${e}" in \`respecConfig.xref\`. Please use one of the supported profiles: ${Object.keys(rc).map(e=>`"${e}"`).join(", ")}.`,nc)}}(e.xref);if(t.specs){const e=document.body.dataset.cite?document.body.dataset.cite.split(/\s+/):[];document.body.dataset.cite=e.concat(t.specs).join(" ")}const n=Ba.concat(function(){const e=document.querySelectorAll("a[data-cite]:not([data-cite='']):not([data-cite*='#']), dfn[data-cite]:not([data-cite='']):not([data-cite*='#'])"),t=document.querySelectorAll("dfn.externalDFN");return[...e].filter(e=>{if(""===e.textContent.trim())return!1;const t=e.closest("[data-cite]");return!t||""!==t.dataset.cite}).concat(...t)}());if(!n.length)return;const r=[];for(const e of n){const t=sc(e),n=await cc(t);r.push({...t,id:n})}const o=await async function(e,t){const n=new Set,r=e.filter(e=>!n.has(e.id)&&(n.add(e.id)&&!0)),o=await tc(r),s=r.filter(e=>!o.get(e.id)),i=await async function(e,t){if(!e.length)return new Map;const n={keys:e},r={method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}},o=await fetch(t,r),s=await o.json();return new Map(s.result)}(s,t);i.size&&await async function(e,t){try{const n=(await ec()).transaction(Xa,"readwrite");for(const r of e){const e=t.get(r.id);n.objectStore(Xa).add({query:r,result:e})}await n.done}catch(e){console.error(e)}}(r,i);return new Map([...o,...i])}(r,t.url);!function(e,t,n,r){const o={ambiguous:new Map,notFound:new Map};for(let s=0,i=e.length;s<i;s++){if(e[s].closest("[data-no-xref]"))continue;const i=e[s],a=t[s],{id:c}=a,l=n.get(c);if(1===l.length)ac(i,a,l[0],r);else{const e=o[0===l.length?"notFound":"ambiguous"];e.has(c)||e.set(c,{elems:[],results:l,query:a}),e.get(c).elems.push(i)}}!function({ambiguous:e,notFound:t}){const n=(e,t,n=[])=>{const r=new URL(oc);return r.searchParams.set("term",e),t.for&&r.searchParams.set("for",t.for),r.searchParams.set("types",t.types.join(",")),n.length&&r.searchParams.set("specs",n.join(",")),r},r=e=>`[Learn more about this error](https://respec.org/docs/#error-term-not-found) or see [how to cite to resolve the error](${e}).`;for(const{query:e,elems:o}of t.values()){const t=e.specs?[...new Set(e.specs.flat())].sort():[],s=ic(o[0]),i=n(s,e),a=t.map(e=>`\`${e}\``).join(", "),c=r(i);Sn(`Couldn't match "**${s}**" to anything in the document or in any other document cited in this specification: ${a}.`,nc,{title:"Error: No matching dfn found.",elements:o,hint:c})}for(const{query:t,elems:o,results:s}of e.values()){const e=[...new Set(s.map(e=>e.shortname))].sort(),i=e.map(e=>`**${e}**`).join(", "),a=ic(o[0]),c=r(n(a,t,e));Sn(`The term "**${a}**" is defined in ${i} in multiple ways, so it's ambiguous.`,nc,{title:"Error: Linking an ambiguous dfn.",elements:o,hint:c})}}(o)}(n,r,o,e),Pn("beforesave",uc)},getTermFromElement:ic});var pc=Object.freeze({__proto__:null,name:"core/webidl-index",run:function(){const e=document.querySelector("section#idl-index");if(!e)return;const t=[2,3,4,5,6].map(e=>`h${e}:first-child`).join(",");if(!e.querySelector(t)){const t=document.createElement("h2");e.title?(t.textContent=e.title,e.removeAttribute("title")):t.textContent="IDL Index",e.prepend(t)}const n=Array.from(document.querySelectorAll("pre.idl:not(.exclude) > code")).filter(e=>!e.closest(Kt));if(0===n.length){const t="This specification doesn't normatively declare any Web IDL.";return void e.append(t)}const r=document.createElement("pre");r.classList.add("idl","def"),r.id="actual-idl-index",n.map(e=>{const t=document.createDocumentFragment();for(const n of e.children)t.appendChild(n.cloneNode(!0));return t}).forEach(e=>{r.lastChild&&r.append("\n\n"),r.appendChild(e)}),r.querySelectorAll("*[id]").forEach(e=>e.removeAttribute("id")),e.appendChild(r),gn(r,document.createElement("code")),Aa(r)}});const fc=rn({en:{heading:"Index",headingExternal:"Terms defined by reference",headlingLocal:"Terms defined by this specification",dfnOf:"definition of"}}),hc=new Set(["attribute","callback","dict-member","dictionary","element-attr","element","enum-value","enum","exception","extended-attribute","interface","method","typedef"]);function mc(e){const t=e.dataset,n=t.dfnType||t.idl||t.linkType||"";switch(n){case"":case"dfn":return"";default:return n}}function gc(e){const t=e.closest("[data-dfn-for]:not([data-dfn-for=''])");return t?t.dataset.dfnFor:""}function bc(e,t,n=""){if(n.startsWith("[[")){return`internal slot for <code>${gc(e)}</code>`}switch(t){case"dict-member":case"method":case"attribute":case"enum-value":return`${"dict-member"===t?"member":t.replace("-"," ")} for <code>${gc(e)}</code>`;case"interface":case"dictionary":case"enum":return t;case"constructor":return`for <code>${gc(e)}</code>`;default:return""}}function yc(){document.querySelectorAll("#index-defined-here li[data-id]").forEach(e=>e.append((e=>{const t="§"+document.getElementById(e).closest("section").querySelector(".secno").textContent.trim();return Ht`<span class="print-only">${t}</span>`})(e.dataset.id)))}function wc(){const e=new Set,t=new Map,n=document.querySelectorAll("a[data-cite]");for(const r of n){if(!r.dataset.cite)continue;const n=r.href;if(e.has(n))continue;const{type:o,linkFor:s}=r.dataset,i=ic(r);if(!i)continue;const a=Ma(r).key.toUpperCase();(t.get(a)||t.set(a,[]).get(a)).push({term:i,type:o,linkFor:s,elem:r}),e.add(n)}return t}function vc(e){const{elem:t}=e,n=function(e){const{term:t,type:n,linkFor:r}=e;let o=t;hc.has(n)&&("extended-attribute"===n&&(o=`[${o}]`),o=`<code>${o}</code>`);const s=xc.has(t)?"type":kc.get(n);s&&(o+=" "+s);if(r){let e=r;/\s/.test(r)||(e=`<code>${e}</code>`),"element-attr"===n&&(e+=" element"),o+=` (for ${e})`}return o}(e);return Ht`<li> + >`;e.prepend(t),wa(t)}var La=Object.freeze({__proto__:null,name:ka,addIDLHeader:Aa,run:async function(){const e=document.querySelectorAll("pre.idl, pre.webidl");if(!e.length)return;if(!document.querySelector(".idl:not(pre), .webidl:not(pre)")){const e=document.querySelector("head link");if(e){const t=document.createElement("style");t.textContent=va,e.before(t)}}const t=[...e].map(Ta),n=Bt.validate(t);for(const r of n){let n=`<pre>${tn(r.context)}</pre>`;if(r.autofix){r.autofix();n+=`Try fixing as:\n <pre>${tn(Bt.write(t[r.sourceName]))}</pre>`}_n("WebIDL validation error: "+r.bareMessage,xa,{details:n,elements:[e[r.sourceName]],title:r.bareMessage})}document.normalize()}});const Pa="core/data-cite",Ia="__SPEC__";async function Da(e){const{key:t,frag:n,path:r}=e;let o="",s="";if(t===Ia)o=document.location.href;else{const e=await ai(t);if(!e)return null;o=e.href,s=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:s}}function Na(e,t,n){const{href:r,title:o}=t,s=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?gn(e,t):(t.textContent=o,e.append(t)),s){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){_n("Exporting an linked external definition is not allowed.",Pa,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,s){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function Oa(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const ja=Oa("#"),za=Oa("/");function Wa(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:s}=r?Wa(r):{key:Ia,isNormative:!1};return t.cite=s?o:"?"+o,t.citeFrag=n.replace("#",""),Wa(e)}const s=r?"#"+r:ja(n),i=o||za(n).split("#")[0],{type:a}=mn(n,e),c="normative"===a,l=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(l)),isNormative:c,frag:s,path:i}}function Ma(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var Ua=Object.freeze({__proto__:null,name:Pa,THIS_SPEC:Ia,toCiteDetails:Wa,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(Wa).map(async e=>({entry:e,result:await ai(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await ii(n);r&&Object.assign(ti,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=Wa(t),r=await Da(n);if(r)Na(t,r,n);else{Cn(`Couldn't find a match for "${e}"`,Pa,{elements:[t]})}}Ln("beforesave",Ma)}});const Fa="core/link-to-dfn",qa=[],Ba=rn({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function Ha(e){const t=new Map,n=[];for(const r of Bi.get(e)){const{dfnFor:o="",dfnType:s="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(s)){const e=t.get(o).get(s),i="dfn"===e.localName,a="dfn"===r.localName,c=s===(e.dataset.dfnType||"dfn"),l=o===(e.dataset.dfnFor||"");if(i&&a&&c&&l){n.push(r);continue}}const i="idl"in r.dataset||"dfn"!==s?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(i,r),pn(r,"dfn",e)}return{result:t,duplicates:n}}function Ga(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return fn(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function Va(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:s}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==s)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=Za(e)&&Za(t,n);r&&!o||gn(e,document.createElement("code"))}(e,t),!r}function Za(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function Ya(e){e.forEach(e=>{Cn(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,Fa,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var Ja=Object.freeze({__proto__:null,name:Fa,possibleExternalLinks:qa,run:async function(e){const t=function(){const e=new $n;for(const t of Bi.keys()){const{result:n,duplicates:r}=Ha(t);e.set(t,n),r.length>0&&_n(Ba.duplicateMsg(t),Fa,{title:Ba.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=Ga(e,t);if(r){Va(e,r,t)||qa.push(e)}else""===e.dataset.cite?n.push(e):qa.push(e)}Ya(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=Wa(t);r!==Ia&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||Ya(qa)}});const Ka="xrefs",Xa=3e5;async function Qa(){return await qt.openDB("xref",2,{upgrade(e){[...e.objectStoreNames].forEach(t=>e.deleteObjectStore(t));e.createObjectStore(Ka,{keyPath:"query.id"}).createIndex("byTerm","query.term",{unique:!1})}})}async function ec(e){const t=new Map;if(await async function(){const e="XREF:LAST_VERSION_CHECK",t=parseInt(localStorage.getItem(e),10),n=Date.now();if(!t)return localStorage.setItem(e,n.toString()),!1;if(n-t<Xa)return!1;const r=new URL("meta/version",rc).href,o=await fetch(r);if(!o.ok)return!1;const s=await o.text();return localStorage.setItem(e,n.toString()),parseInt(s,10)>t}())return await async function(){try{await Qa().then(e=>e.clear(Ka))}catch(e){console.error(e)}}(),t;const n=new Set(e.map(e=>e.id));try{const e=await Qa();let r=await e.transaction(Ka).store.openCursor();for(;r;)n.has(r.key)&&t.set(r.key,r.value.result),r=await r.continue()}catch(e){console.error(e)}return t}const tc="core/xref",nc={"web-platform":["HTML","INFRA","URL","WEBIDL","DOM","FETCH"]},rc="https://respec.org/xref/";if(!document.querySelector("link[rel='preconnect'][href='https://respec.org']")){const e=Xt({hint:"preconnect",href:"https://respec.org"});document.head.appendChild(e)}function oc(e){const t="xrefType"in e.dataset;let n=sc(e);t||(n=n.toLowerCase());const r=function(e){const t=[];let n=e.closest("[data-cite]");for(;n;){const r=n.dataset.cite.toLowerCase().replace(/[!?]/g,"").split(/\s+/).filter(e=>e);if(r.length&&t.push(r),n===e)break;n=n.parentElement.closest("[data-cite]")}if(n!==e){const n=e.closest("section"),r=[...n?n.querySelectorAll("a.bibref"):[]].map(e=>e.textContent.toLowerCase());r.length&&t.push(r)}return function(e){const t=[];for(const n of e){const e=t[t.length-1]||[],r=[...new Set(n)].filter(t=>!e.includes(t));t.push(r.sort())}return t}(t)}(e),o=function(e,t){if(t)return e.dataset.xrefType?e.dataset.xrefType.split("|"):["_IDL_"];return["_CONCEPT_"]}(e,t),s=function(e,t){if(e.dataset.xrefFor)return nn(e.dataset.xrefFor);if(t){const t=e.closest("[data-xref-for]");if(t)return nn(t.dataset.xrefFor)}return null}(e,t);return{term:n,types:o,...r.length&&{specs:r},..."string"==typeof s&&{for:s}}}function sc(e){const{lt:t}=e.dataset;let n=t?t.split("|",1)[0]:e.textContent;return n=nn(n),"the-empty-string"===n?"":n}function ic(e,t,n,r){const{term:o,specs:s=[]}=t,{uri:i,shortname:a,spec:c,normative:l,type:u,for:d}=n,p=s.flat().includes(c)?c:a,f=new URL(i,"https://example.org"),{pathname:h}=f,m={cite:p,citePath:h,citeFrag:f.hash.slice(1),type:u};d&&(m.linkFor=d[0]),Object.assign(e.dataset,m),function(e,t,n,r,o){if(!function(e){const t=e.closest(".normative"),n=e.closest(Kt);return!n||e===t||t&&n&&n.contains(t)}(e))return void(o.normativeReferences.has(t)||o.informativeReferences.add(t));if(n){const e=o.informativeReferences.has(t)?o.informativeReferences.getCanonicalKey(t):t;return o.normativeReferences.add(e),void o.informativeReferences.delete(e)}Cn(`Normative reference to "${r}" found but term is defined informatively in "${t}"`,tc,{title:"Error: Normative reference to informative term",elements:[e]})}(e,p,l,o,r)}function ac(e){const t=JSON.stringify(e,Object.keys(e).sort()),n=(new TextEncoder).encode(t);return crypto.subtle.digest("SHA-1",n).then(cc)}function cc(e){return[...new Uint8Array(e)].map(e=>e.toString(16).padStart(2,"0")).join("")}function lc(e){const t=e.querySelectorAll("a[data-xref-for], a[data-xref-type], a[data-link-for]"),n=["data-xref-for","data-xref-type","data-link-for"];t.forEach(e=>{n.forEach(t=>e.removeAttribute(t))})}var uc=Object.freeze({__proto__:null,name:tc,API_URL:rc,run:async function(e){if(!e.xref)return;const t=function(e){const t={url:rc,specs:null},n=Object.assign({},t);switch(Array.isArray(e)?"array":typeof e){case"boolean":break;case"string":e.toLowerCase()in nc?Object.assign(n,{specs:nc[e.toLowerCase()]}):r(e);break;case"array":Object.assign(n,{specs:e});break;case"object":if(Object.assign(n,e),e.profile){const t=e.profile.toLowerCase();if(t in nc){const r=(e.specs||[]).concat(nc[t]);Object.assign(n,{specs:r})}else r(e.profile)}break;default:_n(`Invalid value for \`xref\` configuration option. Received: "${e}".`,tc)}return n;function r(e){_n(`Invalid profile "${e}" in \`respecConfig.xref\`. Please use one of the supported profiles: ${Object.keys(nc).map(e=>`"${e}"`).join(", ")}.`,tc)}}(e.xref);if(t.specs){const e=document.body.dataset.cite?document.body.dataset.cite.split(/\s+/):[];document.body.dataset.cite=e.concat(t.specs).join(" ")}const n=qa.concat(function(){const e=document.querySelectorAll("a[data-cite]:not([data-cite='']):not([data-cite*='#']), dfn[data-cite]:not([data-cite='']):not([data-cite*='#'])"),t=document.querySelectorAll("dfn.externalDFN");return[...e].filter(e=>{if(""===e.textContent.trim())return!1;const t=e.closest("[data-cite]");return!t||""!==t.dataset.cite}).concat(...t)}());if(!n.length)return;const r=[];for(const e of n){const t=oc(e),n=await ac(t);r.push({...t,id:n})}const o=await async function(e,t){const n=new Set,r=e.filter(e=>!n.has(e.id)&&(n.add(e.id)&&!0)),o=await ec(r),s=r.filter(e=>!o.get(e.id)),i=await async function(e,t){if(!e.length)return new Map;const n={keys:e},r={method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}},o=await fetch(t,r),s=await o.json();return new Map(s.result)}(s,t);i.size&&await async function(e,t){try{const n=(await Qa()).transaction(Ka,"readwrite");for(const r of e){const e=t.get(r.id);n.objectStore(Ka).add({query:r,result:e})}await n.done}catch(e){console.error(e)}}(r,i);return new Map([...o,...i])}(r,t.url);!function(e,t,n,r){const o={ambiguous:new Map,notFound:new Map};for(let s=0,i=e.length;s<i;s++){if(e[s].closest("[data-no-xref]"))continue;const i=e[s],a=t[s],{id:c}=a,l=n.get(c);if(1===l.length)ic(i,a,l[0],r);else{const e=o[0===l.length?"notFound":"ambiguous"];e.has(c)||e.set(c,{elems:[],results:l,query:a}),e.get(c).elems.push(i)}}!function({ambiguous:e,notFound:t}){const n=(e,t,n=[])=>{const r=new URL(rc);return r.searchParams.set("term",e),t.for&&r.searchParams.set("for",t.for),r.searchParams.set("types",t.types.join(",")),n.length&&r.searchParams.set("specs",n.join(",")),r},r=e=>`[Learn more about this error](https://respec.org/docs/#error-term-not-found) or see [how to cite to resolve the error](${e}).`;for(const{query:e,elems:o}of t.values()){const t=e.specs?[...new Set(e.specs.flat())].sort():[],s=sc(o[0]),i=n(s,e),a=t.map(e=>`\`${e}\``).join(", "),c=r(i);_n(`Couldn't match "**${s}**" to anything in the document or in any other document cited in this specification: ${a}.`,tc,{title:"Error: No matching dfn found.",elements:o,hint:c})}for(const{query:t,elems:o,results:s}of e.values()){const e=[...new Set(s.map(e=>e.shortname))].sort(),i=e.map(e=>`**${e}**`).join(", "),a=sc(o[0]),c=r(n(a,t,e));_n(`The term "**${a}**" is defined in ${i} in multiple ways, so it's ambiguous.`,tc,{title:"Error: Linking an ambiguous dfn.",elements:o,hint:c})}}(o)}(n,r,o,e),Ln("beforesave",lc)},getTermFromElement:sc});var dc=Object.freeze({__proto__:null,name:"core/webidl-index",run:function(){const e=document.querySelector("section#idl-index");if(!e)return;const t=[2,3,4,5,6].map(e=>`h${e}:first-child`).join(",");if(!e.querySelector(t)){const t=document.createElement("h2");e.title?(t.textContent=e.title,e.removeAttribute("title")):t.textContent="IDL Index",e.prepend(t)}const n=Array.from(document.querySelectorAll("pre.idl:not(.exclude) > code")).filter(e=>!e.closest(Kt));if(0===n.length){const t="This specification doesn't normatively declare any Web IDL.";return void e.append(t)}const r=document.createElement("pre");r.classList.add("idl","def"),r.id="actual-idl-index",n.map(e=>{const t=document.createDocumentFragment();for(const n of e.children)t.appendChild(n.cloneNode(!0));return t}).forEach(e=>{r.lastChild&&r.append("\n\n"),r.appendChild(e)}),r.querySelectorAll("*[id]").forEach(e=>e.removeAttribute("id")),e.appendChild(r),gn(r,document.createElement("code")),Aa(r)}});var pc=String.raw`ul.index{columns:30ch;column-gap:1.5em} +ul.index li{list-style:inherit} +ul.index li span{color:inherit;cursor:pointer;white-space:normal} +#index-defined-here ul.index li{font-size:.9rem} +ul.index code{color:inherit} +#index-defined-here .print-only{display:none} +@media print{ +#index-defined-here .print-only{display:initial} +}`;const fc=rn({en:{heading:"Index",headingExternal:"Terms defined by reference",headlingLocal:"Terms defined by this specification",dfnOf:"definition of"}}),hc=new Set(["attribute","callback","dict-member","dictionary","element-attr","element","enum-value","enum","exception","extended-attribute","interface","method","typedef"]);function mc(e){const t=e.dataset,n=t.dfnType||t.idl||t.linkType||"";switch(n){case"":case"dfn":return"";default:return n}}function gc(e){const t=e.closest("[data-dfn-for]:not([data-dfn-for=''])");return t?t.dataset.dfnFor:""}function bc(e,t,n=""){if(n.startsWith("[[")){return`internal slot for <code>${gc(e)}</code>`}switch(t){case"dict-member":case"method":case"attribute":case"enum-value":return`${"dict-member"===t?"member":t.replace("-"," ")} for <code>${gc(e)}</code>`;case"interface":case"dictionary":case"enum":return t;case"constructor":return`for <code>${gc(e)}</code>`;default:return""}}function wc(){document.querySelectorAll("#index-defined-here li[data-id]").forEach(e=>e.append((e=>{const t="§"+document.getElementById(e).closest("section").querySelector(".secno").textContent.trim();return Ht`<span class="print-only">${t}</span>`})(e.dataset.id)))}function yc(){const e=new Set,t=new Map,n=document.querySelectorAll("a[data-cite]");for(const r of n){if(!r.dataset.cite)continue;const n=r.href;if(e.has(n))continue;const{type:o,linkFor:s}=r.dataset,i=sc(r);if(!i)continue;const a=Wa(r).key.toUpperCase();(t.get(a)||t.set(a,[]).get(a)).push({term:i,type:o,linkFor:s,elem:r}),e.add(n)}return t}function vc(e){const{elem:t}=e,n=function(e){const{term:t,type:n,linkFor:r}=e;let o=t;hc.has(n)&&("extended-attribute"===n&&(o=`[${o}]`),o=`<code>${o}</code>`);const s=xc.has(t)?"type":kc.get(n);s&&(o+=" "+s);if(r){let e=r;/\s/.test(r)||(e=`<code>${e}</code>`),"element-attr"===n&&(e+=" element"),o+=` (for ${e})`}return o}(e);return Ht`<li> <span class="index-term" data-href="${t.href}">${{html:n}}</span> - </li>`}const kc=new Map([["attribute","attribute"],["element-attr","attribute"],["element","element"],["enum","enum"],["exception","exception"],["extended-attribute","extended attribute"],["interface","interface"]]),xc=new Set(["boolean","byte","octet","short","unsigned short","long","unsigned long","long long","unsigned long long","float","unrestricted float","double","unrestricted double","undefined","any","object","symbol"]);function $c(e){e.querySelectorAll("#index-defined-elsewhere li[data-spec]").forEach(e=>e.removeAttribute("data-spec")),e.querySelectorAll("#index-defined-here li[data-id]").forEach(e=>e.removeAttribute("data-id"))}var _c=Object.freeze({__proto__:null,name:"core/dfn-index",run:async function(){const e=document.querySelector("section#index");if(!e)return;const t=document.createElement("style");t.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Tu}))).default}catch{return Wn("dfn-index.css")}}(),document.head.appendChild(t),e.classList.add("appendix"),e.querySelector("h2")||e.prepend(Ht`<h2>${fc.heading}</h2>`);const n=Ht`<section id="index-defined-here"> + </li>`}const kc=new Map([["attribute","attribute"],["element-attr","attribute"],["element","element"],["enum","enum"],["exception","exception"],["extended-attribute","extended attribute"],["interface","interface"]]),xc=new Set(["boolean","byte","octet","short","unsigned short","long","unsigned long","long long","unsigned long long","float","unrestricted float","double","unrestricted double","undefined","any","object","symbol"]);function $c(e){e.querySelectorAll("#index-defined-elsewhere li[data-spec]").forEach(e=>e.removeAttribute("data-spec")),e.querySelectorAll("#index-defined-here li[data-id]").forEach(e=>e.removeAttribute("data-id"))}var Sc=Object.freeze({__proto__:null,name:"core/dfn-index",run:function(){const e=document.querySelector("section#index");if(!e)return;const t=document.createElement("style");t.textContent=pc,document.head.appendChild(t),e.classList.add("appendix"),e.querySelector("h2")||e.prepend(Ht`<h2>${fc.heading}</h2>`);const n=Ht`<section id="index-defined-here"> <h3>${fc.headlingLocal}</h3> ${function(){const e=function(){const e=new Map,t=document.querySelectorAll("dfn:not([data-cite])");for(const n of t){if(!n.id)continue;const t=nn(n.textContent);(e.get(t)||e.set(t,[]).get(t)).push(n)}return[...e].sort(([e],[t])=>e.slice(e.search(/\w/)).localeCompare(t.slice(t.search(/\w/))))}();return Ht`<ul class="index"> ${e.map(([e,t])=>function(e,t){const n=(e,t,n)=>{const r="#"+e.id;return Ht`<li data-id=${e.id}> @@ -727,7 +866,7 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </ul>`}()} </section>`;e.append(n);const r=Ht`<section id="index-defined-elsewhere"> <h3>${fc.headingExternal}</h3> - ${function(){const e=[...wc().entries()].sort(([e],[t])=>e.localeCompare(t));return Ht`<ul class="index"> + ${function(){const e=[...yc().entries()].sort(([e],[t])=>e.localeCompare(t));return Ht`<ul class="index"> ${e.map(([e,t])=>Ht`<li data-spec="${e}"> ${gi(e)} defines the following: <ul> @@ -735,86 +874,86 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </ul> </li>`)} </ul>`}()} - </section>`;e.append(r);for(const e of r.querySelectorAll(".index-term"))pn(e,"index-term");Pn("toc",yc,{once:!0}),Pn("beforesave",$c)}});const Sc="core/contrib";var Cc=Object.freeze({__proto__:null,name:Sc,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void Sn("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",Sc)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Ht(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=en(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await cn(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return Sn("Error loading contributors from GitHub.",Sc),console.error(e),null}}}(t,n)}});var Ec=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{hn(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const Rc=["h2","h3","h4","h5","h6"],Tc=["h1",...Rc],Ac="core/structure",Pc=rn({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function Lc(e,t,{prefix:n=""}={}){let r=!1,o=0,s=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const i=Ht`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=s,r=!0);let e=a.isIntro?"":r?Ic(s-o+1):n+s;const c=e.split(".").length;if(1===c&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(s+=1,a.header.prepend(Ht`<bdi class="secno">${e} </bdi>`)),c<=t){const n=a.header.id||a.element.id,r=Nc(a.header,n),o=Lc(a.subsections,t,{prefix:e});o&&r.append(o),i.append(r)}}return i}function Ic(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function Dc(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!Rc.includes(o.localName))continue;const s=o.textContent;pn(e,null,s),r.push({element:e,header:o,title:s,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:Dc(e,{tocIntroductory:t})})}return r}function Nc(e,t){const n=Ht`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=hn(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{hn(e,"span").removeAttribute("id")}),Ht`<li class="tocline">${n}</li>`}var jc=Object.freeze({__proto__:null,name:Ac,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=Tc.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(bn(e,"section").length+1,6);e.localName!==t&&hn(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){Sn("`data-max-toc` must have a value between 0-6 (inclusive).",Ac,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=Lc(Dc(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Ht`<nav id="toc"></nav>`,n=Ht`<h2 class="introductory">${Pc.toc}</h2>`;pn(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Ht`<p role="navigation" id="back-to-top"> + </section>`;e.append(r);for(const e of r.querySelectorAll(".index-term"))pn(e,"index-term");Ln("toc",wc,{once:!0}),Ln("beforesave",$c)}});const _c="core/contrib";var Cc=Object.freeze({__proto__:null,name:_c,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void _n("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",_c)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Ht(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=en(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await cn(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return _n("Error loading contributors from GitHub.",_c),console.error(e),null}}}(t,n)}});var Ec=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{hn(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const Rc=["h2","h3","h4","h5","h6"],Tc=["h1",...Rc],Ac="core/structure",Lc=rn({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function Pc(e,t,{prefix:n=""}={}){let r=!1,o=0,s=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const i=Ht`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=s,r=!0);let e=a.isIntro?"":r?Ic(s-o+1):n+s;const c=e.split(".").length;if(1===c&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(s+=1,a.header.prepend(Ht`<bdi class="secno">${e} </bdi>`)),c<=t){const n=a.header.id||a.element.id,r=Nc(a.header,n),o=Pc(a.subsections,t,{prefix:e});o&&r.append(o),i.append(r)}}return i}function Ic(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function Dc(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!Rc.includes(o.localName))continue;const s=o.textContent;pn(e,null,s),r.push({element:e,header:o,title:s,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:Dc(e,{tocIntroductory:t})})}return r}function Nc(e,t){const n=Ht`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=hn(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{hn(e,"span").removeAttribute("id")}),Ht`<li class="tocline">${n}</li>`}var Oc=Object.freeze({__proto__:null,name:Ac,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=Tc.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(bn(e,"section").length+1,6);e.localName!==t&&hn(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){_n("`data-max-toc` must have a value between 0-6 (inclusive).",Ac,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=Pc(Dc(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Ht`<nav id="toc"></nav>`,n=Ht`<h2 class="introductory">${Lc.toc}</h2>`;pn(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Ht`<p role="navigation" id="back-to-top"> <a href="#title"><abbr title="Back to Top">↑</abbr></a> - </p>`;document.body.append(o)}(t)}An("toc")}});const Oc=rn({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var zc=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Ht`<p><em>${Oc.informative}</em></p>`)})}});var Wc=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(pn(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Ht` + </p>`;document.body.append(o)}(t)}An("toc")}});const jc=rn({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var zc=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Ht`<p><em>${jc.informative}</em></p>`)})}});var Wc=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(pn(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Ht` <a href="${"#"+t}" class="self-link" aria-label="§"></a> - `)}}});const Mc="core/caniuse",Uc=new Set(["and_chr","and_ff","and_uc","android","bb","chrome","edge","firefox","ie","ios_saf","op_mini","op_mob","opera","safari","samsung"]);async function Fc(e,t){const{feature:n,versions:r,browsers:o}=t,s=new URLSearchParams;s.set("feature",n),s.set("versions",r),Array.isArray(o)&&s.set("browsers",o.join(",")),s.set("format","html");const i=`${e}?${s.toString()}`,a=await fetch(i);if(!a.ok){const{status:e,statusText:t}=a;throw new Error(`Failed to get caniuse data: (${e}) ${t}`)}return await a.text()}var qc=Object.freeze({__proto__:null,name:Mc,prepare:async function(e){if(!e.caniuse)return;const t=function(e){const t={versions:4};if("string"==typeof e.caniuse)return{feature:e.caniuse,...t};const n={...t,...e.caniuse},{browsers:r}=n;if(Array.isArray(r)){const e=r.filter(e=>!Uc.has(e));if(e.length){Cn(`Ignoring invalid browser(s): ${e.map(e=>`"\`${e}\`"`).join(", ")} in [\`respecConfig.caniuse.browsers\`](https://github.com/w3c/respec/wiki/caniuse)`,Mc)}}return n}(e);if(e.caniuse=t,!t.feature)return;const n=await async function(){try{return(await Promise.resolve().then((function(){return Au}))).default}catch{return Wn("caniuse.css")}}();document.head.appendChild(Ht`<style class="removeOnSave"> - ${n} - </style>`);const r=t.apiURL||"https://respec.org/caniuse/";e.state[Mc]={fetchPromise:Fc(r,t)}},run:async function(e){const t=e.caniuse;if(!t?.feature)return;const n=new URL(t.feature,"https://caniuse.com/").href,r=document.querySelector(".head dl"),o=(async()=>{try{const t=await e.state[Mc].fetchPromise;return Ht`${{html:t}}`}catch(e){return Sn(`Couldn't find feature "${t.feature}" on caniuse.com.`,Mc,{hint:"Please check the feature key on [caniuse.com](https://caniuse.com)"}),console.error(e),Ht`<a href="${n}">caniuse.com</a>`}})(),s=Ht`<dt class="caniuse-title">Browser support:</dt> + `)}}});var Mc=String.raw`.caniuse-stats{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:baseline;cursor:pointer} +button.caniuse-cell{margin:1px 1px 0 0;border:none} +.caniuse-browser{position:relative} +@media print{ +.caniuse-cell.y::before{content:"✔️";padding:.5em} +.caniuse-cell.n::before{content:"❌";padding:.5em} +.caniuse-cell.a::before,.caniuse-cell.d::before,.caniuse-cell.p::before,.caniuse-cell.x::before{content:"⚠️";padding:.5em} +} +.caniuse-browser ul{display:none;margin:0;padding:0;list-style:none;position:absolute;left:0;z-index:2;background:#fff;margin-top:1px} +.caniuse-stats a[href]{white-space:nowrap;align-self:center;margin-left:.5em} +.caniuse-cell{display:flex;font-size:90%;height:.8cm;margin-right:1px;margin-top:0;min-width:3cm;overflow:visible;justify-content:center;align-items:center;--supported:#2a8436;--no-support:#c44230;--no-support-alt:#b43b2b;--partial:#807301;--partial-alt:#746c00;color:#fff;background:repeating-linear-gradient(var(--caniuse-angle,45deg),var(--caniuse-bg) 0,var(--caniuse-bg-alt) 1px,var(--caniuse-bg-alt) .4em,var(--caniuse-bg) calc(.25em + 1px),var(--caniuse-bg) .75em)} +li.caniuse-cell{margin-bottom:1px} +.caniuse-cell:focus{outline:0} +.caniuse-cell.y{background:var(--supported)} +.caniuse-cell.d,.caniuse-cell.n{--caniuse-angle:45deg;--caniuse-bg:var(--no-support);--caniuse-bg-alt:var(--no-support-alt)} +.caniuse-cell.d{--caniuse-angle:180deg} +.caniuse-cell.a,.caniuse-cell.p,.caniuse-cell.x{--caniuse-angle:90deg;--caniuse-bg:var(--partial);--caniuse-bg-alt:var(--partial-alt)} +.caniuse-stats .caniuse-browser:hover>ul,.caniuse-stats button:focus+ul{display:block}`;const Uc="core/caniuse",Fc=new Set(["and_chr","and_ff","and_uc","android","bb","chrome","edge","firefox","ie","ios_saf","op_mini","op_mob","opera","safari","samsung"]);async function qc(e,t){const{feature:n,versions:r,browsers:o}=t,s=new URLSearchParams;s.set("feature",n),s.set("versions",r),Array.isArray(o)&&s.set("browsers",o.join(",")),s.set("format","html");const i=`${e}?${s.toString()}`,a=await fetch(i);if(!a.ok){const{status:e,statusText:t}=a;throw new Error(`Failed to get caniuse data: (${e}) ${t}`)}return await a.text()}var Bc=Object.freeze({__proto__:null,name:Uc,prepare:function(e){if(!e.caniuse)return;const t=function(e){const t={versions:4};if("string"==typeof e.caniuse)return{feature:e.caniuse,...t};const n={...t,...e.caniuse},{browsers:r}=n;if(Array.isArray(r)){const e=r.filter(e=>!Fc.has(e));if(e.length){Cn(`Ignoring invalid browser(s): ${e.map(e=>`"\`${e}\`"`).join(", ")} in [\`respecConfig.caniuse.browsers\`](https://github.com/w3c/respec/wiki/caniuse)`,Uc)}}return n}(e);if(e.caniuse=t,!t.feature)return;document.head.appendChild(Ht`<style class="removeOnSave"> + ${Mc} + </style>`);const n=t.apiURL||"https://respec.org/caniuse/";e.state[Uc]={fetchPromise:qc(n,t)}},run:async function(e){const t=e.caniuse;if(!t?.feature)return;const n=new URL(t.feature,"https://caniuse.com/").href,r=document.querySelector(".head dl"),o=(async()=>{try{const t=await e.state[Uc].fetchPromise;return Ht`${{html:t}}`}catch(e){return _n(`Couldn't find feature "${t.feature}" on caniuse.com.`,Uc,{hint:"Please check the feature key on [caniuse.com](https://caniuse.com)"}),console.error(e),Ht`<a href="${n}">caniuse.com</a>`}})(),s=Ht`<dt class="caniuse-title">Browser support:</dt> <dd class="caniuse-stats"> ${{any:o,placeholder:"Fetching data from caniuse.com..."}} - </dd>`;r.append(...s.childNodes),await o,An("amend-user-config",{caniuse:t.feature}),Pn("beforesave",e=>{Ht.bind(e.querySelector(".caniuse-stats"))` - <a href="${n}">caniuse.com</a>`})}});const Bc="core/mdn-annotation",Hc="https://w3c.github.io/mdn-spec-links/",Gc={chrome:"Chrome",chrome_android:"Chrome Android",edge:"Edge",edge_mobile:"Edge Mobile",firefox:"Firefox",firefox_android:"Firefox Android",ie:"Internet Explorer",opera:"Opera",opera_android:"Opera Android",safari:"Safari",safari_ios:"Safari iOS",samsunginternet_android:"Samsung Internet",webview_android:"WebView Android"},Vc=rn({en:{inAllEngines:"This feature is in all major engines.",inSomeEngines:"This feature has limited support."},zh:{inAllEngines:"所有主要引擎均支持此特性。",inSomeEngines:"此功能支持有限。"}});function Zc(e){const t=e.closest("section");if(!t)return;const{previousElementSibling:n}=t;if(n&&n.classList.contains("mdn"))return n;const r=Ht`<aside class="mdn"></aside>`;return t.before(r),r}function Yc(e){const{name:t,slug:n,summary:r,support:o,engines:s}=e,i=n.slice(n.indexOf("/")+1),a="https://developer.mozilla.org/en-US/docs/Web/"+n,c="Expand MDN details for "+t,l=function(e){if(3===e.length)return Ht`<span title="${Vc.inAllEngines}">✅</span>`;if(e.length<2)return Ht`<span title="${Vc.inSomeEngines}">🚫</span>`;return Ht`<span> </span>`}(s);return Ht`<details> + </dd>`;r.append(...s.childNodes),await o,An("amend-user-config",{caniuse:t.feature}),Ln("beforesave",e=>{Ht.bind(e.querySelector(".caniuse-stats"))` + <a href="${n}">caniuse.com</a>`})}});var Hc=String.raw`.mdn{font-size:.75em;position:absolute;right:.3em;min-width:0;margin-top:3em} +.mdn details{width:100%;margin:1px 0;position:relative;z-index:10;box-sizing:border-box;padding:.4em;padding-top:0} +.mdn details[open]{min-width:25ch;max-width:32ch;background:#fff;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px;z-index:11;margin-bottom:.4em} +.mdn summary{text-align:right;cursor:default;margin-right:-.4em} +.mdn summary span{font-family:zillaslab,Palatino,"Palatino Linotype",serif;color:#fff;background-color:#000;display:inline-block;padding:3px} +.mdn a{display:inline-block;word-break:break-all} +.mdn p{margin:0} +.mdn .engines-all{color:#058b00} +.mdn .engines-some{color:#b00} +.mdn table{width:100%;font-size:.9em} +.mdn td{border:none} +.mdn td:nth-child(2){text-align:right} +.mdn .nosupportdata{font-style:italic;margin:0} +.mdn tr::before{content:"";display:table-cell;width:1.5em;height:1.5em;background:no-repeat center center/contain;font-size:.75em} +.mdn .no,.mdn .unknown{color:#ccc;filter:grayscale(100%)} +.mdn .no::before,.mdn .unknown::before{opacity:.5} +.mdn .chrome::before,.mdn .chrome_android::before{background-image:url(https://resources.whatwg.org/browser-logos/chrome.svg)} +.mdn .edge::before,.mdn .edge_mobile::before{background-image:url(https://resources.whatwg.org/browser-logos/edge.svg)} +.mdn .firefox::before,.mdn .firefox_android::before{background-image:url(https://resources.whatwg.org/browser-logos/firefox.png)} +.mdn .ie::before{background-image:url(https://resources.whatwg.org/browser-logos/ie.png)} +.mdn .opera::before,.mdn .opera_android::before{background-image:url(https://resources.whatwg.org/browser-logos/opera.svg)} +.mdn .safari::before{background-image:url(https://resources.whatwg.org/browser-logos/safari.png)} +.mdn .safari_ios::before{background-image:url(https://resources.whatwg.org/browser-logos/safari-ios.svg)} +.mdn .samsunginternet_android::before{background-image:url(https://resources.whatwg.org/browser-logos/samsung.svg)} +.mdn .webview_android::before{background-image:url(https://resources.whatwg.org/browser-logos/android-webview.png)}`;const Gc="core/mdn-annotation",Vc="https://w3c.github.io/mdn-spec-links/",Zc={chrome:"Chrome",chrome_android:"Chrome Android",edge:"Edge",edge_mobile:"Edge Mobile",firefox:"Firefox",firefox_android:"Firefox Android",ie:"Internet Explorer",opera:"Opera",opera_android:"Opera Android",safari:"Safari",safari_ios:"Safari iOS",samsunginternet_android:"Samsung Internet",webview_android:"WebView Android"},Yc=rn({en:{inAllEngines:"This feature is in all major engines.",inSomeEngines:"This feature has limited support."},zh:{inAllEngines:"所有主要引擎均支持此特性。",inSomeEngines:"此功能支持有限。"}});function Jc(e){const t=e.closest("section");if(!t)return;const{previousElementSibling:n}=t;if(n&&n.classList.contains("mdn"))return n;const r=Ht`<aside class="mdn"></aside>`;return t.before(r),r}function Kc(e){const{name:t,slug:n,summary:r,support:o,engines:s}=e,i=n.slice(n.indexOf("/")+1),a="https://developer.mozilla.org/en-US/docs/Web/"+n,c="Expand MDN details for "+t,l=function(e){if(3===e.length)return Ht`<span title="${Yc.inAllEngines}">✅</span>`;if(e.length<2)return Ht`<span title="${Yc.inSomeEngines}">🚫</span>`;return Ht`<span> </span>`}(s);return Ht`<details> <summary aria-label="${c}"><span>MDN</span>${l}</summary> <a title="${r}" href="${a}">${i}</a> - ${function(e){if(3===e.length)return Ht`<p class="engines-all">${Vc.inAllEngines}</p>`;if(e.length<2)return Ht`<p class="engines-some">${Vc.inSomeEngines}</p>`}(s)} + ${function(e){if(3===e.length)return Ht`<p class="engines-all">${Yc.inAllEngines}</p>`;if(e.length<2)return Ht`<p class="engines-some">${Yc.inSomeEngines}</p>`}(s)} ${o?function(e){function t(e,t,n){const r="Unknown"===t?"?":t,o=`${e} ${t.toLowerCase()}`;return Ht`<tr class="${o}"> - <td>${Gc[e]}</td> + <td>${Zc[e]}</td> <td>${n||r}</td> </tr>`}function n(e,n){if(n.version_removed)return t(e,"No","");const r=n.version_added;return"boolean"==typeof r?t(e,r?"Yes":"No",""):r?t(e,"Yes",r+"+"):t(e,"Unknown","")}return Ht`<table> - ${Object.keys(Gc).map(r=>e[r]?n(r,e[r]):t(r,"Unknown",""))} + ${Object.keys(Zc).map(r=>e[r]?n(r,e[r]):t(r,"Unknown",""))} </table>`}(o):Ht`<p class="nosupportdata">No support data.</p>`} - </details>`}var Jc=Object.freeze({__proto__:null,name:Bc,run:async function(e){const t=function(e){const{shortName:t,mdn:n}=e;if(!n)return;return"string"==typeof n?n:n.key||t}(e);if(!t)return;const n=await async function(e,t){const{baseJsonPath:n=Hc,maxAge:r=864e5}=t,o=new URL(e+".json",n).href,s=await cn(o,r);if(404===s.status){return void Sn(`Could not find MDN data associated with key "${e}".`,Bc,{hint:"Please add a valid key to `respecConfig.mdn`"})}return await s.json()}(t,e.mdn);if(!n)return;const r=document.createElement("style");r.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Pu}))).default}catch{return Wn("mdn-annotation.css")}}(),document.head.append(r);for(const e of function(e){return[...document.body.querySelectorAll("[id]:not(script)")].filter(({id:t})=>Array.isArray(e[t]))}(n)){const t=n[e.id],r=Zc(e);if(r)for(const e of t)r.append(Yc(e))}}});const Kc=new Map([["text/html","html"],["application/xml","xml"]]);function Xc(e,t=document){const n=Kc.get(e);if(!n){const t=[...Kc.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=function(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;kn(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Qt(r);const o=e.createDocumentFragment(),s=e.querySelector("meta[name='viewport']");s&&t.firstChild!==s&&o.appendChild(s);let i=e.querySelector("meta[charset], meta[content*='charset=']");i||(i=Ht`<meta charset="utf-8" />`);o.appendChild(i);const a="ReSpec "+(window.respecVersion||"Developer Channel"),c=Ht` + </details>`}var Xc=Object.freeze({__proto__:null,name:Gc,run:async function(e){const t=function(e){const{shortName:t,mdn:n}=e;if(!n)return;return"string"==typeof n?n:n.key||t}(e);if(!t)return;const n=await async function(e,t){const{baseJsonPath:n=Vc,maxAge:r=864e5}=t,o=new URL(e+".json",n).href,s=await cn(o,r);if(404===s.status){return void _n(`Could not find MDN data associated with key "${e}".`,Gc,{hint:"Please add a valid key to `respecConfig.mdn`"})}return await s.json()}(t,e.mdn);if(!n)return;const r=document.createElement("style");r.textContent=Hc,document.head.append(r);for(const e of function(e){return[...document.body.querySelectorAll("[id]:not(script)")].filter(({id:t})=>Array.isArray(e[t]))}(n)){const t=n[e.id],r=Jc(e);if(r)for(const e of t)r.append(Kc(e))}}});const Qc=new Map([["text/html","html"],["application/xml","xml"]]);function el(e,t=document){const n=Qc.get(e);if(!n){const t=[...Qc.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=function(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;kn(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Qt(r);const o=e.createDocumentFragment(),s=e.querySelector("meta[name='viewport']");s&&t.firstChild!==s&&o.appendChild(s);let i=e.querySelector("meta[charset], meta[content*='charset=']");i||(i=Ht`<meta charset="utf-8" />`);o.appendChild(i);const a="ReSpec "+(window.respecVersion||"Developer Channel"),c=Ht` <meta name="generator" content="${a}" /> - `;o.appendChild(c),t.prepend(o),An("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}n("core/exporter",{rsDocToDataURL:Xc});const Qc="ui/save-html",el=rn({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),tl=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return Xc(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return Xc(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function nl(e){const{id:t,href:n,fileName:r,title:o,type:s}=e;return Ht`<a + `;o.appendChild(c),t.prepend(o),An("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}n("core/exporter",{rsDocToDataURL:el});const tl="ui/save-html",nl=rn({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),rl=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return el(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return el(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function ol(e){const{id:t,href:n,fileName:r,title:o,type:s}=e;return Ht`<a href="${n}" id="${t}" download="${r}" type="${s}" class="respec-save-button" - onclick=${()=>fr.closeModal()} + onclick=${()=>pr.closeModal()} >${o}</a - >`}const rl={async show(e){await document.respec.ready;const t=Ht`<div class="respec-save-buttons"> - ${tl.map(nl)} - </div>`;fr.freshModal(el.save_snapshot,t,e)}},ol="download"in HTMLAnchorElement.prototype;let sl;ol&&(sl=fr.addCommand(el.save_snapshot,(function(){if(!ol)return;rl.show(sl)}),"Ctrl+Shift+Alt+S","💾"));var il=Object.freeze({__proto__:null,name:Qc,exportDocument:function(e,t){return Cn("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",Qc,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),Xc(t)}});const al=rn({en:{search_specref:"Search Specref"},nl:{search_specref:"Doorzoek Specref"},ja:{search_specref:"仕様検索"},de:{search_specref:"Spezifikationen durchsuchen"},zh:{search_specref:"搜索 Specref"}}),cl=fr.addCommand(al.search_specref,(function(){hl(),fr.freshModal(al.search_specref,ll,cl);ll.querySelector("input[type=search]").focus()}),"Ctrl+Shift+Alt+space","🔎"),ll=document.createElement("form"),ul=Ht.bind(ll),dl=Ht.bind(document.createElement("div"));function pl([e,t]){return Ht.wire(t)` - <dt> - [${e}] - </dt> - <dd>${yi(t)}</dd> - `}ll.id="specref-ui",ll.addEventListener("submit",async e=>{e.preventDefault();const{searchBox:t}=ll,n=t.value;if(!n)return void t.focus();hl({state:"Searching Specref…"});const r=new URL("https://specref.herokuapp.com/search-refs");r.searchParams.set("q",n);const o=new URL("https://specref.herokuapp.com/reverse-lookup");o.searchParams.set("urls",n);try{const e=performance.now(),s=await Promise.all([fetch(r).then(e=>e.json()),fetch(o).then(e=>e.json())]),{checked:i}=ll.includeVersions,a=function({includeVersions:e=!1}={}){return(...t)=>{const n=Object.assign({},...t),r=new Map(Object.entries(n));return Array.from(r).filter(([,e])=>e.aliasOf).map(([e])=>e).reduce((e,t)=>e.delete(t)&&e,r),e||Array.from(r.values()).filter(e=>"object"==typeof e&&"versions"in e).flat().forEach(e=>{r.delete(e)}),Array.from(r).filter(([,e])=>"object"!=typeof e).forEach(([e])=>r.delete(e)),r}}({includeVersions:i});hl({query:n,results:a(...s),state:"",timeTaken:Math.round(performance.now()-e)/1e3})}catch(e){console.error(e),hl({state:"Error! Couldn't do search."})}finally{t.focus()}});const fl=Ht.wire()` - <header> - <p> - An Open-Source, Community-Maintained Database of - Web Standards & Related References. - </p> - </header> - <div class="searchcomponent"> - <input - name="searchBox" - type="search" - aria-label="Search" - autocomplete="off" - placeholder="Keywords, titles, authors, urls…"> - <button - type="submit"> - Search - </button> - <label> - <input type="checkbox" name="includeVersions"> Include all versions. - </label> - </div> -`;function hl({state:e="",results:t,timeTaken:n,query:r}={}){t?ul` - <div>${fl}</div> - <p class="state" hidden="${!e}"> - ${e} - </p> - <section hidden="${!t}" aria-live="polite">${t?function(e,t,n){if(!e.size)return dl` - <p class="state"> - Your search - <strong> ${t} </strong> - - did not match any references. - </p> - `;const r=Array.from(e).slice(0,99).map(pl).reduce((e,t)=>e.concat(t),[]);return dl` - <p class="result-stats"> - ${e.size} results (${n} seconds). - ${e.size>99?"First 100 results.":""} - </p> - <dl class="specref-results">${r}</dl> - `}(t,r,n):[]}</section> - `:ul`<div>${fl}</div>`}var ml=Object.freeze({__proto__:null});const gl="https://respec.org/xref/",bl={en:{title:"Search definitions"},ja:{title:"定義検索"},de:{title:"Definitionen durchsuchen"},zh:{title:"搜索定义"}},yl=bl[s in bl?s:"en"],wl=fr.addCommand(yl.title,(function(){const e=Ht` - <iframe id="xref-ui" src="${gl}" onload=${e=>e.target.classList.add("ready")}></iframe> - <a href="${gl}" target="_blank">Open Search UI in a new tab</a> - `;fr.freshModal(yl.title,e,wl)}),"Ctrl+Shift+Alt+x","📚");var vl=Object.freeze({__proto__:null});const kl=rn({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const xl=document.createElement("div"),$l=Ht.bind(xl),_l=fr.addCommand(`${kl.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(Sl).forEach(t=>{e.push(t)});$l` + >`}const sl={async show(e){await document.respec.ready;const t=Ht`<div class="respec-save-buttons"> + ${rl.map(ol)} + </div>`;pr.freshModal(nl.save_snapshot,t,e)}},il="download"in HTMLAnchorElement.prototype;let al;il&&(al=pr.addCommand(nl.save_snapshot,(function(){if(!il)return;sl.show(al)}),"Ctrl+Shift+Alt+S","💾"));var cl=Object.freeze({__proto__:null,name:tl,exportDocument:function(e,t){return Cn("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",tl,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),el(t)}});const ll="https://respec.org/specref/",ul=rn({en:{search_specref:"Search Specref"},nl:{search_specref:"Doorzoek Specref"},ja:{search_specref:"仕様検索"},de:{search_specref:"Spezifikationen durchsuchen"},zh:{search_specref:"搜索 Specref"}}),dl=pr.addCommand(ul.search_specref,(function(){const e=Ht` + <iframe class="respec-iframe" src="${ll}" onload=${e=>e.target.classList.add("ready")}></iframe> + <a href="${ll}" target="_blank">Open Search UI in a new tab</a> + `;pr.freshModal(ul.search_specref,e,dl)}),"Ctrl+Shift+Alt+space","🔎");var pl=Object.freeze({__proto__:null});const fl="https://respec.org/xref/",hl={en:{title:"Search definitions"},ja:{title:"定義検索"},de:{title:"Definitionen durchsuchen"},zh:{title:"搜索定义"}},ml=hl[s in hl?s:"en"],gl=pr.addCommand(ml.title,(function(){const e=Ht` + <iframe class="respec-iframe" src="${fl}" onload="${e=>e.target.classList.add("ready")}"></iframe> + <a href="${fl}" target="_blank">Open Search UI in a new tab</a> + `;pr.freshModal(ml.title,e,gl)}),"Ctrl+Shift+Alt+x","📚");var bl=Object.freeze({__proto__:null});const wl=rn({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const yl=document.createElement("div"),vl=Ht.bind(yl),kl=pr.addCommand(`${wl.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(xl).forEach(t=>{e.push(t)});vl` <p> ReSpec is a document production toolchain, with a notable focus on W3C specifications. </p> @@ -838,26 +977,65 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e </thead> <tbody>${e}</tbody> </table> -`,fr.freshModal(`${kl.about_respec} - ${window.respecVersion}`,xl,_l)}),"Ctrl+Shift+Alt+A","ℹ️");function Sl({name:e,duration:t}){return Ht` +`,pr.freshModal(`${wl.about_respec} - ${window.respecVersion}`,yl,kl)}),"Ctrl+Shift+Alt+A","ℹ️");function xl({name:e,duration:t}){return Ht` <tr> <td><a href="${`https://github.com/w3c/respec/blob/develop/src/${e}.js`}">${e}</a></td> <td>${t}</td> </tr> - `}var Cl=Object.freeze({__proto__:null});var El=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});const Rl="w3c/seo";function Tl({name:e,url:t,mailto:n,company:r,companyURL:o}){const s={type:"Person",name:e,url:t,"foaf:mbox":n};return(r||o)&&(s.worksFor={name:r,url:o}),s}function Al(e){const{href:t,title:n,href:r}=e,o={id:t,type:"TechArticle",name:n,url:r};return e.authors&&(o.creator=e.authors.map(e=>({name:e}))),e.rawDate&&(o.publishedDate=e.rawDate),e.isbn&&(o.identifier=e.isbn),e.publisher&&(o.publisher={name:e.publisher}),o}var Pl=Object.freeze({__proto__:null,name:Rl,run:async function(e){if(!e.canonicalURI)switch(e.specStatus){case"CG-DRAFT":case"BG-DRAFT":case"unofficial":return}const t=e.shortName?`https://www.w3.org/TR/${e.shortName}/`:null;switch(e.canonicalURI){case"edDraft":if(e.edDraftURI)e.canonicalURI=new URL(e.edDraftURI,document.location.href).href;else{Cn("Canonical URI set to edDraft, but no edDraftURI is set in configuration",Rl),e.canonicalURI=null}break;case"TR":if(t)e.canonicalURI=t;else{Cn("Canonical URI set to TR, but no shortName is set in configuration",Rl),e.canonicalURI=null}break;default:if(e.canonicalURI)try{e.canonicalURI=new URL(e.canonicalURI,document.location.href).href}catch(t){Cn("CanonicalURI is an invalid URL: "+t.message,Rl),e.canonicalURI=null}else t&&(e.canonicalURI=t)}if(e.canonicalURI){const t=document.createElement("link");t.setAttribute("rel","canonical"),t.setAttribute("href",e.canonicalURI),document.head.appendChild(t)}e.doJsonLd&&await async function(e,t){const n=["TechArticle"];e.rdfStatus&&n.push(e.rdfStatus);const r={"@context":["http://schema.org",{"@vocab":"http://schema.org/","@language":t.documentElement.lang||"en",w3p:"http://www.w3.org/2001/02pd/rec54#",foaf:"http://xmlns.com/foaf/0.1/",datePublished:{"@type":"http://www.w3.org/2001/XMLSchema#date"},inLanguage:{"@language":null},isBasedOn:{"@type":"@id"},license:{"@type":"@id"}}],id:e.canonicalURI||e.thisVersion,type:n,name:document.title,inLanguage:t.documentElement.lang||"en",license:e.licenseInfo.url,datePublished:e.dashDate,copyrightHolder:{name:"World Wide Web Consortium",url:"https://www.w3.org/"},discussionUrl:e.issueBase,alternativeHeadline:e.subtitle,isBasedOn:e.prevVersion};if(e.additionalCopyrightHolders){const t=Array.isArray(e.additionalCopyrightHolders)?e.additionalCopyrightHolders:[e.additionalCopyrightHolders];r.copyrightHolder=[r.copyrightHolder,...t.map(e=>({name:e}))]}const o=t.head.querySelector("meta[name=description]");o&&(r.description=o.content);e.editors&&(r.editor=e.editors.map(Tl));e.authors&&(r.contributor=e.authors.map(Tl));const s=[...e.normativeReferences,...e.informativeReferences],i=await Promise.all(s.map(e=>ii(e)));r.citation=i.filter(e=>"object"==typeof e).map(Al);const a=t.createElement("script");a.type="application/ld+json",a.textContent=JSON.stringify(r,null,2),t.head.appendChild(a)}(e,document)}});const Ll=Xt({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(Ll);const Il=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return Lu}))).default}catch{return zn("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",Il.then(e=>({worker:e})));const Dl=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight"),Nl=async function(){try{return(await Promise.resolve().then((function(){return Iu}))).default}catch{return Wn("highlight.css")}}();async function jl(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Dl(),languages:t},r=await Il;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(s){const{data:{id:i,language:a,value:c}}=s;i===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:c}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:s}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${s}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=s,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Ol=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(jl),r=await Nl;document.head.appendChild(Ht`<style> - ${r} - </style>`),await Promise.all(n)}});const zl=rn({en:{missing_test_suite_uri:"Found tests in your spec, but missing '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.",tests:"tests",test:"test"},ja:{missing_test_suite_uri:"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.",tests:"テスト",test:"テスト"},de:{missing_test_suite_uri:"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.",tests:"Tests",test:"Test"},zh:{missing_test_suite_uri:"本规范中包含测试,但在 ReSpec 配置中缺少 '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。",tests:"测试",test:"测试"}}),Wl="core/data-tests";function Ml(e){const t=[],[n]=new URL(e).pathname.split("/").reverse(),r=n.split(".");let[o]=r;if(r.find(e=>"https"===e)){const e=document.createElement("span");e.textContent="🔒",e.setAttribute("aria-label","requires a secure connection"),e.setAttribute("title","Test requires HTTPS"),o=o.replace(".https",""),t.push(e)}if(o.split(".").join("-").split("-").find(e=>"manual"===e)){const e=document.createElement("span");e.textContent="💪",e.setAttribute("aria-label","the test must be run manually"),e.setAttribute("title","Manual test"),o=o.replace("-manual",""),t.push(e)}return Ht` + `}var $l=Object.freeze({__proto__:null});var Sl=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});const _l="w3c/seo";function Cl({name:e,url:t,mailto:n,company:r,companyURL:o}){const s={type:"Person",name:e,url:t,"foaf:mbox":n};return(r||o)&&(s.worksFor={name:r,url:o}),s}function El(e){const{href:t,title:n,href:r}=e,o={id:t,type:"TechArticle",name:n,url:r};return e.authors&&(o.creator=e.authors.map(e=>({name:e}))),e.rawDate&&(o.publishedDate=e.rawDate),e.isbn&&(o.identifier=e.isbn),e.publisher&&(o.publisher={name:e.publisher}),o}var Rl=Object.freeze({__proto__:null,name:_l,run:async function(e){if(!e.canonicalURI)switch(e.specStatus){case"CG-DRAFT":case"BG-DRAFT":case"unofficial":return}const t=e.shortName?`https://www.w3.org/TR/${e.shortName}/`:null;switch(e.canonicalURI){case"edDraft":if(e.edDraftURI)e.canonicalURI=new URL(e.edDraftURI,document.location.href).href;else{Cn("Canonical URI set to edDraft, but no edDraftURI is set in configuration",_l),e.canonicalURI=null}break;case"TR":if(t)e.canonicalURI=t;else{Cn("Canonical URI set to TR, but no shortName is set in configuration",_l),e.canonicalURI=null}break;default:if(e.canonicalURI)try{e.canonicalURI=new URL(e.canonicalURI,document.location.href).href}catch(t){Cn("CanonicalURI is an invalid URL: "+t.message,_l),e.canonicalURI=null}else t&&(e.canonicalURI=t)}if(e.canonicalURI){const t=document.createElement("link");t.setAttribute("rel","canonical"),t.setAttribute("href",e.canonicalURI),document.head.appendChild(t)}e.doJsonLd&&await async function(e,t){const n=["TechArticle"];e.rdfStatus&&n.push(e.rdfStatus);const r={"@context":["http://schema.org",{"@vocab":"http://schema.org/","@language":t.documentElement.lang||"en",w3p:"http://www.w3.org/2001/02pd/rec54#",foaf:"http://xmlns.com/foaf/0.1/",datePublished:{"@type":"http://www.w3.org/2001/XMLSchema#date"},inLanguage:{"@language":null},isBasedOn:{"@type":"@id"},license:{"@type":"@id"}}],id:e.canonicalURI||e.thisVersion,type:n,name:document.title,inLanguage:t.documentElement.lang||"en",license:e.licenseInfo.url,datePublished:e.dashDate,copyrightHolder:{name:"World Wide Web Consortium",url:"https://www.w3.org/"},discussionUrl:e.issueBase,alternativeHeadline:e.subtitle,isBasedOn:e.prevVersion};if(e.additionalCopyrightHolders){const t=Array.isArray(e.additionalCopyrightHolders)?e.additionalCopyrightHolders:[e.additionalCopyrightHolders];r.copyrightHolder=[r.copyrightHolder,...t.map(e=>({name:e}))]}const o=t.head.querySelector("meta[name=description]");o&&(r.description=o.content);e.editors&&(r.editor=e.editors.map(Cl));e.authors&&(r.contributor=e.authors.map(Cl));const s=[...e.normativeReferences,...e.informativeReferences],i=await Promise.all(s.map(e=>ai(e)));r.citation=i.filter(e=>"object"==typeof e).map(El);const a=t.createElement("script");a.type="application/ld+json",a.textContent=JSON.stringify(r,null,2),t.head.appendChild(a)}(e,document)}});var Tl=String.raw`.hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa} +.hljs-comment,.hljs-quote{color:#717277;font-style:italic} +.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4} +.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#ca4706;font-weight:700} +.hljs-literal{color:#0b76c5} +.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#42803c} +.hljs-built_in,.hljs-class .hljs-title{color:#9a6a01} +.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801} +.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#336ae3} +.hljs-emphasis{font-style:italic} +.hljs-strong{font-weight:700} +.hljs-link{text-decoration:underline}`;async function Al(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-w3c.js",document.baseURI).href));return await t.text()}const Ll=Xt({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(Ll);const Pl=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return $u}))).default}catch{return Al("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",Pl.then(e=>({worker:e})));const Il=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight");async function Dl(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Il(),languages:t},r=await Pl;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(s){const{data:{id:i,language:a,value:c}}=s;i===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:c}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:s}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${s}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=s,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Nl=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Dl);document.head.appendChild(Ht`<style> + ${Tl} + </style>`),await Promise.all(n)}});const Ol=rn({en:{missing_test_suite_uri:"Found tests in your spec, but missing '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.",tests:"tests",test:"test"},ja:{missing_test_suite_uri:"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.",tests:"テスト",test:"テスト"},de:{missing_test_suite_uri:"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.",tests:"Tests",test:"Test"},zh:{missing_test_suite_uri:"本规范中包含测试,但在 ReSpec 配置中缺少 '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。",tests:"测试",test:"测试"}}),jl="core/data-tests";function zl(e){const t=[],[n]=new URL(e).pathname.split("/").reverse(),r=n.split(".");let[o]=r;if(r.find(e=>"https"===e)){const e=document.createElement("span");e.textContent="🔒",e.setAttribute("aria-label","requires a secure connection"),e.setAttribute("title","Test requires HTTPS"),o=o.replace(".https",""),t.push(e)}if(o.split(".").join("-").split("-").find(e=>"manual"===e)){const e=document.createElement("span");e.textContent="💪",e.setAttribute("aria-label","the test must be run manually"),e.setAttribute("title","Manual test"),o=o.replace("-manual",""),t.push(e)}return Ht` <li> <a href="${e}">${o}</a> ${t} </li> - `}function Ul(e,t){return e.map(e=>{try{return new URL(e,t).href}catch{Cn("Bad URI: "+e,Wl)}}).filter(e=>e)}function Fl(e,t){const n=e.filter((e,t,n)=>n.indexOf(e)!==t);if(n.length){const e="Duplicate tests found",r='To fix, remove duplicates from "data-tests": '+n.map(e=>new URL(e).pathname).join(", ");Cn(e,Wl,{hint:r,elements:[t]})}}function ql(e){const t=[...new Set(e)];return Ht` + `}function Wl(e,t){return e.map(e=>{try{return new URL(e,t).href}catch{Cn("Bad URI: "+e,jl)}}).filter(e=>e)}function Ml(e,t){const n=e.filter((e,t,n)=>n.indexOf(e)!==t);if(n.length){const e="Duplicate tests found",r='To fix, remove duplicates from "data-tests": '+n.map(e=>new URL(e).pathname).join(", ");Cn(e,jl,{hint:r,elements:[t]})}}function Ul(e){const t=[...new Set(e)];return Ht` <details class="respec-tests-details removeOnSave"> <summary>tests: ${t.length}</summary> <ul> - ${t.map(Ml)} + ${t.map(zl)} </ul> </details> - `}var Bl=Object.freeze({__proto__:null,name:Wl,run:function(e){const t=[...document.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);if(t.length)if(e.testSuiteURI)for(const n of t){const t=Ul(n.dataset.tests.split(/,/gm).map(e=>e.trim()),e.testSuiteURI);Fl(t,n);const r=ql(t);n.append(r)}else Sn(zl.missing_test_suite_uri,Wl)}});const Hl="core/list-sorter";function Gl(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function Vl(e,t){return[...e.querySelectorAll(":scope > li")].sort(Gl(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function Zl(e,t){return[...e.querySelectorAll(":scope > dt")].sort(Gl(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:s}=t;for(;s&&s.nextSibling;){o.appendChild(s.cloneNode(!0));const{nodeType:e,nodeName:t}=s.nextSibling;if(e===n&&t===r)break;s=s.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var Yl=Object.freeze({__proto__:null,name:Hl,sortListItems:Vl,sortDefinitionTerms:Zl,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=Zl(t,n);break;case"ol":case"ul":e=Vl(t,n);break;default:Cn(`ReSpec can't sort ${t.localName} elements.`,Hl,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});const Jl=async function(){try{return(await Promise.resolve().then((function(){return Du}))).default}catch{return Wn("var.css")}}();function Kl(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=nn(e.textContent),n=e.closest("section"),r=Ql(e),o=[...n.querySelectorAll("var")].filter(e=>nn(e.textContent)===t&&e.closest("section")===n),s=o[0].classList.contains("respec-hl");if(Xl.set(r,s),s)return o.forEach(e=>eu(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=Ql(t);n.forEach(t=>eu(t,e)),[...Xl.keys()].forEach(e=>Xl.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const Xl=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function Ql(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===Xl.get("respec-hl-c1")?"respec-hl-c1":[...Xl.keys()].find(e=>Xl.get(e))||"respec-hl-c1"}function eu(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var tu=Object.freeze({__proto__:null,name:"core/highlight-vars",run:async function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=await Jl,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",Kl)),Pn("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(eu)})}});function nu(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Ht` + `}var Fl=Object.freeze({__proto__:null,name:jl,run:function(e){const t=[...document.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);if(t.length)if(e.testSuiteURI)for(const n of t){const t=Wl(n.dataset.tests.split(/,/gm).map(e=>e.trim()),e.testSuiteURI);Ml(t,n);const r=Ul(t);n.append(r)}else _n(Ol.missing_test_suite_uri,jl)}});const ql="core/list-sorter";function Bl(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function Hl(e,t){return[...e.querySelectorAll(":scope > li")].sort(Bl(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function Gl(e,t){return[...e.querySelectorAll(":scope > dt")].sort(Bl(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:s}=t;for(;s&&s.nextSibling;){o.appendChild(s.cloneNode(!0));const{nodeType:e,nodeName:t}=s.nextSibling;if(e===n&&t===r)break;s=s.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var Vl=Object.freeze({__proto__:null,name:ql,sortListItems:Hl,sortDefinitionTerms:Gl,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=Gl(t,n);break;case"ol":case"ul":e=Hl(t,n);break;default:Cn(`ReSpec can't sort ${t.localName} elements.`,ql,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});var Zl=String.raw`var:hover{text-decoration:underline;cursor:pointer} +var.respec-hl{color:var(--color,#000);background-color:var(--bg-color);box-shadow:0 0 0 2px var(--bg-color)} +var.respec-hl-c1{--bg-color:#f4d200} +var.respec-hl-c2{--bg-color:#ff87a2} +var.respec-hl-c3{--bg-color:#96e885} +var.respec-hl-c4{--bg-color:#3eeed2} +var.respec-hl-c5{--bg-color:#eacfb6} +var.respec-hl-c6{--bg-color:#82ddff} +var.respec-hl-c7{--bg-color:#ffbcf2} +@media print{ +var.respec-hl{background:0 0;color:#000;box-shadow:unset} +}`;function Yl(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=nn(e.textContent),n=e.closest("section"),r=Kl(e),o=[...n.querySelectorAll("var")].filter(e=>nn(e.textContent)===t&&e.closest("section")===n),s=o[0].classList.contains("respec-hl");if(Jl.set(r,s),s)return o.forEach(e=>Xl(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=Kl(t);n.forEach(t=>Xl(t,e)),[...Jl.keys()].forEach(e=>Jl.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const Jl=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function Kl(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===Jl.get("respec-hl-c1")?"respec-hl-c1":[...Jl.keys()].find(e=>Jl.get(e))||"respec-hl-c1"}function Xl(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var Ql=Object.freeze({__proto__:null,name:"core/highlight-vars",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=Zl,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",Yl)),Ln("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(Xl)})}});var eu=String.raw`dfn{cursor:pointer} +.dfn-panel{position:absolute;z-index:35;min-width:300px;max-width:500px;padding:.5em .75em;margin-top:.6em;font:small Helvetica Neue,sans-serif,Droid Sans Fallback;background:#fff;color:#000;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px} +.dfn-panel:not(.docked)>.caret{position:absolute;top:-9px} +.dfn-panel:not(.docked)>.caret::after,.dfn-panel:not(.docked)>.caret::before{content:"";position:absolute;border:10px solid transparent;border-top:0;border-bottom:10px solid #fff;top:0} +.dfn-panel:not(.docked)>.caret::before{border-bottom:9px solid #a2a9b1} +.dfn-panel *{margin:0} +.dfn-panel b{display:block;color:#000;margin-top:.25em} +.dfn-panel ul a[href]{color:#333} +.dfn-panel>div{display:flex} +.dfn-panel a.self-link{font-weight:700;margin-right:auto} +.dfn-panel .marker{padding:.1em;margin-left:.5em;border-radius:.2em;text-align:center;white-space:nowrap;font-size:90%;color:#040b1c} +.dfn-panel .marker.dfn-exported{background:#d1edfd;box-shadow:0 0 0 .125em #1ca5f940} +.dfn-panel .marker.idl-block{background:#8ccbf2;box-shadow:0 0 0 .125em #0670b161} +.dfn-panel a:not(:hover){text-decoration:none!important;border-bottom:none!important} +.dfn-panel a[href]:hover{border-bottom-width:1px} +.dfn-panel ul{padding:0} +.dfn-panel li{margin-left:1em} +.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}`;function tu(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Ht` <aside class="dfn-panel" id="${o}" hidden> <span class="caret"></span> <div> @@ -882,11 +1060,15 @@ window.respecVersion="26.4.0",function(){"use strict";window.addEventListener("e ${[...n].map(o)} </ul>`}(t,r)} </aside> - `}var ru=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return Nu}))).default}catch{return Wn("dfn-panel.css")}}();document.head.insertBefore(Ht`<style> - ${e} - </style>`,document.querySelector("link"));const t=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),n=document.createDocumentFragment();for(const e of t)n.append(nu(e));document.body.append(n);const r=document.createElement("script");r.id="respec-dfn-panel",r.textContent=await async function(){try{return(await Promise.resolve().then((function(){return ju}))).default}catch{return zn("./src/core/dfn-panel.runtime.js")}}(),document.body.append(r)}});const ou=async function(){try{return(await Promise.resolve().then((function(){return Ou}))).default}catch{return Wn("datatype.css")}}();var su=Object.freeze({__proto__:null,name:"core/data-type",run:async function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=await ou,document.head.appendChild(t);let n=null;const r=new Map,o=document.querySelectorAll("section var");for(const e of o){const t=e.closest("section");if(n!==t&&(n=t,r.clear()),e.dataset.type){r.set(e.textContent.trim(),e.dataset.type);continue}const o=r.get(e.textContent.trim());o&&(e.dataset.type=o)}}});const iu=async function(){try{return(await Promise.resolve().then((function(){return zu}))).default}catch{return Wn("algorithms.css")}}();var au=Object.freeze({__proto__:null,name:"core/algorithms",run:async function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=await iu,document.head.appendChild(e)}}});const cu="core/anchor-expander";function lu(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void Sn(`Found matching element "${t}", but it has no title or marker.`,cu,{title:"Missing title.",elements:[n]})}const o=vn(r);n.append(...o.childNodes),n.classList.add("box-ref")}function uu(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void Sn(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,cu,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...vn(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const s=r.querySelector(".fig-title");!n.hasAttribute("title")&&s&&(n.title=nn(s.textContent))}function du(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)pu(r,n),fu(r,n);else{n.textContent=n.getAttribute("href");Sn("Found matching section, but the section was lacking a heading element.",cu,{title:`No matching id in document: "${t}".`,elements:[n]})}}function pu(e,t){const n=e.querySelector(".self-link"),r=[...vn(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=hn(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function fu(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var hu=Object.freeze({__proto__:null,name:cu,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":pu(n,t);break;case"section":du(n,e,t);break;case"figure":uu(n,e,t);break;case"aside":case"div":lu(n,e,t);break;default:t.textContent=t.getAttribute("href");Sn("ReSpec doesn't support expanding this kind of reference.",cu,{title:`Can't expand "#${e}".`,elements:[t]})}fu(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");Sn(`Couldn't expand inline reference. The id "${e}" is not in the document.`,cu,{title:`No matching id in document: ${e}.`,elements:[t]})}}}});const mu="rs-changelog",gu=class extends HTMLElement{constructor(){super(),this.props={from:this.getAttribute("from"),to:this.getAttribute("to")||"HEAD",filter:"function"==typeof window[this.getAttribute("filter")]?window[this.getAttribute("filter")]:()=>!0}}connectedCallback(){const{from:e,to:t,filter:n}=this.props;Ht.bind(this)` + `}var nu=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){document.head.insertBefore(Ht`<style> + ${eu} + </style>`,document.querySelector("link"));const e=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),t=document.createDocumentFragment();for(const n of e)t.append(tu(n));document.body.append(t);const n=document.createElement("script");n.id="respec-dfn-panel",n.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Su}))).default}catch{return Al("./src/core/dfn-panel.runtime.js")}}(),document.body.append(n)}});var ru=String.raw`var{position:relative;cursor:pointer} +var[data-type]::after,var[data-type]::before{position:absolute;left:50%;top:-6px;opacity:0;transition:opacity .4s;pointer-events:none} +var[data-type]::before{content:"";transform:translateX(-50%);border-width:4px 6px 0 6px;border-style:solid;border-color:transparent;border-top-color:#000} +var[data-type]::after{content:attr(data-type);transform:translateX(-50%) translateY(-100%);background:#000;text-align:center;font-family:"Dank Mono","Fira Code",monospace;font-style:normal;padding:6px;border-radius:3px;color:#daca88;text-indent:0;font-weight:400} +var[data-type]:hover::after,var[data-type]:hover::before{opacity:1}`;var ou=Object.freeze({__proto__:null,name:"core/data-type",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=ru,document.head.appendChild(t);let n=null;const r=new Map,o=document.querySelectorAll("section var");for(const e of o){const t=e.closest("section");if(n!==t&&(n=t,r.clear()),e.dataset.type){r.set(e.textContent.trim(),e.dataset.type);continue}const o=r.get(e.textContent.trim());o&&(e.dataset.type=o)}}});var su=String.raw`.assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}`;var iu=Object.freeze({__proto__:null,name:"core/algorithms",run:function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=su,document.head.appendChild(e)}}});const au="core/anchor-expander";function cu(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void _n(`Found matching element "${t}", but it has no title or marker.`,au,{title:"Missing title.",elements:[n]})}const o=vn(r);n.append(...o.childNodes),n.classList.add("box-ref")}function lu(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void _n(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,au,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...vn(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const s=r.querySelector(".fig-title");!n.hasAttribute("title")&&s&&(n.title=nn(s.textContent))}function uu(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)du(r,n),pu(r,n);else{n.textContent=n.getAttribute("href");_n("Found matching section, but the section was lacking a heading element.",au,{title:`No matching id in document: "${t}".`,elements:[n]})}}function du(e,t){const n=e.querySelector(".self-link"),r=[...vn(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=hn(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function pu(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var fu=Object.freeze({__proto__:null,name:au,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":du(n,t);break;case"section":uu(n,e,t);break;case"figure":lu(n,e,t);break;case"aside":case"div":cu(n,e,t);break;default:t.textContent=t.getAttribute("href");_n("ReSpec doesn't support expanding this kind of reference.",au,{title:`Can't expand "#${e}".`,elements:[t]})}pu(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");_n(`Couldn't expand inline reference. The id "${e}" is not in the document.`,au,{title:`No matching id in document: ${e}.`,elements:[t]})}}}});const hu="rs-changelog",mu=class extends HTMLElement{constructor(){super(),this.props={from:this.getAttribute("from"),to:this.getAttribute("to")||"HEAD",filter:"function"==typeof window[this.getAttribute("filter")]?window[this.getAttribute("filter")]:()=>!0}}connectedCallback(){const{from:e,to:t,filter:n}=this.props;Ht.bind(this)` <ul> - ${{any:bu(e,t,n).then(e=>async function(e){const{repoURL:t}=await bs;return e.map(e=>{const[n,r=null]=e.message.split(/\(#(\d+)\)/,2),o=`${t}commit/${e.hash}`,s=r&&Ht` (<a href="${r?`${t}pull/${r}`:null}">#${r}</a>)`;return Ht`<li><a href="${o}">${n.trim()}</a>${s}</li>`})}(e)).catch(e=>Sn(e.message,mu,{elements:[this]})).finally(()=>{this.dispatchEvent(new CustomEvent("done"))}),placeholder:"Loading list of commits..."}} + ${{any:gu(e,t,n).then(e=>async function(e){const{repoURL:t}=await ws;return e.map(e=>{const[n,r=null]=e.message.split(/\(#(\d+)\)/,2),o=`${t}commit/${e.hash}`,s=r&&Ht` (<a href="${r?`${t}pull/${r}`:null}">#${r}</a>)`;return Ht`<li><a href="${o}">${n.trim()}</a>${s}</li>`})}(e)).catch(e=>_n(e.message,hu,{elements:[this]})).finally(()=>{this.dispatchEvent(new CustomEvent("done"))}),placeholder:"Loading list of commits..."}} </ul> - `}};async function bu(e,t,n){let r;try{const o=await bs;if(!o)throw new Error("`respecConfig.github` is not set");const s=new URL("commits",`${o.apiBase}/${o.fullName}/`);s.searchParams.set("from",e),s.searchParams.set("to",t);const i=await fetch(s.href);if(!i.ok)throw new Error(`Request to ${s} failed with status code ${i.status}`);if(r=await i.json(),!r.length)throw new Error(`No commits between ${e}..${t}.`);r=r.filter(n)}catch(e){const t="Error loading commits from GitHub. "+e.message;throw console.error(e),new Error(t)}return r}const yu=[Object.freeze({__proto__:null,name:mu,element:gu})];var wu=Object.freeze({__proto__:null,name:"core/custom-elements/index",run:async function(){yu.forEach(e=>{customElements.define(e.name,e.element)});const e=yu.map(e=>e.name).join(", "),t=[...document.querySelectorAll(e)].map(e=>new Promise(t=>e.addEventListener("done",t,{once:!0})));await Promise.all(t)}});const vu="core/a11y",ku=["color-contrast","landmark-one-main","landmark-unique","region"];function xu(e){const t=[];for(const n of e.split("\n\n")){const[e,...r]=n.split(/^\s{2}/m),o=r.map(e=>"- "+e.trimEnd()).join("\n");t.push(`${e}${o}`)}return t.join("\n\n")}var $u=Object.freeze({__proto__:null,name:vu,run:async function(e){if(!e.a11y)return;const t=!0===e.a11y?{}:e.a11y,n=await async function(e){const{rules:t,...n}=e,r={rules:{...Object.fromEntries(ku.map(e=>[e,{enabled:!1}])),...t},...n,elementRef:!0,resultTypes:["violations"],reporter:"v1"};let o;try{o=await function(){const e=document.createElement("script");return e.classList.add("remove"),e.src="https://unpkg.com/axe-core@3/axe.min.js",document.head.appendChild(e),new Promise((t,n)=>{e.onload=()=>t(window.axe),e.onerror=n})}()}catch(e){return Sn("Failed to load a11y linter.",vu),console.error(e),[]}try{return(await o.run(document,r)).violations}catch(e){return Sn("Error while looking for a11y issues.",vu),console.error(e),[]}}(t);for(const e of n){const t=new Map;for(const n of e.nodes){const{failureSummary:e,element:r}=n;(t.get(e)||t.set(e,[]).get(e)).push(r)}const{id:n,help:r,description:o,helpUrl:s}=e,i=`a11y/${n}: ${r}`;for(const[e,n]of t){const t=xu(e);Cn(i,vu,{details:`\n\n${o}.\n\n${t}. ([Learn more](${s}))`,elements:n})}}}}),_u=Object.freeze({__proto__:null,default:'.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0}\n#respec-ui{position:fixed;display:flex;flex-direction:row-reverse;top:20px;right:20px;width:202px;text-align:right;z-index:9000}\n#respec-pill,.respec-info-button{background:#fff;height:2.5em;color:#787878;border:1px solid #ccc;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5)}\n.respec-info-button{border:none;opacity:.75;border-radius:2em;margin-right:1em;min-width:3.5em}\n.respec-info-button:focus,.respec-info-button:hover{opacity:1;transition:opacity .2s}\n#respec-pill:disabled{font-size:2.8px;text-indent:-9999em;border-top:1.1em solid rgba(40,40,40,.2);border-right:1.1em solid rgba(40,40,40,.2);border-bottom:1.1em solid rgba(40,40,40,.2);border-left:1.1em solid #fff;transform:translateZ(0);animation:respec-spin .5s infinite linear;box-shadow:none}\n#respec-pill:disabled,#respec-pill:disabled:after{border-radius:50%;width:10em;height:10em}\n@keyframes respec-spin{\n0%{transform:rotate(0)}\n100%{transform:rotate(360deg)}\n}\n.respec-hidden{visibility:hidden;opacity:0;transition:visibility 0s .2s,opacity .2s linear}\n.respec-visible{visibility:visible;opacity:1;transition:opacity .2s linear}\n#respec-pill:focus,#respec-pill:hover{color:#000;background-color:#f5f5f5;transition:color .2s}\n#respec-menu{position:absolute;margin:0;padding:0;font-family:sans-serif;background:#fff;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5);width:200px;display:none;text-align:left;margin-top:32px;font-size:.8em}\n#respec-menu:not([hidden]){display:block}\n#respec-menu li{list-style-type:none;margin:0;padding:0}\n.respec-save-buttons{display:grid;grid-template-columns:repeat(auto-fill,minmax(47%,2fr));grid-gap:0.5cm;padding:.5cm}\n.respec-save-button:link{padding-top:16px;color:#f0f0f0;background:#2a5aa8;justify-self:stretch;height:1cm;text-decoration:none;text-align:center;font-size:inherit;border:none;border-radius:.2cm}\n.respec-save-button:link:hover{color:#fff;background:#2a5aa8;padding:0;margin:0;border:0;padding-top:16px}\n.respec-save-button:link:focus{background:#193766}\n#respec-pill:focus,#respec-ui button:focus,.respec-option:focus{outline:0;outline-style:none}\n#respec-pill-error{background-color:red;color:#fff}\n#respec-pill-warning{background-color:orange;color:#fff}\n.respec-error-list,.respec-warning-list{margin:0;padding:0;list-style:none;font-family:sans-serif;background-color:#fffbe6;font-size:.85em}\n.respec-error-list>li,.respec-warning-list>li{padding:.4em .7em}\n.respec-warning-list>li::before{content:"⚠️";padding-right:.5em}\n.respec-error-list p,.respec-warning-list p{padding:0;margin:0}\n.respec-warning-list li{color:#5c3b00;border-bottom:thin solid #fff5c2}\n.respec-error-list,.respec-error-list li{background-color:#fff0f0}\n.respec-error-list li::before{content:"💥";padding-right:.5em}\n.respec-error-list li{padding:.4em .7em;color:#5c3b00;border-bottom:thin solid #ffd7d7}\n.respec-error-list li>p{margin:0;padding:0;display:inline-block}\n.respec-error-list li>p:first-child,.respec-warning-list li>p:first-child{display:inline}\n.respec-error-list>li li,.respec-warning-list>li li{margin:0;list-style:disc}\n#respec-overlay{display:block;position:fixed;z-index:10000;top:0;left:0;height:100%;width:100%;background:#000}\n.respec-show-overlay{transition:opacity .2s linear;opacity:.5}\n.respec-hide-overlay{transition:opacity .2s linear;opacity:0}\n.respec-modal{display:block;position:fixed;z-index:11000;margin:auto;top:10%;background:#fff;border:5px solid #666;min-width:20%;width:79%;padding:0;max-height:80%;overflow-y:auto;margin:0 -.5cm}\n@media screen and (min-width:78em){\n.respec-modal{width:62%}\n}\n.respec-modal h3{margin:0;padding:.2em;text-align:center;color:#000;background:linear-gradient(to bottom,#eee 0,#eee 50%,#ccc 100%);font-size:1em}\n.respec-modal .inside div p{padding-left:1cm}\n#respec-menu button.respec-option{background:#fff;padding:0 .2cm;border:none;width:100%;text-align:left;font-size:inherit;padding:1.2em 1.2em}\n#respec-menu button.respec-option:hover,#respec-menu button:focus{background-color:#eee}\n.respec-cmd-icon{padding-right:.5em}\n#respec-ui button.respec-option:last-child{border:none;border-radius:inherit}\n.respec-button-copy-paste{position:absolute;height:28px;width:40px;cursor:pointer;background-image:linear-gradient(#fcfcfc,#eee);border:1px solid #90b8de;border-left:0;border-radius:0 0 3px 0;-webkit-user-select:none;user-select:none;-webkit-appearance:none;top:0;left:127px}\n#specref-ui{margin:0 2%;margin-bottom:.5cm}\n#specref-ui header{font-size:.7em;background-color:#eee;text-align:center;padding:.2cm;margin-bottom:.5cm;border-radius:0 0 .2cm .2cm}\n#specref-ui header h1{padding:0;margin:0;color:#000}\n#specref-ui p{padding:0;margin:0;font-size:.8em;text-align:center}\n#specref-ui p.state{margin:1cm}\n#specref-ui .searchcomponent{font-size:16px;display:grid;grid-template-columns:auto 2cm}\n#specref-ui button,#specref-ui input{border:0;padding:6px 12px}\n#specref-ui label{font-size:.6em;grid-column-end:3;text-align:right;grid-column-start:1}\n#specref-ui input[type=search]{-webkit-appearance:none;font-size:16px;border-radius:.1cm 0 0 .1cm;border:1px solid #ccc}\n#specref-ui button[type=submit]{color:#fff;border-radius:0 .1cm .1cm 0;background-color:#337ab7}\n#specref-ui button[type=submit]:hover{background-color:#286090;border-color:#204d74}\n#specref-ui .result-stats{margin:0;padding:0;color:grey;font-size:.7em;font-weight:700}\n#specref-ui .specref-results{font-size:.8em}\n#specref-ui .specref-results dd+dt{margin-top:.51cm}\n#specref-ui .specref-results a{text-transform:capitalize}\n#specref-ui .specref-results .authors{display:block;color:#006621}\n@media print{\n#respec-ui{display:none}\n}\n#xref-ui{width:100%;min-height:550px;height:100%;overflow:hidden;padding:0;margin:0;border:0}\n#xref-ui:not(.ready){background:url("https://respec.org/xref/loader.gif") no-repeat center}\n#xref-ui+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}'}),Su=Object.freeze({__proto__:null,default:'@keyframes pop{\n0%{transform:scale(1,1)}\n25%{transform:scale(1.25,1.25);opacity:.75}\n100%{transform:scale(1,1)}\n}\n.hljs{background:0 0!important}\na abbr,h1 abbr,h2 abbr,h3 abbr,h4 abbr,h5 abbr,h6 abbr{border:none}\ndfn{font-weight:700}\na.internalDFN{color:inherit;border-bottom:1px solid #99c;text-decoration:none}\na.externalDFN{color:inherit;border-bottom:1px dotted #ccc;text-decoration:none}\na.bibref{text-decoration:none}\n.respec-offending-element:target{animation:pop .25s ease-in-out 0s 1}\n.respec-offending-element,a[href].respec-offending-element{text-decoration:red wavy underline}\n@supports not (text-decoration:red wavy underline){\n.respec-offending-element:not(pre){display:inline-block}\n.respec-offending-element{background:url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=) bottom repeat-x}\n}\n#references :target{background:#eaf3ff;animation:pop .4s ease-in-out 0s 1}\ncite .bibref{font-style:normal}\ncode{color:#c63501}\nth code{color:inherit}\na[href].orcid{padding-left:4px;padding-right:4px}\na[href].orcid>svg{margin-bottom:-2px}\n.toc a,.tof a{text-decoration:none}\na .figno,a .secno{color:#000}\nol.tof,ul.tof{list-style:none outside none}\n.caption{margin-top:.5em;font-style:italic}\ntable.simple{border-spacing:0;border-collapse:collapse;border-bottom:3px solid #005a9c}\n.simple th{background:#005a9c;color:#fff;padding:3px 5px;text-align:left}\n.simple th a{color:#fff;padding:3px 5px;text-align:left}\n.simple th[scope=row]{background:inherit;color:inherit;border-top:1px solid #ddd}\n.simple td{padding:3px 10px;border-top:1px solid #ddd}\n.simple tr:nth-child(even){background:#f0f6ff}\n.section dd>p:first-child{margin-top:0}\n.section dd>p:last-child{margin-bottom:0}\n.section dd{margin-bottom:1em}\n.section dl.attrs dd,.section dl.eldef dd{margin-bottom:0}\n#issue-summary>ul{column-count:2}\n#issue-summary li{list-style:none;display:inline-block}\ndetails.respec-tests-details{margin-left:1em;display:inline-block;vertical-align:top}\ndetails.respec-tests-details>*{padding-right:2em}\ndetails.respec-tests-details[open]{z-index:999999;position:absolute;border:thin solid #cad3e2;border-radius:.3em;background-color:#fff;padding-bottom:.5em}\ndetails.respec-tests-details[open]>summary{border-bottom:thin solid #cad3e2;padding-left:1em;margin-bottom:1em;line-height:2em}\ndetails.respec-tests-details>ul{width:100%;margin-top:-.3em}\ndetails.respec-tests-details>li{padding-left:1em}\na[href].self-link:hover{opacity:1;text-decoration:none;background-color:transparent}\nh2,h3,h4,h5,h6{position:relative}\naside.example .marker>a.self-link{color:inherit}\nh2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{border:none;color:inherit;font-size:83%;height:2em;left:-1.6em;opacity:.5;position:absolute;text-align:center;text-decoration:none;top:0;transition:opacity .2s;width:2em}\nh2>a.self-link::before,h3>a.self-link::before,h4>a.self-link::before,h5>a.self-link::before,h6>a.self-link::before{content:"§";display:block}\n@media (max-width:767px){\ndd{margin-left:0}\nh2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left:auto;top:auto}\n}\n@media print{\n.removeOnSave{display:none}\n}'}),Cu=Object.freeze({__proto__:null,default:"span.example-title{text-transform:none}\naside.example,div.example,div.illegal-example{padding:.5em;margin:1em 0;position:relative;clear:both}\ndiv.illegal-example{color:red}\ndiv.illegal-example p{color:#000}\naside.example,div.example{padding:.5em;border-left-width:.5em;border-left-style:solid;border-color:#e0cb52;background:#fcfaee}\naside.example div.example{border-left-width:.1em;border-color:#999;background:#fff}\naside.example div.example span.example-title{color:#999}\n.example pre{background-color:rgba(0,0,0,.03)}"}),Eu=Object.freeze({__proto__:null,default:'.issue-label{text-transform:initial}\n.warning>p:first-child{margin-top:0}\n.warning{padding:.5em;border-left-width:.5em;border-left-style:solid}\nspan.warning{padding:.1em .5em .15em}\n.issue.closed span.issue-number{text-decoration:line-through}\n.warning{border-color:#f11;border-width:.2em;border-style:solid;background:#fbe9e9}\n.warning-title:before{content:"⚠";font-size:1.3em;float:left;padding-right:.3em;margin-top:-.3em}\nli.task-list-item{list-style:none}\ninput.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle}\n.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}'}),Ru=Object.freeze({__proto__:null,default:"pre.idl{padding:1em;position:relative}\npre.idl>code{color:#000}\n@media print{\npre.idl{white-space:pre-wrap}\n}\n.idlHeader{display:block;width:150px;background:#8ccbf2;color:#fff;font-family:sans-serif;font-weight:700;margin:-1em 0 1em -1em;height:28px;line-height:28px}\n.idlHeader a.self-link{margin-left:.3cm;text-decoration:none;border-bottom:none}\n.idlID{font-weight:700;color:#005a9c}\n.idlType{color:#005a9c}\n.idlName{color:#ff4500}\n.idlName a{color:#ff4500;border-bottom:1px dotted #ff4500;text-decoration:none}\na.idlEnumItem{color:#000;border-bottom:1px dotted #ccc;text-decoration:none}\n.idlSuperclass{font-style:italic;color:#005a9c}\n.idlDefaultValue,.idlParamName{font-style:italic}\n.extAttr{color:#666}\n.idlSectionComment{color:gray}\n.idlIncludes a{font-weight:700}\n.respec-button-copy-paste:focus{text-decoration:none;border-color:#51a7e8;outline:0;box-shadow:0 0 5px rgba(81,167,232,.5)}\n.respec-button-copy-paste.selected:focus,.respec-button-copy-paste:focus:hover{border-color:#51a7e8}\n.respec-button-copy-paste.zeroclipboard-is-active,.respec-button-copy-paste.zeroclipboard-is-hover,.respec-button-copy-paste:active,.respec-button-copy-paste:hover{text-decoration:none;background-color:#ddd;background-image:linear-gradient(#eee,#ddd);border-color:#ccc}\n.respec-button-copy-paste.selected,.respec-button-copy-paste.zeroclipboard-is-active,.respec-button-copy-paste:active{background-color:#dcdcdc;background-image:none;border-color:#b5b5b5;box-shadow:inset 0 2px 4px rgba(0,0,0,.15)}\n.respec-button-copy-paste.selected:hover{background-color:#cfcfcf}\n.respec-button-copy-paste.disabled,.respec-button-copy-paste.disabled:hover,.respec-button-copy-paste:disabled,.respec-button-copy-paste:disabled:hover{color:rgba(102,102,102,.5);cursor:default;background-color:rgba(229,229,229,.5);background-image:none;border-color:rgba(197,197,197,.5);box-shadow:none}\n@media print{\n.respec-button-copy-paste{visibility:hidden}\n}"}),Tu=Object.freeze({__proto__:null,default:"ul.index{columns:30ch;column-gap:1.5em}\nul.index li{list-style:inherit}\nul.index li span{color:inherit;cursor:pointer;white-space:normal}\n#index-defined-here ul.index li{font-size:.9rem}\nul.index code{color:inherit}\n#index-defined-here .print-only{display:none}\n@media print{\n#index-defined-here .print-only{display:initial}\n}"}),Au=Object.freeze({__proto__:null,default:'.caniuse-stats{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:baseline;cursor:pointer}\nbutton.caniuse-cell{margin:1px 1px 0 0;border:none}\n.caniuse-browser{position:relative}\n@media print{\n.caniuse-cell.y::before{content:"✔️";padding:.5em}\n.caniuse-cell.n::before{content:"❌";padding:.5em}\n.caniuse-cell.a::before,.caniuse-cell.d::before,.caniuse-cell.p::before,.caniuse-cell.x::before{content:"⚠️";padding:.5em}\n}\n.caniuse-browser ul{display:none;margin:0;padding:0;list-style:none;position:absolute;left:0;z-index:2;background:#fff;margin-top:1px}\n.caniuse-stats a[href]{white-space:nowrap;align-self:center;margin-left:.5em}\n.caniuse-cell{display:flex;font-size:90%;height:.8cm;margin-right:1px;margin-top:0;min-width:3cm;overflow:visible;justify-content:center;align-items:center;--supported:#2a8436;--no-support:#c44230;--no-support-alt:#b43b2b;--partial:#807301;--partial-alt:#746c00;color:#fff;background:repeating-linear-gradient(var(--caniuse-angle,45deg),var(--caniuse-bg) 0,var(--caniuse-bg-alt) 1px,var(--caniuse-bg-alt) .4em,var(--caniuse-bg) calc(.25em + 1px),var(--caniuse-bg) .75em)}\nli.caniuse-cell{margin-bottom:1px}\n.caniuse-cell:focus{outline:0}\n.caniuse-cell.y{background:var(--supported)}\n.caniuse-cell.d,.caniuse-cell.n{--caniuse-angle:45deg;--caniuse-bg:var(--no-support);--caniuse-bg-alt:var(--no-support-alt)}\n.caniuse-cell.d{--caniuse-angle:180deg}\n.caniuse-cell.a,.caniuse-cell.p,.caniuse-cell.x{--caniuse-angle:90deg;--caniuse-bg:var(--partial);--caniuse-bg-alt:var(--partial-alt)}\n.caniuse-stats .caniuse-browser:hover>ul,.caniuse-stats button:focus+ul{display:block}'}),Pu=Object.freeze({__proto__:null,default:'.mdn{font-size:.75em;position:absolute;right:.3em;min-width:0;margin-top:3em}\n.mdn details{width:100%;margin:1px 0;position:relative;z-index:10;box-sizing:border-box;padding:.4em;padding-top:0}\n.mdn details[open]{min-width:25ch;max-width:32ch;background:#fff;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px;z-index:11;margin-bottom:.4em}\n.mdn summary{text-align:right;cursor:default;margin-right:-.4em}\n.mdn summary span{font-family:zillaslab,Palatino,"Palatino Linotype",serif;color:#fff;background-color:#000;display:inline-block;padding:3px}\n.mdn a{display:inline-block;word-break:break-all}\n.mdn p{margin:0}\n.mdn .engines-all{color:#058b00}\n.mdn .engines-some{color:#b00}\n.mdn table{width:100%;font-size:.9em}\n.mdn td{border:none}\n.mdn td:nth-child(2){text-align:right}\n.mdn .nosupportdata{font-style:italic;margin:0}\n.mdn tr::before{content:"";display:table-cell;width:1.5em;height:1.5em;background:no-repeat center center/contain;font-size:.75em}\n.mdn .no,.mdn .unknown{color:#ccc;filter:grayscale(100%)}\n.mdn .no::before,.mdn .unknown::before{opacity:.5}\n.mdn .chrome::before,.mdn .chrome_android::before{background-image:url(https://resources.whatwg.org/browser-logos/chrome.svg)}\n.mdn .edge::before,.mdn .edge_mobile::before{background-image:url(https://resources.whatwg.org/browser-logos/edge.svg)}\n.mdn .firefox::before,.mdn .firefox_android::before{background-image:url(https://resources.whatwg.org/browser-logos/firefox.png)}\n.mdn .ie::before{background-image:url(https://resources.whatwg.org/browser-logos/ie.png)}\n.mdn .opera::before,.mdn .opera_android::before{background-image:url(https://resources.whatwg.org/browser-logos/opera.svg)}\n.mdn .safari::before{background-image:url(https://resources.whatwg.org/browser-logos/safari.png)}\n.mdn .safari_ios::before{background-image:url(https://resources.whatwg.org/browser-logos/safari-ios.svg)}\n.mdn .samsunginternet_android::before{background-image:url(https://resources.whatwg.org/browser-logos/samsung.svg)}\n.mdn .webview_android::before{background-image:url(https://resources.whatwg.org/browser-logos/android-webview.png)}'}),Lu=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),Iu=Object.freeze({__proto__:null,default:".hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa}\n.hljs-comment,.hljs-quote{color:#717277;font-style:italic}\n.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}\n.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#ca4706;font-weight:700}\n.hljs-literal{color:#0b76c5}\n.hljs-addition,.hljs-attribute,.hljs-meta-string,.hljs-regexp,.hljs-string{color:#42803c}\n.hljs-built_in,.hljs-class .hljs-title{color:#9a6a01}\n.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}\n.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#336ae3}\n.hljs-emphasis{font-style:italic}\n.hljs-strong{font-weight:700}\n.hljs-link{text-decoration:underline}"}),Du=Object.freeze({__proto__:null,default:"var:hover{text-decoration:underline;cursor:pointer}\nvar.respec-hl{color:var(--color,#000);background-color:var(--bg-color);box-shadow:0 0 0 2px var(--bg-color)}\nvar.respec-hl-c1{--bg-color:#f4d200}\nvar.respec-hl-c2{--bg-color:#ff87a2}\nvar.respec-hl-c3{--bg-color:#96e885}\nvar.respec-hl-c4{--bg-color:#3eeed2}\nvar.respec-hl-c5{--bg-color:#eacfb6}\nvar.respec-hl-c6{--bg-color:#82ddff}\nvar.respec-hl-c7{--bg-color:#ffbcf2}\n@media print{\nvar.respec-hl{background:0 0;color:#000;box-shadow:unset}\n}"}),Nu=Object.freeze({__proto__:null,default:'dfn{cursor:pointer}\n.dfn-panel{position:absolute;z-index:35;min-width:300px;max-width:500px;padding:.5em .75em;margin-top:.6em;font:small Helvetica Neue,sans-serif,Droid Sans Fallback;background:#fff;color:#000;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px}\n.dfn-panel:not(.docked)>.caret{position:absolute;top:-9px}\n.dfn-panel:not(.docked)>.caret::after,.dfn-panel:not(.docked)>.caret::before{content:"";position:absolute;border:10px solid transparent;border-top:0;border-bottom:10px solid #fff;top:0}\n.dfn-panel:not(.docked)>.caret::before{border-bottom:9px solid #a2a9b1}\n.dfn-panel *{margin:0}\n.dfn-panel b{display:block;color:#000;margin-top:.25em}\n.dfn-panel ul a[href]{color:#333}\n.dfn-panel>div{display:flex}\n.dfn-panel a.self-link{font-weight:700;margin-right:auto}\n.dfn-panel .marker{padding:.1em;margin-left:.5em;border-radius:.2em;text-align:center;white-space:nowrap;font-size:90%;color:#040b1c}\n.dfn-panel .marker.dfn-exported{background:#d1edfd;box-shadow:0 0 0 .125em #1ca5f940}\n.dfn-panel .marker.idl-block{background:#8ccbf2;box-shadow:0 0 0 .125em #0670b161}\n.dfn-panel a:not(:hover){text-decoration:none!important;border-bottom:none!important}\n.dfn-panel a[href]:hover{border-bottom-width:1px}\n.dfn-panel ul{padding:0}\n.dfn-panel li{margin-left:1em}\n.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}'}),ju=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'}),Ou=Object.freeze({__proto__:null,default:'var{position:relative;cursor:pointer}\nvar[data-type]::after,var[data-type]::before{position:absolute;left:50%;top:-6px;opacity:0;transition:opacity .4s;pointer-events:none}\nvar[data-type]::before{content:"";transform:translateX(-50%);border-width:4px 6px 0 6px;border-style:solid;border-color:transparent;border-top-color:#000}\nvar[data-type]::after{content:attr(data-type);transform:translateX(-50%) translateY(-100%);background:#000;text-align:center;font-family:"Dank Mono","Fira Code",monospace;font-style:normal;padding:6px;border-radius:3px;color:#daca88;text-indent:0;font-weight:400}\nvar[data-type]:hover::after,var[data-type]:hover::before{opacity:1}'}),zu=Object.freeze({__proto__:null,default:".assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}"})}(); + `}};async function gu(e,t,n){let r;try{const o=await ws;if(!o)throw new Error("`respecConfig.github` is not set");const s=new URL("commits",`${o.apiBase}/${o.fullName}/`);s.searchParams.set("from",e),s.searchParams.set("to",t);const i=await fetch(s.href);if(!i.ok)throw new Error(`Request to ${s} failed with status code ${i.status}`);if(r=await i.json(),!r.length)throw new Error(`No commits between ${e}..${t}.`);r=r.filter(n)}catch(e){const t="Error loading commits from GitHub. "+e.message;throw console.error(e),new Error(t)}return r}const bu=[Object.freeze({__proto__:null,name:hu,element:mu})];var wu=Object.freeze({__proto__:null,name:"core/custom-elements/index",run:async function(){bu.forEach(e=>{customElements.define(e.name,e.element)});const e=bu.map(e=>e.name).join(", "),t=[...document.querySelectorAll(e)].map(e=>new Promise(t=>e.addEventListener("done",t,{once:!0})));await Promise.all(t)}});const yu="core/a11y",vu=["color-contrast","landmark-one-main","landmark-unique","region"];function ku(e){const t=[];for(const n of e.split("\n\n")){const[e,...r]=n.split(/^\s{2}/m),o=r.map(e=>"- "+e.trimEnd()).join("\n");t.push(`${e}${o}`)}return t.join("\n\n")}var xu=Object.freeze({__proto__:null,name:yu,run:async function(e){if(!e.a11y)return;const t=!0===e.a11y?{}:e.a11y,n=await async function(e){const{rules:t,...n}=e,r={rules:{...Object.fromEntries(vu.map(e=>[e,{enabled:!1}])),...t},...n,elementRef:!0,resultTypes:["violations"],reporter:"v1"};let o;try{o=await function(){const e=document.createElement("script");return e.classList.add("remove"),e.src="https://unpkg.com/axe-core@3/axe.min.js",document.head.appendChild(e),new Promise((t,n)=>{e.onload=()=>t(window.axe),e.onerror=n})}()}catch(e){return _n("Failed to load a11y linter.",yu),console.error(e),[]}try{return(await o.run(document,r)).violations}catch(e){return _n("Error while looking for a11y issues.",yu),console.error(e),[]}}(t);for(const e of n){const t=new Map;for(const n of e.nodes){const{failureSummary:e,element:r}=n;(t.get(e)||t.set(e,[]).get(e)).push(r)}const{id:n,help:r,description:o,helpUrl:s}=e,i=`a11y/${n}: ${r}`;for(const[e,n]of t){const t=ku(e);Cn(i,yu,{details:`\n\n${o}.\n\n${t}. ([Learn more](${s}))`,elements:n})}}}}),$u=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),Su=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'})}(); //# sourceMappingURL=respec-w3c.js.map diff --git a/builds/respec-w3c.js.map b/builds/respec-w3c.js.map index 53d961dbed..bfa1b334a4 100644 --- a/builds/respec-w3c.js.map +++ b/builds/respec-w3c.js.map @@ -1 +1 @@ -{"version":3,"file":"respec-w3c.js","sources":["../profiles/w3c.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/webidl2/lib/error.js","../node_modules/webidl2/lib/productions/base.js","../node_modules/webidl2/lib/validators/helpers.js","../node_modules/webidl2/lib/productions/array-base.js","../node_modules/webidl2/lib/productions/token.js","../node_modules/webidl2/lib/productions/extended-attributes.js","../node_modules/webidl2/lib/productions/type.js","../node_modules/webidl2/lib/productions/default.js","../node_modules/webidl2/lib/productions/argument.js","../node_modules/webidl2/lib/productions/operation.js","../node_modules/webidl2/lib/productions/attribute.js","../node_modules/webidl2/lib/productions/helpers.js","../node_modules/webidl2/lib/tokeniser.js","../node_modules/webidl2/lib/productions/enum.js","../node_modules/webidl2/lib/productions/includes.js","../node_modules/webidl2/lib/productions/typedef.js","../node_modules/webidl2/lib/productions/callback.js","../node_modules/webidl2/lib/productions/container.js","../node_modules/webidl2/lib/productions/constant.js","../node_modules/webidl2/lib/productions/iterable.js","../node_modules/webidl2/lib/productions/constructor.js","../node_modules/webidl2/lib/productions/interface.js","../node_modules/webidl2/lib/validators/interface.js","../node_modules/webidl2/lib/productions/mixin.js","../node_modules/webidl2/lib/productions/field.js","../node_modules/webidl2/lib/productions/dictionary.js","../node_modules/webidl2/lib/productions/namespace.js","../node_modules/webidl2/lib/productions/callback-interface.js","../node_modules/webidl2/lib/webidl2.js","../node_modules/webidl2/lib/writer.js","../node_modules/webidl2/lib/validator.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/core/text-loader.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/w3c/group.js","../src/core/templates/show-link.js","../src/core/templates/show-logo.js","../src/core/templates/show-people.js","../src/w3c/templates/headers.js","../src/w3c/templates/cgbg-headers.js","../src/w3c/templates/sotd.js","../src/w3c/templates/cgbg-sotd.js","../src/w3c/headers.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/core/linter-rules/wpt-tests-exist.js","../src/w3c/defaults.js","../src/core/style.js","../src/w3c/style.js","../src/w3c/l10n.js","../src/core/github.js","../src/core/data-include.js","../src/core/title.js","../src/w3c/level.js","../src/w3c/abstract.js","../src/core/data-transform.js","../src/core/data-abbr.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/w3c/conformance.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/core/examples.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/dfn-finder.js","../src/core/webidl-clipboard.js","../src/core/webidl.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/xref-db.js","../src/core/xref.js","../src/core/webidl-index.js","../src/core/dfn-index.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/core/caniuse.js","../src/core/mdn-annotation.js","../src/core/exporter.js","../src/ui/save-html.js","../src/ui/search-specref.js","../src/ui/search-xref.js","../src/ui/about-respec.js","../src/core/seo.js","../src/w3c/seo.js","../src/core/worker.js","../src/core/highlight.js","../src/core/data-tests.js","../src/core/list-sorter.js","../src/core/highlight-vars.js","../src/core/dfn-panel.js","../src/core/data-type.js","../src/core/algorithms.js","../src/core/anchor-expander.js","../src/core/custom-elements/rs-changelog.js","../src/core/custom-elements/index.js","../src/core/a11y.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/w3c/group.js\"),\n import(\"../src/w3c/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/w3c/style.js\"),\n import(\"../src/w3c/l10n.js\"),\n import(\"../src/core/github.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/title.js\"),\n import(\"../src/w3c/level.js\"),\n import(\"../src/w3c/headers.js\"),\n import(\"../src/w3c/abstract.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/data-abbr.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/w3c/conformance.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/webidl.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/xref.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/webidl-index.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/dfn-index.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/core/caniuse.js\"),\n import(\"../src/core/mdn-annotation.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/search-specref.js\"),\n import(\"../src/ui/search-xref.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/w3c/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/webidl-clipboard.js\"),\n import(\"../src/core/data-tests.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/data-type.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n import(\"../src/core/custom-elements/index.js\"),\n /* Linters must be the last thing to run */\n import(\"../src/core/linter.js\"),\n import(\"../src/core/a11y.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * @param {string} text\n */\nfunction lastLine(text) {\n const splitted = text.split(\"\\n\");\n return splitted[splitted.length - 1];\n}\n\nfunction appendIfExist(base, target) {\n let result = base;\n if (target) {\n result += ` ${target}`;\n }\n return result;\n}\n\nfunction contextAsText(node) {\n const hierarchy = [node];\n while (node && node.parent) {\n const { parent } = node;\n hierarchy.unshift(parent);\n node = parent;\n }\n return hierarchy.map(n => appendIfExist(n.type, n.name)).join(\" -> \");\n}\n\n/**\n * @typedef {object} WebIDL2ErrorOptions\n * @property {\"error\" | \"warning\"} [level]\n * @property {Function} [autofix]\n *\n * @param {string} message error message\n * @param {\"Syntax\" | \"Validation\"} kind error type\n * @param {WebIDL2ErrorOptions} [options]\n */\nfunction error(source, position, current, message, kind, { level = \"error\", autofix, ruleName } = {}) {\n /**\n * @param {number} count\n */\n function sliceTokens(count) {\n return count > 0 ?\n source.slice(position, position + count) :\n source.slice(Math.max(position + count, 0), position);\n }\n\n function tokensToText(inputs, { precedes } = {}) {\n const text = inputs.map(t => t.trivia + t.value).join(\"\");\n const nextToken = source[position];\n if (nextToken.type === \"eof\") {\n return text;\n }\n if (precedes) {\n return text + nextToken.trivia;\n }\n return text.slice(nextToken.trivia.length);\n }\n\n const maxTokens = 5; // arbitrary but works well enough\n const line =\n source[position].type !== \"eof\" ? source[position].line :\n source.length > 1 ? source[position - 1].line :\n 1;\n\n const precedingLastLine = lastLine(\n tokensToText(sliceTokens(-maxTokens), { precedes: true })\n );\n\n const subsequentTokens = sliceTokens(maxTokens);\n const subsequentText = tokensToText(subsequentTokens);\n const subsequentFirstLine = subsequentText.split(\"\\n\")[0];\n\n const spaced = \" \".repeat(precedingLastLine.length) + \"^\";\n const sourceContext = precedingLastLine + subsequentFirstLine + \"\\n\" + spaced;\n\n const contextType = kind === \"Syntax\" ? \"since\" : \"inside\";\n const inSourceName = source.name ? ` in ${source.name}` : \"\";\n const grammaticalContext = (current && current.name) ? `, ${contextType} \\`${current.partial ? \"partial \" : \"\"}${contextAsText(current)}\\`` : \"\";\n const context = `${kind} error at line ${line}${inSourceName}${grammaticalContext}:\\n${sourceContext}`;\n return {\n message: `${context} ${message}`,\n bareMessage: message,\n context,\n line,\n sourceName: source.name,\n level,\n ruleName,\n autofix,\n input: subsequentText,\n tokens: subsequentTokens\n };\n}\n\n/**\n * @param {string} message error message\n */\nexport function syntaxError(source, position, current, message) {\n return error(source, position, current, message, \"Syntax\");\n}\n\n/**\n * @param {string} message error message\n * @param {WebIDL2ErrorOptions} [options]\n */\nexport function validationError(token, current, ruleName, message, options = {}) {\n options.ruleName = ruleName;\n return error(current.source, token.index, current, message, \"Validation\", options);\n}\n","// @ts-check\n\nexport class Base {\n /**\n * @param {object} initializer\n * @param {Base[\"source\"]} initializer.source\n * @param {Base[\"tokens\"]} initializer.tokens\n */\n constructor({ source, tokens }) {\n Object.defineProperties(this, {\n source: { value: source },\n tokens: { value: tokens, writable: true },\n parent: { value: null, writable: true },\n this: { value: this } // useful when escaping from proxy\n });\n }\n\n toJSON() {\n const json = { type: undefined, name: undefined, inheritance: undefined };\n let proto = this;\n while (proto !== Object.prototype) {\n const descMap = Object.getOwnPropertyDescriptors(proto);\n for (const [key, value] of Object.entries(descMap)) {\n if (value.enumerable || value.get) {\n // @ts-ignore - allow indexing here\n json[key] = this[key];\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n return json;\n }\n}\n","// @ts-check\n\n/**\n * @typedef {import(\"../productions/dictionary.js\").Dictionary} Dictionary\n *\n * @param {*} idlType\n * @param {import(\"../validator.js\").Definitions} defs\n * @param {object} [options]\n * @param {boolean} [options.useNullableInner] use when the input idlType is nullable and you want to use its inner type\n * @return {{ reference: *, dictionary: Dictionary }} the type reference that ultimately includes dictionary.\n */\nexport function idlTypeIncludesDictionary(idlType, defs, { useNullableInner } = {}) {\n if (!idlType.union) {\n const def = defs.unique.get(idlType.idlType);\n if (!def) {\n return;\n }\n if (def.type === \"typedef\") {\n const { typedefIncludesDictionary } = defs.cache;\n if (typedefIncludesDictionary.has(def)) {\n // Note that this also halts when it met indeterminate state\n // to prevent infinite recursion\n return typedefIncludesDictionary.get(def);\n }\n defs.cache.typedefIncludesDictionary.set(def, undefined); // indeterminate state\n const result = idlTypeIncludesDictionary(def.idlType, defs);\n defs.cache.typedefIncludesDictionary.set(def, result);\n if (result) {\n return {\n reference: idlType,\n dictionary: result.dictionary\n };\n }\n }\n if (def.type === \"dictionary\" && (useNullableInner || !idlType.nullable)) {\n return {\n reference: idlType,\n dictionary: def\n };\n }\n }\n for (const subtype of idlType.subtype) {\n const result = idlTypeIncludesDictionary(subtype, defs);\n if (result) {\n if (subtype.union) {\n return result;\n }\n return {\n reference: subtype,\n dictionary: result.dictionary\n };\n }\n }\n}\n\n/**\n * @param {*} dict dictionary type\n * @param {import(\"../validator.js\").Definitions} defs\n * @return {boolean}\n */\nexport function dictionaryIncludesRequiredField(dict, defs) {\n if (defs.cache.dictionaryIncludesRequiredField.has(dict)) {\n return defs.cache.dictionaryIncludesRequiredField.get(dict);\n }\n // Set cached result to indeterminate to short-circuit circular definitions.\n // The final result will be updated to true or false.\n defs.cache.dictionaryIncludesRequiredField.set(dict, undefined);\n let result = dict.members.some(field => field.required);\n if (!result && dict.inheritance) {\n const superdict = defs.unique.get(dict.inheritance);\n if (!superdict) {\n // Assume required members in the supertype if it is unknown.\n result = true;\n } else if (dictionaryIncludesRequiredField(superdict, defs)) {\n result = true;\n }\n }\n defs.cache.dictionaryIncludesRequiredField.set(dict, result);\n return result;\n}\n","// @ts-check\n\nexport class ArrayBase extends Array {\n constructor({ source, tokens }) {\n super();\n Object.defineProperties(this, {\n source: { value: source },\n tokens: { value: tokens },\n parent: { value: null, writable: true }\n });\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { unescape } from \"./helpers.js\";\n\nexport class Token extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} type\n */\n static parser(tokeniser, type) {\n return () => {\n const value = tokeniser.consume(type);\n if (value) {\n return new Token({ source: tokeniser.source, tokens: { value } });\n }\n };\n }\n\n get value() {\n return unescape(this.tokens.value.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { ArrayBase } from \"./array-base.js\";\nimport { Token } from \"./token.js\";\nimport { list, argument_list, autoParenter, unescape } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} tokenName\n */\nfunction tokens(tokeniser, tokenName) {\n return list(tokeniser, {\n parser: Token.parser(tokeniser, tokenName),\n listName: tokenName + \" list\"\n });\n}\n\nconst extAttrValueSyntax = [\"identifier\", \"decimal\", \"integer\", \"string\"];\n\nconst shouldBeLegacyPrefixed = [\n \"NoInterfaceObject\",\n \"LenientSetter\",\n \"LenientThis\",\n \"TreatNonObjectAsNull\",\n \"Unforgeable\",\n];\n\nconst renamedLegacies = new Map([\n ...shouldBeLegacyPrefixed.map(name => [name, `Legacy${name}`]),\n [\"NamedConstructor\", \"LegacyFactoryFunction\"],\n [\"OverrideBuiltins\", \"LegacyOverrideBuiltIns\"],\n [\"TreatNullAs\", \"LegacyNullToEmptyString\"],\n]);\n\n/**\n * This will allow a set of extended attribute values to be parsed.\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction extAttrListItems(tokeniser) {\n for (const syntax of extAttrValueSyntax) {\n const toks = tokens(tokeniser, syntax);\n if (toks.length) {\n return toks;\n }\n }\n tokeniser.error(`Expected identifiers, strings, decimals, or integers but none found`);\n}\n\n\nclass ExtendedAttributeParameters extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const tokens = { assign: tokeniser.consume(\"=\") };\n const ret = autoParenter(new ExtendedAttributeParameters({ source: tokeniser.source, tokens }));\n if (tokens.assign) {\n tokens.secondaryName = tokeniser.consume(...extAttrValueSyntax);\n }\n tokens.open = tokeniser.consume(\"(\");\n if (tokens.open) {\n ret.list = ret.rhsIsList ?\n // [Exposed=(Window,Worker)]\n extAttrListItems(tokeniser) :\n // [LegacyFactoryFunction=Audio(DOMString src)] or [Constructor(DOMString str)]\n argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unexpected token in extended attribute argument list\");\n } else if (ret.hasRhs && !tokens.secondaryName) {\n tokeniser.error(\"No right hand side to extended attribute assignment\");\n }\n return ret.this;\n }\n\n get rhsIsList() {\n return this.tokens.assign && !this.tokens.secondaryName;\n }\n\n get rhsType() {\n if (this.rhsIsList) {\n return this.list[0].tokens.value.type + \"-list\";\n }\n if (this.tokens.secondaryName) {\n return this.tokens.secondaryName.type;\n }\n return null;\n }\n}\n\nexport class SimpleExtendedAttribute extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const name = tokeniser.consume(\"identifier\");\n if (name) {\n return new SimpleExtendedAttribute({\n source: tokeniser.source,\n tokens: { name },\n params: ExtendedAttributeParameters.parse(tokeniser)\n });\n }\n }\n\n constructor({ source, tokens, params }) {\n super({ source, tokens });\n params.parent = this;\n Object.defineProperty(this, \"params\", { value: params });\n }\n\n get type() {\n return \"extended-attribute\";\n }\n get name() {\n return this.tokens.name.value;\n }\n get rhs() {\n const { rhsType: type, tokens, list } = this.params;\n if (!type) {\n return null;\n }\n const value = this.params.rhsIsList ? list : unescape(tokens.secondaryName.value);\n return { type, value };\n }\n get arguments() {\n const { rhsIsList, list } = this.params;\n if (!list || rhsIsList) {\n return [];\n }\n return list;\n }\n\n *validate(defs) {\n const { name } = this;\n if (name === \"LegacyNoInterfaceObject\") {\n const message = `\\`[LegacyNoInterfaceObject]\\` extended attribute is an \\\nundesirable feature that may be removed from Web IDL in the future. Refer to the \\\n[relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more \\\ninformation.`;\n yield validationError(this.tokens.name, this, \"no-nointerfaceobject\", message, { level: \"warning\" });\n } else if (renamedLegacies.has(name)) {\n const message = `\\`[${name}]\\` extended attribute is a legacy feature \\\nthat is now renamed to \\`[${renamedLegacies.get(name)}]\\`. Refer to the \\\n[relevant upstream PR](https://github.com/heycam/webidl/pull/870) for more \\\ninformation.`;\n yield validationError(this.tokens.name, this, \"renamed-legacy\", message, {\n level: \"warning\",\n autofix: renameLegacyExtendedAttribute(this)\n });\n }\n for (const arg of this.arguments) {\n yield* arg.validate(defs);\n }\n }\n}\n\n/**\n * @param {SimpleExtendedAttribute} extAttr\n */\nfunction renameLegacyExtendedAttribute(extAttr) {\n return () => {\n const { name } = extAttr;\n extAttr.tokens.name.value = renamedLegacies.get(name);\n if (name === \"TreatNullAs\") {\n extAttr.params.tokens = {};\n }\n };\n}\n\n// Note: we parse something simpler than the official syntax. It's all that ever\n// seems to be used\nexport class ExtendedAttributes extends ArrayBase {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const tokens = {};\n tokens.open = tokeniser.consume(\"[\");\n if (!tokens.open) return new ExtendedAttributes({});\n const ret = new ExtendedAttributes({ source: tokeniser.source, tokens });\n ret.push(...list(tokeniser, {\n parser: SimpleExtendedAttribute.parse,\n listName: \"extended attribute\"\n }));\n tokens.close = tokeniser.consume(\"]\") || tokeniser.error(\"Unexpected closing token of extended attribute\");\n if (!ret.length) {\n tokeniser.error(\"Found an empty extended attribute\");\n }\n if (tokeniser.probe(\"[\")) {\n tokeniser.error(\"Illegal double extended attribute lists, consider merging them\");\n }\n return ret;\n }\n\n *validate(defs) {\n for (const extAttr of this) {\n yield* extAttr.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { unescape, type_with_extended_attributes, return_type, primitive_type, autoParenter } from \"./helpers.js\";\nimport { stringTypes, typeNameKeywords } from \"../tokeniser.js\";\nimport { validationError } from \"../error.js\";\nimport { idlTypeIncludesDictionary } from \"../validators/helpers.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nfunction generic_type(tokeniser, typeName) {\n const base = tokeniser.consume(\"FrozenArray\", \"ObservableArray\", \"Promise\", \"sequence\", \"record\");\n if (!base) {\n return;\n }\n const ret = autoParenter(new Type({ source: tokeniser.source, tokens: { base } }));\n ret.tokens.open = tokeniser.consume(\"<\") || tokeniser.error(`No opening bracket after ${base.type}`);\n switch (base.type) {\n case \"Promise\": {\n if (tokeniser.probe(\"[\")) tokeniser.error(\"Promise type cannot have extended attribute\");\n const subtype = return_type(tokeniser, typeName) || tokeniser.error(\"Missing Promise subtype\");\n ret.subtype.push(subtype);\n break;\n }\n case \"sequence\":\n case \"FrozenArray\":\n case \"ObservableArray\": {\n const subtype = type_with_extended_attributes(tokeniser, typeName) || tokeniser.error(`Missing ${base.type} subtype`);\n ret.subtype.push(subtype);\n break;\n }\n case \"record\": {\n if (tokeniser.probe(\"[\")) tokeniser.error(\"Record key cannot have extended attribute\");\n const keyType = tokeniser.consume(...stringTypes) || tokeniser.error(`Record key must be one of: ${stringTypes.join(\", \")}`);\n const keyIdlType = new Type({ source: tokeniser.source, tokens: { base: keyType }});\n keyIdlType.tokens.separator = tokeniser.consume(\",\") || tokeniser.error(\"Missing comma after record key type\");\n keyIdlType.type = typeName;\n const valueType = type_with_extended_attributes(tokeniser, typeName) || tokeniser.error(\"Error parsing generic type record\");\n ret.subtype.push(keyIdlType, valueType);\n break;\n }\n }\n if (!ret.idlType) tokeniser.error(`Error parsing generic type ${base.type}`);\n ret.tokens.close = tokeniser.consume(\">\") || tokeniser.error(`Missing closing bracket after ${base.type}`);\n return ret.this;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction type_suffix(tokeniser, obj) {\n const nullable = tokeniser.consume(\"?\");\n if (nullable) {\n obj.tokens.nullable = nullable;\n }\n if (tokeniser.probe(\"?\")) tokeniser.error(\"Can't nullable more than once\");\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nfunction single_type(tokeniser, typeName) {\n let ret = generic_type(tokeniser, typeName) || primitive_type(tokeniser);\n if (!ret) {\n const base = tokeniser.consume(\"identifier\", ...stringTypes, ...typeNameKeywords);\n if (!base) {\n return;\n }\n ret = new Type({ source: tokeniser.source, tokens: { base } });\n if (tokeniser.probe(\"<\")) tokeniser.error(`Unsupported generic type ${base.value}`);\n }\n if (ret.generic === \"Promise\" && tokeniser.probe(\"?\")) {\n tokeniser.error(\"Promise type cannot be nullable\");\n }\n ret.type = typeName || null;\n type_suffix(tokeniser, ret);\n if (ret.nullable && ret.idlType === \"any\") tokeniser.error(\"Type `any` cannot be made nullable\");\n return ret;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} type\n */\nfunction union_type(tokeniser, type) {\n const tokens = {};\n tokens.open = tokeniser.consume(\"(\");\n if (!tokens.open) return;\n const ret = autoParenter(new Type({ source: tokeniser.source, tokens }));\n ret.type = type || null;\n while (true) {\n const typ = type_with_extended_attributes(tokeniser) || tokeniser.error(\"No type after open parenthesis or 'or' in union type\");\n if (typ.idlType === \"any\") tokeniser.error(\"Type `any` cannot be included in a union type\");\n if (typ.generic === \"Promise\") tokeniser.error(\"Type `Promise` cannot be included in a union type\");\n ret.subtype.push(typ);\n const or = tokeniser.consume(\"or\");\n if (or) {\n typ.tokens.separator = or;\n }\n else break;\n }\n if (ret.idlType.length < 2) {\n tokeniser.error(\"At least two types are expected in a union type but found less\");\n }\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated union type\");\n type_suffix(tokeniser, ret);\n return ret.this;\n}\n\nexport class Type extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\n static parse(tokeniser, typeName) {\n return single_type(tokeniser, typeName) || union_type(tokeniser, typeName);\n }\n\n constructor({ source, tokens }) {\n super({ source, tokens });\n Object.defineProperty(this, \"subtype\", { value: [], writable: true });\n this.extAttrs = new ExtendedAttributes({});\n }\n\n get generic() {\n if (this.subtype.length && this.tokens.base) {\n return this.tokens.base.value;\n }\n return \"\";\n }\n get nullable() {\n return Boolean(this.tokens.nullable);\n }\n get union() {\n return Boolean(this.subtype.length) && !this.tokens.base;\n }\n get idlType() {\n if (this.subtype.length) {\n return this.subtype;\n }\n // Adding prefixes/postfixes for \"unrestricted float\", etc.\n const name = [\n this.tokens.prefix,\n this.tokens.base,\n this.tokens.postfix\n ].filter(t => t).map(t => t.value).join(\" \");\n return unescape(name);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n\n if (this.idlType === \"void\") {\n const message = `\\`void\\` is now replaced by \\`undefined\\`. Refer to the \\\n[relevant GitHub issue](https://github.com/heycam/webidl/issues/60) \\\nfor more information.`;\n yield validationError(this.tokens.base, this, \"replace-void\", message, {\n autofix: replaceVoid(this)\n });\n }\n\n /*\n * If a union is nullable, its subunions cannot include a dictionary\n * If not, subunions may include dictionaries if each union is not nullable\n */\n const typedef = !this.union && defs.unique.get(this.idlType);\n const target =\n this.union ? this :\n (typedef && typedef.type === \"typedef\") ? typedef.idlType :\n undefined;\n if (target && this.nullable) {\n // do not allow any dictionary\n const { reference } = idlTypeIncludesDictionary(target, defs) || {};\n if (reference) {\n const targetToken = (this.union ? reference : this).tokens.base;\n const message = \"Nullable union cannot include a dictionary type.\";\n yield validationError(targetToken, this, \"no-nullable-union-dict\", message);\n }\n } else {\n // allow some dictionary\n for (const subtype of this.subtype) {\n yield* subtype.validate(defs);\n }\n }\n }\n}\n\n/**\n * @param {Type} type\n */\nfunction replaceVoid(type) {\n return () => {\n type.tokens.base.value = \"undefined\";\n };\n}\n","import { Base } from \"./base.js\";\nimport { const_data, const_value } from \"./helpers.js\";\n\nexport class Default extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const assign = tokeniser.consume(\"=\");\n if (!assign) {\n return null;\n }\n const def = const_value(tokeniser) || tokeniser.consume(\"string\", \"null\", \"[\", \"{\") || tokeniser.error(\"No value for default\");\n const expression = [def];\n if (def.type === \"[\") {\n const close = tokeniser.consume(\"]\") || tokeniser.error(\"Default sequence value must be empty\");\n expression.push(close);\n } else if (def.type === \"{\") {\n const close = tokeniser.consume(\"}\") || tokeniser.error(\"Default dictionary value must be empty\");\n expression.push(close);\n }\n return new Default({ source: tokeniser.source, tokens: { assign }, expression });\n }\n\n constructor({ source, tokens, expression }) {\n super({ source, tokens });\n expression.parent = this;\n Object.defineProperty(this, \"expression\", { value: expression });\n }\n\n get type() {\n return const_data(this.expression[0]).type;\n }\n get value() {\n return const_data(this.expression[0]).value;\n }\n get negative() {\n return const_data(this.expression[0]).negative;\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { Default } from \"./default.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { unescape, type_with_extended_attributes, autoParenter, getFirstToken } from \"./helpers.js\";\nimport { argumentNameKeywords, Tokeniser } from \"../tokeniser.js\";\nimport { validationError } from \"../error.js\";\nimport { idlTypeIncludesDictionary, dictionaryIncludesRequiredField } from \"../validators/helpers.js\";\n\nexport class Argument extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const start_position = tokeniser.position;\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Argument({ source: tokeniser.source, tokens }));\n ret.extAttrs = ExtendedAttributes.parse(tokeniser);\n tokens.optional = tokeniser.consume(\"optional\");\n ret.idlType = type_with_extended_attributes(tokeniser, \"argument-type\");\n if (!ret.idlType) {\n return tokeniser.unconsume(start_position);\n }\n if (!tokens.optional) {\n tokens.variadic = tokeniser.consume(\"...\");\n }\n tokens.name = tokeniser.consume(\"identifier\", ...argumentNameKeywords);\n if (!tokens.name) {\n return tokeniser.unconsume(start_position);\n }\n ret.default = tokens.optional ? Default.parse(tokeniser) : null;\n return ret.this;\n }\n\n get type() {\n return \"argument\";\n }\n get optional() {\n return !!this.tokens.optional;\n }\n get variadic() {\n return !!this.tokens.variadic;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n /**\n * @param {import(\"../validator.js\").Definitions} defs\n */\n *validate(defs) {\n yield* this.idlType.validate(defs);\n const result = idlTypeIncludesDictionary(this.idlType, defs, { useNullableInner: true });\n if (result) {\n if (this.idlType.nullable) {\n const message = `Dictionary arguments cannot be nullable.`;\n yield validationError(this.tokens.name, this, \"no-nullable-dict-arg\", message);\n } else if (!this.optional) {\n if (this.parent && !dictionaryIncludesRequiredField(result.dictionary, defs) && isLastRequiredArgument(this)) {\n const message = `Dictionary argument must be optional if it has no required fields`;\n yield validationError(this.tokens.name, this, \"dict-arg-optional\", message, {\n autofix: autofixDictionaryArgumentOptionality(this)\n });\n }\n } else if (!this.default) {\n const message = `Optional dictionary arguments must have a default value of \\`{}\\`.`;\n yield validationError(this.tokens.name, this, \"dict-arg-default\", message, {\n autofix: autofixOptionalDictionaryDefaultValue(this)\n });\n }\n }\n }\n}\n\n/**\n * @param {Argument} arg\n */\nfunction isLastRequiredArgument(arg) {\n const list = arg.parent.arguments || arg.parent.list;\n const index = list.indexOf(arg);\n const requiredExists = list.slice(index + 1).some(a => !a.optional);\n return !requiredExists;\n}\n\n/**\n * @param {Argument} arg\n */\nfunction autofixDictionaryArgumentOptionality(arg) {\n return () => {\n const firstToken = getFirstToken(arg.idlType);\n arg.tokens.optional = { type: \"optional\", value: \"optional\", trivia: firstToken.trivia };\n firstToken.trivia = \" \";\n autofixOptionalDictionaryDefaultValue(arg)();\n };\n}\n\n/**\n * @param {Argument} arg\n */\nfunction autofixOptionalDictionaryDefaultValue(arg) {\n return () => {\n arg.default = Default.parse(new Tokeniser(\" = {}\"));\n };\n}\n","import { Base } from \"./base.js\";\nimport { return_type, argument_list, unescape, autoParenter } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\n\nexport class Operation extends Base {\n /**\n * @typedef {import(\"../tokeniser.js\").Token} Token\n *\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {Token} [options.special]\n * @param {Token} [options.regular]\n */\n static parse(tokeniser, { special, regular } = {}) {\n const tokens = { special };\n const ret = autoParenter(new Operation({ source: tokeniser.source, tokens }));\n if (special && special.value === \"stringifier\") {\n tokens.termination = tokeniser.consume(\";\");\n if (tokens.termination) {\n ret.arguments = [];\n return ret;\n }\n }\n if (!special && !regular) {\n tokens.special = tokeniser.consume(\"getter\", \"setter\", \"deleter\");\n }\n ret.idlType = return_type(tokeniser) || tokeniser.error(\"Missing return type\");\n tokens.name = tokeniser.consume(\"identifier\", \"includes\");\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"Invalid operation\");\n ret.arguments = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated operation\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated operation, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"operation\";\n }\n get name() {\n const { name } = this.tokens;\n if (!name) {\n return \"\";\n }\n return unescape(name.value);\n }\n get special() {\n if (!this.tokens.special) {\n return \"\";\n }\n return this.tokens.special.value;\n }\n\n *validate(defs) {\n if (!this.name && [\"\", \"static\"].includes(this.special)) {\n const message = `Regular or static operations must have both a return type and an identifier.`;\n yield validationError(this.tokens.open, this, \"incomplete-op\", message);\n }\n if (this.idlType) {\n yield* this.idlType.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, unescape, autoParenter } from \"./helpers.js\";\n\nexport class Attribute extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser, { special, noInherit = false, readonly = false } = {}) {\n const start_position = tokeniser.position;\n const tokens = { special };\n const ret = autoParenter(new Attribute({ source: tokeniser.source, tokens }));\n if (!special && !noInherit) {\n tokens.special = tokeniser.consume(\"inherit\");\n }\n if (ret.special === \"inherit\" && tokeniser.probe(\"readonly\")) {\n tokeniser.error(\"Inherited attributes cannot be read-only\");\n }\n tokens.readonly = tokeniser.consume(\"readonly\");\n if (readonly && !tokens.readonly && tokeniser.probe(\"attribute\")) {\n tokeniser.error(\"Attributes must be readonly in this context\");\n }\n tokens.base = tokeniser.consume(\"attribute\");\n if (!tokens.base) {\n tokeniser.unconsume(start_position);\n return;\n }\n ret.idlType = type_with_extended_attributes(tokeniser, \"attribute-type\") || tokeniser.error(\"Attribute lacks a type\");\n switch (ret.idlType.generic) {\n case \"sequence\":\n case \"record\": tokeniser.error(`Attributes cannot accept ${ret.idlType.generic} types`);\n }\n tokens.name = tokeniser.consume(\"identifier\", \"async\", \"required\") || tokeniser.error(\"Attribute lacks a name\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated attribute, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"attribute\";\n }\n get special() {\n if (!this.tokens.special) {\n return \"\";\n }\n return this.tokens.special.value;\n }\n get readonly() {\n return !!this.tokens.readonly;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n yield* this.idlType.validate(defs);\n }\n}\n","import { Type } from \"./type.js\";\nimport { Argument } from \"./argument.js\";\nimport { ExtendedAttributes, SimpleExtendedAttribute } from \"./extended-attributes.js\";\nimport { Operation } from \"./operation.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Tokeniser } from \"../tokeniser.js\";\n\n/**\n * @param {string} identifier\n */\nexport function unescape(identifier) {\n return identifier.startsWith('_') ? identifier.slice(1) : identifier;\n}\n\n/**\n * Parses comma-separated list\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} args\n * @param {Function} args.parser parser function for each item\n * @param {boolean} [args.allowDangler] whether to allow dangling comma\n * @param {string} [args.listName] the name to be shown on error messages\n */\nexport function list(tokeniser, { parser, allowDangler, listName = \"list\" }) {\n const first = parser(tokeniser);\n if (!first) {\n return [];\n }\n first.tokens.separator = tokeniser.consume(\",\");\n const items = [first];\n while (first.tokens.separator) {\n const item = parser(tokeniser);\n if (!item) {\n if (!allowDangler) {\n tokeniser.error(`Trailing comma in ${listName}`);\n }\n break;\n }\n item.tokens.separator = tokeniser.consume(\",\");\n items.push(item);\n if (!item.tokens.separator) break;\n }\n return items;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function const_value(tokeniser) {\n return tokeniser.consume(\"true\", \"false\", \"Infinity\", \"-Infinity\", \"NaN\", \"decimal\", \"integer\");\n}\n\n/**\n * @param {object} token\n * @param {string} token.type\n * @param {string} token.value\n */\nexport function const_data({ type, value }) {\n switch (type) {\n case \"true\":\n case \"false\":\n return { type: \"boolean\", value: type === \"true\" };\n case \"Infinity\":\n case \"-Infinity\":\n return { type: \"Infinity\", negative: type.startsWith(\"-\") };\n case \"[\":\n return { type: \"sequence\", value: [] };\n case \"{\":\n return { type: \"dictionary\" };\n case \"decimal\":\n case \"integer\":\n return { type: \"number\", value };\n case \"string\":\n return { type: \"string\", value: value.slice(1, -1) };\n default:\n return { type };\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function primitive_type(tokeniser) {\n function integer_type() {\n const prefix = tokeniser.consume(\"unsigned\");\n const base = tokeniser.consume(\"short\", \"long\");\n if (base) {\n const postfix = tokeniser.consume(\"long\");\n return new Type({ source, tokens: { prefix, base, postfix } });\n }\n if (prefix) tokeniser.error(\"Failed to parse integer type\");\n }\n\n function decimal_type() {\n const prefix = tokeniser.consume(\"unrestricted\");\n const base = tokeniser.consume(\"float\", \"double\");\n if (base) {\n return new Type({ source, tokens: { prefix, base } });\n }\n if (prefix) tokeniser.error(\"Failed to parse float type\");\n }\n\n const { source } = tokeniser;\n const num_type = integer_type(tokeniser) || decimal_type(tokeniser);\n if (num_type) return num_type;\n const base = tokeniser.consume(\"bigint\", \"boolean\", \"byte\", \"octet\", \"undefined\");\n if (base) {\n return new Type({ source, tokens: { base } });\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function argument_list(tokeniser) {\n return list(tokeniser, { parser: Argument.parse, listName: \"arguments list\" });\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nexport function type_with_extended_attributes(tokeniser, typeName) {\n const extAttrs = ExtendedAttributes.parse(tokeniser);\n const ret = Type.parse(tokeniser, typeName);\n if (ret) autoParenter(ret).extAttrs = extAttrs;\n return ret;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nexport function return_type(tokeniser, typeName) {\n const typ = Type.parse(tokeniser, typeName || \"return-type\");\n if (typ) {\n return typ;\n }\n const voidToken = tokeniser.consume(\"void\");\n if (voidToken) {\n const ret = new Type({ source: tokeniser.source, tokens: { base: voidToken } });\n ret.type = \"return-type\";\n return ret;\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function stringifier(tokeniser) {\n const special = tokeniser.consume(\"stringifier\");\n if (!special) return;\n const member = Attribute.parse(tokeniser, { special }) ||\n Operation.parse(tokeniser, { special }) ||\n tokeniser.error(\"Unterminated stringifier\");\n return member;\n}\n\n/**\n * @param {string} str\n */\nexport function getLastIndentation(str) {\n const lines = str.split(\"\\n\");\n // the first line visually binds to the preceding token\n if (lines.length) {\n const match = lines[lines.length - 1].match(/^\\s+/);\n if (match) {\n return match[0];\n }\n }\n return \"\";\n}\n\n/**\n * @param {string} parentTrivia\n */\nexport function getMemberIndentation(parentTrivia) {\n const indentation = getLastIndentation(parentTrivia);\n const indentCh = indentation.includes(\"\\t\") ? \"\\t\" : \" \";\n return indentation + indentCh;\n}\n\n/**\n * @param {object} def\n * @param {import(\"./extended-attributes.js\").ExtendedAttributes} def.extAttrs\n */\nexport function autofixAddExposedWindow(def) {\n return () => {\n if (def.extAttrs.length){\n const tokeniser = new Tokeniser(\"Exposed=Window,\");\n const exposed = SimpleExtendedAttribute.parse(tokeniser);\n exposed.tokens.separator = tokeniser.consume(\",\");\n const existing = def.extAttrs[0];\n if (!/^\\s/.test(existing.tokens.name.trivia)) {\n existing.tokens.name.trivia = ` ${existing.tokens.name.trivia}`;\n }\n def.extAttrs.unshift(exposed);\n } else {\n autoParenter(def).extAttrs = ExtendedAttributes.parse(new Tokeniser(\"[Exposed=Window]\"));\n const trivia = def.tokens.base.trivia;\n def.extAttrs.tokens.open.trivia = trivia;\n def.tokens.base.trivia = `\\n${getLastIndentation(trivia)}`;\n }\n };\n}\n\n/**\n * Get the first syntax token for the given IDL object.\n * @param {*} data\n */\nexport function getFirstToken(data) {\n if (data.extAttrs.length) {\n return data.extAttrs.tokens.open;\n }\n if (data.type === \"operation\" && !data.special) {\n return getFirstToken(data.idlType);\n }\n const tokens = Object.values(data.tokens).sort((x, y) => x.index - y.index);\n return tokens[0];\n}\n\n/**\n * @template T\n * @param {T[]} array\n * @param {(item: T) => boolean} predicate\n */\nexport function findLastIndex(array, predicate) {\n const index = array.slice().reverse().findIndex(predicate);\n if (index === -1) {\n return index;\n }\n return array.length - index - 1;\n}\n\n/**\n * Returns a proxy that auto-assign `parent` field.\n * @template T\n * @param {T} data\n * @param {*} [parent] The object that will be assigned to `parent`.\n * If absent, it will be `data` by default.\n * @return {T}\n */\nexport function autoParenter(data, parent) {\n if (!parent) {\n // Defaults to `data` unless specified otherwise.\n parent = data;\n }\n if (!data) {\n // This allows `autoParenter(undefined)` which again allows\n // `autoParenter(parse())` where the function may return nothing.\n return data;\n }\n return new Proxy(data, {\n get(target, p) {\n const value = target[p];\n if (Array.isArray(value)) {\n // Wraps the array so that any added items will also automatically\n // get their `parent` values.\n return autoParenter(value, target);\n }\n return value;\n },\n set(target, p, value) {\n target[p] = value;\n if (!value) {\n return true;\n } else if (Array.isArray(value)) {\n // Assigning an array will add `parent` to its items.\n for (const item of value) {\n if (typeof item.parent !== \"undefined\") {\n item.parent = parent;\n }\n }\n } else if (typeof value.parent !== \"undefined\") {\n value.parent = parent;\n }\n return true;\n }\n });\n}\n","import { syntaxError } from \"./error.js\";\nimport { unescape } from \"./productions/helpers.js\";\n\n// These regular expressions use the sticky flag so they will only match at\n// the current location (ie. the offset of lastIndex).\nconst tokenRe = {\n // This expression uses a lookahead assertion to catch false matches\n // against integers early.\n \"decimal\": /-?(?=[0-9]*\\.|[0-9]+[eE])(([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/y,\n \"integer\": /-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/y,\n \"identifier\": /[_-]?[A-Za-z][0-9A-Z_a-z-]*/y,\n \"string\": /\"[^\"]*\"/y,\n \"whitespace\": /[\\t\\n\\r ]+/y,\n \"comment\": /((\\/(\\/.*|\\*([^*]|\\*[^/])*\\*\\/)[\\t\\n\\r ]*)+)/y,\n \"other\": /[^\\t\\n\\r 0-9A-Za-z]/y\n};\n\nexport const typeNameKeywords = [\n \"ArrayBuffer\",\n \"DataView\",\n \"Int8Array\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint8Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"Uint8ClampedArray\",\n \"Float32Array\",\n \"Float64Array\",\n \"any\",\n \"object\",\n \"symbol\"\n];\n\nexport const stringTypes = [\n \"ByteString\",\n \"DOMString\",\n \"USVString\"\n];\n\nexport const argumentNameKeywords = [\n \"async\",\n \"attribute\",\n \"callback\",\n \"const\",\n \"constructor\",\n \"deleter\",\n \"dictionary\",\n \"enum\",\n \"getter\",\n \"includes\",\n \"inherit\",\n \"interface\",\n \"iterable\",\n \"maplike\",\n \"namespace\",\n \"partial\",\n \"required\",\n \"setlike\",\n \"setter\",\n \"static\",\n \"stringifier\",\n \"typedef\",\n \"unrestricted\"\n];\n\nconst nonRegexTerminals = [\n \"-Infinity\",\n \"FrozenArray\",\n \"Infinity\",\n \"NaN\",\n \"ObservableArray\",\n \"Promise\",\n \"bigint\",\n \"boolean\",\n \"byte\",\n \"double\",\n \"false\",\n \"float\",\n \"long\",\n \"mixin\",\n \"null\",\n \"octet\",\n \"optional\",\n \"or\",\n \"readonly\",\n \"record\",\n \"sequence\",\n \"short\",\n \"true\",\n \"undefined\",\n \"unsigned\",\n \"void\"\n].concat(argumentNameKeywords, stringTypes, typeNameKeywords);\n\nconst punctuations = [\n \"(\",\n \")\",\n \",\",\n \"...\",\n \":\",\n \";\",\n \"<\",\n \"=\",\n \">\",\n \"?\",\n \"[\",\n \"]\",\n \"{\",\n \"}\"\n];\n\nconst reserved = [\n // \"constructor\" is now a keyword\n \"_constructor\",\n \"toString\",\n \"_toString\",\n];\n\n/**\n * @typedef {ArrayItemType<ReturnType<typeof tokenise>>} Token\n * @param {string} str\n */\nfunction tokenise(str) {\n const tokens = [];\n let lastCharIndex = 0;\n let trivia = \"\";\n let line = 1;\n let index = 0;\n while (lastCharIndex < str.length) {\n const nextChar = str.charAt(lastCharIndex);\n let result = -1;\n\n if (/[\\t\\n\\r ]/.test(nextChar)) {\n result = attemptTokenMatch(\"whitespace\", { noFlushTrivia: true });\n } else if (nextChar === '/') {\n result = attemptTokenMatch(\"comment\", { noFlushTrivia: true });\n }\n\n if (result !== -1) {\n const currentTrivia = tokens.pop().value;\n line += (currentTrivia.match(/\\n/g) || []).length;\n trivia += currentTrivia;\n index -= 1;\n } else if (/[-0-9.A-Z_a-z]/.test(nextChar)) {\n result = attemptTokenMatch(\"decimal\");\n if (result === -1) {\n result = attemptTokenMatch(\"integer\");\n }\n if (result === -1) {\n result = attemptTokenMatch(\"identifier\");\n const lastIndex = tokens.length - 1;\n const token = tokens[lastIndex];\n if (result !== -1) {\n if (reserved.includes(token.value)) {\n const message = `${unescape(token.value)} is a reserved identifier and must not be used.`;\n throw new WebIDLParseError(syntaxError(tokens, lastIndex, null, message));\n } else if (nonRegexTerminals.includes(token.value)) {\n token.type = token.value;\n }\n }\n }\n } else if (nextChar === '\"') {\n result = attemptTokenMatch(\"string\");\n }\n\n for (const punctuation of punctuations) {\n if (str.startsWith(punctuation, lastCharIndex)) {\n tokens.push({ type: punctuation, value: punctuation, trivia, line, index });\n trivia = \"\";\n lastCharIndex += punctuation.length;\n result = lastCharIndex;\n break;\n }\n }\n\n // other as the last try\n if (result === -1) {\n result = attemptTokenMatch(\"other\");\n }\n if (result === -1) {\n throw new Error(\"Token stream not progressing\");\n }\n lastCharIndex = result;\n index += 1;\n }\n\n // remaining trivia as eof\n tokens.push({\n type: \"eof\",\n value: \"\",\n trivia\n });\n\n return tokens;\n\n /**\n * @param {keyof typeof tokenRe} type\n * @param {object} options\n * @param {boolean} [options.noFlushTrivia]\n */\n function attemptTokenMatch(type, { noFlushTrivia } = {}) {\n const re = tokenRe[type];\n re.lastIndex = lastCharIndex;\n const result = re.exec(str);\n if (result) {\n tokens.push({ type, value: result[0], trivia, line, index });\n if (!noFlushTrivia) {\n trivia = \"\";\n }\n return re.lastIndex;\n }\n return -1;\n }\n}\n\nexport class Tokeniser {\n /**\n * @param {string} idl\n */\n constructor(idl) {\n this.source = tokenise(idl);\n this.position = 0;\n }\n\n /**\n * @param {string} message\n * @return {never}\n */\n error(message) {\n throw new WebIDLParseError(syntaxError(this.source, this.position, this.current, message));\n }\n\n /**\n * @param {string} type\n */\n probe(type) {\n return this.source.length > this.position && this.source[this.position].type === type;\n }\n\n /**\n * @param {...string} candidates\n */\n consume(...candidates) {\n for (const type of candidates) {\n if (!this.probe(type)) continue;\n const token = this.source[this.position];\n this.position++;\n return token;\n }\n }\n\n /**\n * @param {number} position\n */\n unconsume(position) {\n this.position = position;\n }\n}\n\nexport class WebIDLParseError extends Error {\n /**\n * @param {object} options\n * @param {string} options.message\n * @param {string} options.bareMessage\n * @param {string} options.context\n * @param {number} options.line\n * @param {*} options.sourceName\n * @param {string} options.input\n * @param {*[]} options.tokens\n */\n constructor({ message, bareMessage, context, line, sourceName, input, tokens }) {\n super(message);\n\n this.name = \"WebIDLParseError\"; // not to be mangled\n this.bareMessage = bareMessage;\n this.context = context;\n this.line = line;\n this.sourceName = sourceName;\n this.input = input;\n this.tokens = tokens;\n }\n}\n","import { list, unescape, autoParenter } from \"./helpers.js\";\nimport { Token } from \"./token.js\";\nimport { Base } from \"./base.js\";\n\nclass EnumValue extends Token {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const value = tokeniser.consume(\"string\");\n if (value) {\n return new EnumValue({ source: tokeniser.source, tokens: { value } });\n }\n }\n\n get type() {\n return \"enum-value\";\n }\n get value() {\n return super.value.slice(1, -1);\n }\n}\n\nexport class Enum extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n tokens.base = tokeniser.consume(\"enum\");\n if (!tokens.base) {\n return;\n }\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"No name for enum\");\n const ret = autoParenter(new Enum({ source: tokeniser.source, tokens }));\n tokeniser.current = ret.this;\n tokens.open = tokeniser.consume(\"{\") || tokeniser.error(\"Bodyless enum\");\n ret.values = list(tokeniser, {\n parser: EnumValue.parse,\n allowDangler: true,\n listName: \"enumeration\"\n });\n if (tokeniser.probe(\"string\")) {\n tokeniser.error(\"No comma between enum values\");\n }\n tokens.close = tokeniser.consume(\"}\") || tokeniser.error(\"Unexpected value in enum\");\n if (!ret.values.length) {\n tokeniser.error(\"No value in enum\");\n }\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No semicolon after enum\");\n return ret.this;\n }\n\n get type() {\n return \"enum\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { unescape } from \"./helpers.js\";\n\nexport class Includes extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const target = tokeniser.consume(\"identifier\");\n if (!target) {\n return;\n }\n const tokens = { target };\n tokens.includes = tokeniser.consume(\"includes\");\n if (!tokens.includes) {\n tokeniser.unconsume(target.index);\n return;\n }\n tokens.mixin = tokeniser.consume(\"identifier\") || tokeniser.error(\"Incomplete includes statement\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No terminating ; for includes statement\");\n return new Includes({ source: tokeniser.source, tokens });\n }\n\n get type() {\n return \"includes\";\n }\n get target() {\n return unescape(this.tokens.target.value);\n }\n get includes() {\n return unescape(this.tokens.mixin.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, unescape, autoParenter } from \"./helpers.js\";\n\nexport class Typedef extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Typedef({ source: tokeniser.source, tokens }));\n tokens.base = tokeniser.consume(\"typedef\");\n if (!tokens.base) {\n return;\n }\n ret.idlType = type_with_extended_attributes(tokeniser, \"typedef-type\") || tokeniser.error(\"Typedef lacks a type\");\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Typedef lacks a name\");\n tokeniser.current = ret.this;\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated typedef, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"typedef\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.idlType.validate(defs);\n }\n}\n","import { Base } from \"./base.js\";\nimport { return_type, argument_list, unescape, autoParenter } from \"./helpers.js\";\n\nexport class CallbackFunction extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser, base) {\n const tokens = { base };\n const ret = autoParenter(new CallbackFunction({ source: tokeniser.source, tokens }));\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Callback lacks a name\");\n tokeniser.current = ret.this;\n tokens.assign = tokeniser.consume(\"=\") || tokeniser.error(\"Callback lacks an assignment\");\n ret.idlType = return_type(tokeniser) || tokeniser.error(\"Callback lacks a return type\");\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"Callback lacks parentheses for arguments\");\n ret.arguments = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated callback\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated callback, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"callback\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n yield* this.idlType.validate(defs);\n }\n}\n","import { Base } from \"./base.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { unescape, autoParenter } from \"./helpers.js\";\n\n/**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\nfunction inheritance(tokeniser) {\n const colon = tokeniser.consume(\":\");\n if (!colon) {\n return {};\n }\n const inheritance = tokeniser.consume(\"identifier\") || tokeniser.error(\"Inheritance lacks a type\");\n return { colon, inheritance };\n}\n\nexport class Container extends Base {\n /**\n * @template T\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {T} instance\n * @param {*} args\n */\n static parse(tokeniser, instance, { type, inheritable, allowedMembers }) {\n const { tokens } = instance;\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(`Missing name in ${instance.type}`);\n tokeniser.current = instance;\n instance = autoParenter(instance);\n if (inheritable) {\n Object.assign(tokens, inheritance(tokeniser));\n }\n tokens.open = tokeniser.consume(\"{\") || tokeniser.error(`Bodyless ${type}`);\n instance.members = [];\n while (true) {\n tokens.close = tokeniser.consume(\"}\");\n if (tokens.close) {\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(`Missing semicolon after ${type}`);\n return instance.this;\n }\n const ea = ExtendedAttributes.parse(tokeniser);\n let mem;\n for (const [parser, ...args] of allowedMembers) {\n mem = autoParenter(parser(tokeniser, ...args));\n if (mem) {\n break;\n }\n }\n if (!mem) {\n tokeniser.error(\"Unknown member\");\n }\n mem.extAttrs = ea;\n instance.members.push(mem.this);\n }\n }\n\n get partial() {\n return !!this.tokens.partial;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get inheritance() {\n if (!this.tokens.inheritance) {\n return null;\n }\n return unescape(this.tokens.inheritance.value);\n }\n\n *validate(defs) {\n for (const member of this.members) {\n if (member.validate) {\n yield* member.validate(defs);\n }\n }\n }\n }\n","import { Base } from \"./base.js\";\nimport { Type } from \"./type.js\";\nimport { const_data, const_value, primitive_type, autoParenter, unescape } from \"./helpers.js\";\n\nexport class Constant extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n tokens.base = tokeniser.consume(\"const\");\n if (!tokens.base) {\n return;\n }\n let idlType = primitive_type(tokeniser);\n if (!idlType) {\n const base = tokeniser.consume(\"identifier\") || tokeniser.error(\"Const lacks a type\");\n idlType = new Type({ source: tokeniser.source, tokens: { base } });\n }\n if (tokeniser.probe(\"?\")) {\n tokeniser.error(\"Unexpected nullable constant type\");\n }\n idlType.type = \"const-type\";\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Const lacks a name\");\n tokens.assign = tokeniser.consume(\"=\") || tokeniser.error(\"Const lacks value assignment\");\n tokens.value = const_value(tokeniser) || tokeniser.error(\"Const lacks a value\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated const, expected `;`\");\n const ret = new Constant({ source: tokeniser.source, tokens });\n autoParenter(ret).idlType = idlType;\n return ret;\n }\n\n get type() {\n return \"const\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get value() {\n return const_data(this.tokens.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, autoParenter, argument_list } from \"./helpers.js\";\n\nexport class IterableLike extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const start_position = tokeniser.position;\n const tokens = {};\n const ret = autoParenter(new IterableLike({ source: tokeniser.source, tokens }));\n tokens.readonly = tokeniser.consume(\"readonly\");\n if (!tokens.readonly) {\n tokens.async = tokeniser.consume(\"async\");\n }\n tokens.base =\n tokens.readonly ? tokeniser.consume(\"maplike\", \"setlike\") :\n tokens.async ? tokeniser.consume(\"iterable\") :\n tokeniser.consume(\"iterable\", \"maplike\", \"setlike\");\n if (!tokens.base) {\n tokeniser.unconsume(start_position);\n return;\n }\n\n const { type } = ret;\n const secondTypeRequired = type === \"maplike\";\n const secondTypeAllowed = secondTypeRequired || type === \"iterable\";\n const argumentAllowed = ret.async && type === \"iterable\";\n\n tokens.open = tokeniser.consume(\"<\") || tokeniser.error(`Missing less-than sign \\`<\\` in ${type} declaration`);\n const first = type_with_extended_attributes(tokeniser) || tokeniser.error(`Missing a type argument in ${type} declaration`);\n ret.idlType = [first];\n ret.arguments = [];\n\n if (secondTypeAllowed) {\n first.tokens.separator = tokeniser.consume(\",\");\n if (first.tokens.separator) {\n ret.idlType.push(type_with_extended_attributes(tokeniser));\n }\n else if (secondTypeRequired) {\n tokeniser.error(`Missing second type argument in ${type} declaration`);\n }\n }\n\n tokens.close = tokeniser.consume(\">\") || tokeniser.error(`Missing greater-than sign \\`>\\` in ${type} declaration`);\n\n if (tokeniser.probe(\"(\")) {\n if (argumentAllowed) {\n tokens.argsOpen = tokeniser.consume(\"(\");\n ret.arguments.push(...argument_list(tokeniser));\n tokens.argsClose = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated async iterable argument list\");\n } else {\n tokeniser.error(`Arguments are only allowed for \\`async iterable\\``);\n }\n }\n\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(`Missing semicolon after ${type} declaration`);\n\n return ret.this;\n }\n\n get type() {\n return this.tokens.base.value;\n }\n get readonly() {\n return !!this.tokens.readonly;\n }\n get async() {\n return !!this.tokens.async;\n }\n\n *validate(defs) {\n for (const type of this.idlType) {\n yield* type.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { argument_list, autoParenter } from \"./helpers.js\";\n\nexport class Constructor extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const base = tokeniser.consume(\"constructor\");\n if (!base) {\n return;\n }\n /** @type {Base[\"tokens\"]} */\n const tokens = { base };\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"No argument list in constructor\");\n const args = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated constructor\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No semicolon after constructor\");\n const ret = new Constructor({ source: tokeniser.source, tokens });\n autoParenter(ret).arguments = args;\n return ret;\n }\n\n get type() {\n return \"constructor\";\n }\n\n *validate(defs) {\n if (this.idlType) {\n yield* this.idlType.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Container } from \"./container.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { Constant } from \"./constant.js\";\nimport { IterableLike } from \"./iterable.js\";\nimport { stringifier, autofixAddExposedWindow, getMemberIndentation, getLastIndentation, getFirstToken, findLastIndex, autoParenter } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\nimport { checkInterfaceMemberDuplication } from \"../validators/interface.js\";\nimport { Constructor } from \"./constructor.js\";\nimport { Tokeniser } from \"../tokeniser.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction static_member(tokeniser) {\n const special = tokeniser.consume(\"static\");\n if (!special) return;\n const member = Attribute.parse(tokeniser, { special }) ||\n Operation.parse(tokeniser, { special }) ||\n tokeniser.error(\"No body in static member\");\n return member;\n}\n\nexport class Interface extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser, base, { partial = null } = {}) {\n const tokens = { partial, base };\n return Container.parse(tokeniser, new Interface({ source: tokeniser.source, tokens }), {\n type: \"interface\",\n inheritable: !partial,\n allowedMembers: [\n [Constant.parse],\n [Constructor.parse],\n [static_member],\n [stringifier],\n [IterableLike.parse],\n [Attribute.parse],\n [Operation.parse]\n ]\n });\n }\n\n get type() {\n return \"interface\";\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n if (\n !this.partial &&\n this.extAttrs.every(extAttr => extAttr.name !== \"Exposed\")\n ) {\n const message = `Interfaces must have \\`[Exposed]\\` extended attribute. \\\nTo fix, add, for example, \\`[Exposed=Window]\\`. Please also consider carefully \\\nif your interface should also be exposed in a Worker scope. Refer to the \\\n[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \\\nfor more information.`;\n yield validationError(this.tokens.name, this, \"require-exposed\", message, {\n autofix: autofixAddExposedWindow(this)\n });\n }\n const oldConstructors = this.extAttrs.filter(extAttr => extAttr.name === \"Constructor\");\n for (const constructor of oldConstructors) {\n const message = `Constructors should now be represented as a \\`constructor()\\` operation on the interface \\\ninstead of \\`[Constructor]\\` extended attribute. Refer to the \\\n[WebIDL spec section on constructor operations](https://heycam.github.io/webidl/#idl-constructors) \\\nfor more information.`;\n yield validationError(constructor.tokens.name, this, \"constructor-member\", message, {\n autofix: autofixConstructor(this, constructor)\n });\n }\n\n const isGlobal = this.extAttrs.some(extAttr => extAttr.name === \"Global\");\n if (isGlobal) {\n const factoryFunctions = this.extAttrs.filter(extAttr => extAttr.name === \"LegacyFactoryFunction\");\n for (const named of factoryFunctions) {\n const message = `Interfaces marked as \\`[Global]\\` cannot have factory functions.`;\n yield validationError(named.tokens.name, this, \"no-constructible-global\", message);\n }\n\n const constructors = this.members.filter(member => member.type === \"constructor\");\n for (const named of constructors) {\n const message = `Interfaces marked as \\`[Global]\\` cannot have constructors.`;\n yield validationError(named.tokens.base, this, \"no-constructible-global\", message);\n }\n }\n\n yield* super.validate(defs);\n if (!this.partial) {\n yield* checkInterfaceMemberDuplication(defs, this);\n }\n }\n}\n\nfunction autofixConstructor(interfaceDef, constructorExtAttr) {\n interfaceDef = autoParenter(interfaceDef);\n return () => {\n const indentation = getLastIndentation(interfaceDef.extAttrs.tokens.open.trivia);\n const memberIndent = interfaceDef.members.length ?\n getLastIndentation(getFirstToken(interfaceDef.members[0]).trivia) :\n getMemberIndentation(indentation);\n const constructorOp = Constructor.parse(new Tokeniser(`\\n${memberIndent}constructor();`));\n constructorOp.extAttrs = new ExtendedAttributes({});\n autoParenter(constructorOp).arguments = constructorExtAttr.arguments;\n\n const existingIndex = findLastIndex(interfaceDef.members, m => m.type === \"constructor\");\n interfaceDef.members.splice(existingIndex + 1, 0, constructorOp);\n\n const { close } = interfaceDef.tokens;\n if (!close.trivia.includes(\"\\n\")) {\n close.trivia += `\\n${indentation}`;\n }\n\n const { extAttrs } = interfaceDef;\n const index = extAttrs.indexOf(constructorExtAttr);\n const removed = extAttrs.splice(index, 1);\n if (!extAttrs.length) {\n extAttrs.tokens.open = extAttrs.tokens.close = undefined;\n } else if (extAttrs.length === index) {\n extAttrs[index - 1].tokens.separator = undefined;\n } else if (!extAttrs[index].tokens.name.trivia.trim()) {\n extAttrs[index].tokens.name.trivia = removed[0].tokens.name.trivia;\n }\n };\n}\n","// @ts-check\n\nimport { validationError } from \"../error.js\";\n\nexport function* checkInterfaceMemberDuplication(defs, i) {\n const opNames = new Set(getOperations(i).map(op => op.name));\n const partials = defs.partials.get(i.name) || [];\n const mixins = defs.mixinMap.get(i.name) || [];\n for (const ext of [...partials, ...mixins]) {\n const additions = getOperations(ext);\n yield* forEachExtension(additions, opNames, ext, i);\n for (const addition of additions) {\n opNames.add(addition.name);\n }\n }\n\n function* forEachExtension(additions, existings, ext, base) {\n for (const addition of additions) {\n const { name } = addition;\n if (name && existings.has(name)) {\n const message = `The operation \"${name}\" has already been defined for the base interface \"${base.name}\" either in itself or in a mixin`;\n yield validationError(addition.tokens.name, ext, \"no-cross-overload\", message);\n }\n }\n }\n\n function getOperations(i) {\n return i.members\n .filter(({type}) => type === \"operation\");\n }\n}\n","import { Container } from \"./container.js\";\nimport { Constant } from \"./constant.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { stringifier } from \"./helpers.js\";\n\nexport class Mixin extends Container {\n /**\n * @typedef {import(\"../tokeniser.js\").Token} Token\n *\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {Token} base\n * @param {object} [options]\n * @param {Token} [options.partial]\n */\n static parse(tokeniser, base, { partial } = {}) {\n const tokens = { partial, base };\n tokens.mixin = tokeniser.consume(\"mixin\");\n if (!tokens.mixin) {\n return;\n }\n return Container.parse(tokeniser, new Mixin({ source: tokeniser.source, tokens }), {\n type: \"interface mixin\",\n allowedMembers: [\n [Constant.parse],\n [stringifier],\n [Attribute.parse, { noInherit: true }],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"interface mixin\";\n }\n}\n","import { Base } from \"./base.js\";\nimport { unescape, type_with_extended_attributes, autoParenter } from \"./helpers.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { Default } from \"./default.js\";\n\nexport class Field extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Field({ source: tokeniser.source, tokens }));\n ret.extAttrs = ExtendedAttributes.parse(tokeniser);\n tokens.required = tokeniser.consume(\"required\");\n ret.idlType = type_with_extended_attributes(tokeniser, \"dictionary-type\") || tokeniser.error(\"Dictionary member lacks a type\");\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Dictionary member lacks a name\");\n ret.default = Default.parse(tokeniser);\n if (tokens.required && ret.default) tokeniser.error(\"Required member must not have a default\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated dictionary member, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"field\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get required() {\n return !!this.tokens.required;\n }\n\n *validate(defs) {\n yield* this.idlType.validate(defs);\n }\n}\n","// @ts-check\n\nimport { Container } from \"./container.js\";\nimport { Field } from \"./field.js\";\n\nexport class Dictionary extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {import(\"../tokeniser.js\").Token} [options.partial]\n */\n static parse(tokeniser, { partial } = {}) {\n const tokens = { partial };\n tokens.base = tokeniser.consume(\"dictionary\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new Dictionary({ source: tokeniser.source, tokens }), {\n type: \"dictionary\",\n inheritable: !partial,\n allowedMembers: [\n [Field.parse],\n ]\n });\n }\n\n get type() {\n return \"dictionary\";\n }\n}\n","import { Container } from \"./container.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { validationError } from \"../error.js\";\nimport { autofixAddExposedWindow } from \"./helpers.js\";\n\nexport class Namespace extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {import(\"../tokeniser.js\").Token} [options.partial]\n */\n static parse(tokeniser, { partial } = {}) {\n const tokens = { partial };\n tokens.base = tokeniser.consume(\"namespace\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new Namespace({ source: tokeniser.source, tokens }), {\n type: \"namespace\",\n allowedMembers: [\n [Attribute.parse, { noInherit: true, readonly: true }],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"namespace\";\n }\n\n *validate(defs) {\n if (!this.partial && this.extAttrs.every(extAttr => extAttr.name !== \"Exposed\")) {\n const message = `Namespaces must have [Exposed] extended attribute. \\\nTo fix, add, for example, [Exposed=Window]. Please also consider carefully \\\nif your namespace should also be exposed in a Worker scope. Refer to the \\\n[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \\\nfor more information.`;\n yield validationError(this.tokens.name, this, \"require-exposed\", message, {\n autofix: autofixAddExposedWindow(this)\n });\n }\n yield* super.validate(defs);\n }\n}\n","// @ts-check\n\nimport { Container } from \"./container.js\";\nimport { Operation } from \"./operation.js\";\nimport { Constant } from \"./constant.js\";\n\nexport class CallbackInterface extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser, callback, { partial = null } = {}) {\n const tokens = { callback };\n tokens.base = tokeniser.consume(\"interface\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new CallbackInterface({ source: tokeniser.source, tokens }), {\n type: \"callback interface\",\n inheritable: !partial,\n allowedMembers: [\n [Constant.parse],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"callback interface\";\n }\n}\n","\"use strict\";\n\nimport { Tokeniser } from \"./tokeniser.js\";\nimport { Enum } from \"./productions/enum.js\";\nimport { Includes } from \"./productions/includes.js\";\nimport { ExtendedAttributes } from \"./productions/extended-attributes.js\";\nimport { Typedef } from \"./productions/typedef.js\";\nimport { CallbackFunction } from \"./productions/callback.js\";\nimport { Interface } from \"./productions/interface.js\";\nimport { Mixin } from \"./productions/mixin.js\";\nimport { Dictionary } from \"./productions/dictionary.js\";\nimport { Namespace } from \"./productions/namespace.js\";\nimport { CallbackInterface } from \"./productions/callback-interface.js\";\nimport { autoParenter } from \"./productions/helpers.js\";\n\n/**\n * @param {Tokeniser} tokeniser\n * @param {object} options\n * @param {boolean} [options.concrete]\n */\nfunction parseByTokens(tokeniser, options) {\n const source = tokeniser.source;\n\n function error(str) {\n tokeniser.error(str);\n }\n\n function consume(...candidates) {\n return tokeniser.consume(...candidates);\n }\n\n function callback() {\n const callback = consume(\"callback\");\n if (!callback) return;\n if (tokeniser.probe(\"interface\")) {\n return CallbackInterface.parse(tokeniser, callback);\n }\n return CallbackFunction.parse(tokeniser, callback);\n }\n\n function interface_(opts) {\n const base = consume(\"interface\");\n if (!base) return;\n const ret = Mixin.parse(tokeniser, base, opts) ||\n Interface.parse(tokeniser, base, opts) ||\n error(\"Interface has no proper body\");\n return ret;\n }\n\n function partial() {\n const partial = consume(\"partial\");\n if (!partial) return;\n return Dictionary.parse(tokeniser, { partial }) ||\n interface_({ partial }) ||\n Namespace.parse(tokeniser, { partial }) ||\n error(\"Partial doesn't apply to anything\");\n }\n\n function definition() {\n return callback() ||\n interface_() ||\n partial() ||\n Dictionary.parse(tokeniser) ||\n Enum.parse(tokeniser) ||\n Typedef.parse(tokeniser) ||\n Includes.parse(tokeniser) ||\n Namespace.parse(tokeniser);\n }\n\n function definitions() {\n if (!source.length) return [];\n const defs = [];\n while (true) {\n const ea = ExtendedAttributes.parse(tokeniser);\n const def = definition();\n if (!def) {\n if (ea.length) error(\"Stray extended attributes\");\n break;\n }\n autoParenter(def).extAttrs = ea;\n defs.push(def);\n }\n const eof = consume(\"eof\");\n if (options.concrete) {\n defs.push(eof);\n }\n return defs;\n }\n const res = definitions();\n if (tokeniser.position < source.length) error(\"Unrecognised tokens\");\n return res;\n}\n\n/**\n * @param {string} str\n * @param {object} [options]\n * @param {*} [options.sourceName]\n * @param {boolean} [options.concrete]\n */\nexport function parse(str, options = {}) {\n const tokeniser = new Tokeniser(str);\n if (typeof options.sourceName !== \"undefined\") {\n tokeniser.source.name = options.sourceName;\n }\n return parseByTokens(tokeniser, options);\n}\n","\"use strict\";\n\nfunction noop(arg) {\n return arg;\n}\n\nconst templates = {\n wrap: items => items.join(\"\"),\n trivia: noop,\n name: noop,\n reference: noop,\n type: noop,\n generic: noop,\n nameless: noop,\n inheritance: noop,\n definition: noop,\n extendedAttribute: noop,\n extendedAttributeReference: noop\n};\n\nexport function write(ast, { templates: ts = templates } = {}) {\n ts = Object.assign({}, templates, ts);\n\n function reference(raw, { unescaped, context }) {\n if (!unescaped) {\n unescaped = raw.startsWith(\"_\") ? raw.slice(1) : raw;\n }\n return ts.reference(raw, unescaped, context);\n }\n\n function token(t, wrapper = noop, ...args) {\n if (!t) {\n return \"\";\n }\n const value = wrapper(t.value, ...args);\n return ts.wrap([ts.trivia(t.trivia), value]);\n }\n\n function reference_token(t, context) {\n return token(t, reference, { context });\n }\n\n function name_token(t, arg) {\n return token(t, ts.name, arg);\n }\n\n function type_body(it) {\n if (it.union || it.generic) {\n return ts.wrap([\n token(it.tokens.base, ts.generic),\n token(it.tokens.open),\n ...it.subtype.map(type),\n token(it.tokens.close)\n ]);\n }\n const firstToken = it.tokens.prefix || it.tokens.base;\n const prefix = it.tokens.prefix ? [\n it.tokens.prefix.value,\n ts.trivia(it.tokens.base.trivia)\n ] : [];\n const ref = reference(ts.wrap([\n ...prefix,\n it.tokens.base.value,\n token(it.tokens.postfix)\n ]), { unescaped: it.idlType, context: it });\n return ts.wrap([ts.trivia(firstToken.trivia), ref]);\n }\n function type(it) {\n return ts.wrap([\n extended_attributes(it.extAttrs),\n type_body(it),\n token(it.tokens.nullable),\n token(it.tokens.separator)\n ]);\n }\n function default_(def) {\n if (!def) {\n return \"\";\n }\n return ts.wrap([\n token(def.tokens.assign),\n ...def.expression.map(t => token(t))\n ]);\n }\n function argument(arg) {\n return ts.wrap([\n extended_attributes(arg.extAttrs),\n token(arg.tokens.optional),\n ts.type(type(arg.idlType)),\n token(arg.tokens.variadic),\n name_token(arg.tokens.name, { data: arg }),\n default_(arg.default),\n token(arg.tokens.separator)\n ]);\n }\n function extended_attribute_listitem(str) {\n return ts.wrap([\n token(str.tokens.value),\n token(str.tokens.separator)\n ]);\n }\n function identifier(id, context) {\n return ts.wrap([\n reference_token(id.tokens.value, context),\n token(id.tokens.separator)\n ]);\n }\n function make_ext_at(it) {\n const { rhsType } = it.params;\n return ts.wrap([\n ts.trivia(it.tokens.name.trivia),\n ts.extendedAttribute(ts.wrap([\n ts.extendedAttributeReference(it.name),\n token(it.params.tokens.assign),\n reference_token(it.params.tokens.secondaryName, it),\n token(it.params.tokens.open),\n ...!it.params.list ? [] :\n it.params.list.map(\n rhsType === \"identifier-list\" ? id => identifier(id, it) :\n rhsType && rhsType.endsWith(\"-list\") ? extended_attribute_listitem :\n argument\n ),\n token(it.params.tokens.close)\n ])),\n token(it.tokens.separator)\n ]);\n }\n function extended_attributes(eats) {\n if (!eats.length) return \"\";\n return ts.wrap([\n token(eats.tokens.open),\n ...eats.map(make_ext_at),\n token(eats.tokens.close)\n ]);\n }\n\n function operation(it, parent) {\n const body = it.idlType ? [\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.open),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.close),\n ] : [];\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n it.tokens.name ? token(it.tokens.special) : token(it.tokens.special, ts.nameless, { data: it, parent }),\n ...body,\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function attribute(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.special),\n token(it.tokens.readonly),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function constructor(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base, ts.nameless, { data: it, parent }),\n token(it.tokens.open),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function inheritance(inh) {\n if (!inh.tokens.inheritance) {\n return \"\";\n }\n return ts.wrap([\n token(inh.tokens.colon),\n ts.trivia(inh.tokens.inheritance.trivia),\n ts.inheritance(reference(inh.tokens.inheritance.value, { context: inh }))\n ]);\n }\n\n function container(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.callback),\n token(it.tokens.partial),\n token(it.tokens.base),\n token(it.tokens.mixin),\n name_token(it.tokens.name, { data: it }),\n inheritance(it),\n token(it.tokens.open),\n iterate(it.members, it),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it });\n }\n\n function field(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.required),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n default_(it.default),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function const_(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.assign),\n token(it.tokens.value),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function typedef(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function includes(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n reference_token(it.tokens.target, it),\n token(it.tokens.includes),\n reference_token(it.tokens.mixin, it),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function callback(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.assign),\n ts.type(type(it.idlType)),\n token(it.tokens.open),\n ...it.arguments.map(argument),\n token(it.tokens.close),\n token(it.tokens.termination),\n ]), { data: it });\n }\n function enum_(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.open),\n iterate(it.values, it),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function enum_value(v, parent) {\n return ts.wrap([\n ts.trivia(v.tokens.value.trivia),\n ts.definition(\n ts.wrap(['\"', ts.name(v.value, { data: v, parent }), '\"']),\n { data: v, parent }\n ),\n token(v.tokens.separator)\n ]);\n }\n function iterable_like(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.readonly),\n token(it.tokens.async),\n token(it.tokens.base, ts.generic),\n token(it.tokens.open),\n ts.wrap(it.idlType.map(type)),\n token(it.tokens.close),\n token(it.tokens.argsOpen),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.argsClose),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function eof(it) {\n return ts.trivia(it.trivia);\n }\n\n const table = {\n interface: container,\n \"interface mixin\": container,\n namespace: container,\n operation,\n attribute,\n constructor,\n dictionary: container,\n field,\n const: const_,\n typedef,\n includes,\n callback,\n enum: enum_,\n \"enum-value\": enum_value,\n iterable: iterable_like,\n maplike: iterable_like,\n setlike: iterable_like,\n \"callback interface\": container,\n eof\n };\n function dispatch(it, parent) {\n const dispatcher = table[it.type];\n if (!dispatcher) {\n throw new Error(`Type \"${it.type}\" is unsupported`);\n }\n return table[it.type](it, parent);\n }\n function iterate(things, parent) {\n if (!things) return;\n const results = things.map(thing => dispatch(thing, parent));\n return ts.wrap(results);\n }\n return iterate(ast);\n}\n","\"use strict\";\n\nimport { validationError as error } from \"./error.js\";\n\nfunction getMixinMap(all, unique) {\n const map = new Map();\n const includes = all.filter(def => def.type === \"includes\");\n for (const include of includes) {\n const mixin = unique.get(include.includes);\n if (!mixin) {\n continue;\n }\n const array = map.get(include.target);\n if (array) {\n array.push(mixin);\n } else {\n map.set(include.target, [mixin]);\n }\n }\n return map;\n}\n\n/**\n * @typedef {ReturnType<typeof groupDefinitions>} Definitions\n */\nfunction groupDefinitions(all) {\n const unique = new Map();\n const duplicates = new Set();\n const partials = new Map();\n for (const def of all) {\n if (def.partial) {\n const array = partials.get(def.name);\n if (array) {\n array.push(def);\n } else {\n partials.set(def.name, [def]);\n }\n continue;\n }\n if (!def.name) {\n continue;\n }\n if (!unique.has(def.name)) {\n unique.set(def.name, def);\n } else {\n duplicates.add(def);\n }\n }\n return {\n all,\n unique,\n partials,\n duplicates,\n mixinMap: getMixinMap(all, unique),\n cache: {\n typedefIncludesDictionary: new WeakMap(),\n dictionaryIncludesRequiredField: new WeakMap()\n },\n };\n}\n\nfunction* checkDuplicatedNames({ unique, duplicates }) {\n for (const dup of duplicates) {\n const { name } = dup;\n const message = `The name \"${name}\" of type \"${unique.get(name).type}\" was already seen`;\n yield error(dup.tokens.name, dup, \"no-duplicate\", message);\n }\n}\n\nfunction* validateIterable(ast) {\n const defs = groupDefinitions(ast);\n for (const def of defs.all) {\n if (def.validate) {\n yield* def.validate(defs);\n }\n }\n yield* checkDuplicatedNames(defs);\n}\n\n// Remove this once all of our support targets expose `.flat()` by default\nfunction flatten(array) {\n if (array.flat) {\n return array.flat();\n }\n return [].concat(...array);\n}\n\n/**\n * @param {*} ast AST or array of ASTs\n */\nexport function validate(ast) {\n return [...validateIterable(flatten(ast))];\n}\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction commonjsRequire () {\n\tthrow new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n/* global define */\n\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n\n/**\n * @param {string} fileName\n */\nexport async function fetchAsset(fileName) {\n return fetchBase(`assets/${fileName}`);\n}\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n/* jshint laxcomma:true */\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/ui.css\")).default;\n } catch {\n return fetchAsset(\"ui.css\");\n }\n}\n\nasync function insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = await loadStyle();\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @module w3c/group\n *\n * `group` is a shorthand configuration option for specifying `wg`, `wgId`,\n * `wgURI`, and `wgPatentURI` options.\n */\n\nimport {\n fetchAndCache,\n joinAnd,\n showError,\n showWarning,\n} from \"../core/utils.js\";\n\nexport const name = \"w3c/group\";\n\nconst W3C_GROUPS_API = \"https://respec.org/w3c/groups/\";\nconst LEGACY_OPTIONS = [\"wg\", \"wgURI\", \"wgId\", \"wgPatentURI\", \"wgPatentPolicy\"];\n\nexport async function run(conf) {\n const usedLegacyOptions = LEGACY_OPTIONS.filter(opt => conf[opt]);\n\n if (!conf.group) {\n if (usedLegacyOptions.length) {\n const outdatedOptionsStr = joinAnd(LEGACY_OPTIONS, s => `\\`${s}\\``);\n const msg = `Configuration options ${outdatedOptionsStr} are deprecated.`;\n const hint = `Please use the [\\`group\\`](https://respec.org/docs/#group) option instead.`;\n showWarning(msg, name, { hint });\n }\n return;\n }\n\n if (usedLegacyOptions.length) {\n const outdatedOptionsStr = joinAnd(usedLegacyOptions, s => `\\`${s}\\``);\n const msg = `Configuration options ${outdatedOptionsStr} are superseded by \\`group\\` and will be overridden by ReSpec.`;\n const hint = \"Please remove them from `respecConfig`.\";\n showWarning(msg, name, { hint });\n }\n\n const { group } = conf;\n const groupDetails = Array.isArray(group)\n ? await getMultipleGroupDetails(group)\n : await getGroupDetails(group);\n Object.assign(conf, groupDetails);\n}\n\n/** @param {string[]} groups */\nasync function getMultipleGroupDetails(groups) {\n const details = await Promise.all(groups.map(getGroupDetails));\n /** @type {{ [key in keyof GroupDetails]: GroupDetails[key][] }} */\n const result = {\n wg: [],\n wgId: [],\n wgURI: [],\n wgPatentURI: [],\n wgPatentPolicy: [],\n groupType: [],\n };\n for (const groupDetails of details.filter(o => o)) {\n for (const key of Object.keys(result)) {\n result[key].push(groupDetails[key]);\n }\n }\n return result;\n}\n\n/**\n * @param {string} group\n * @typedef {{ wgId: number, wg: string, wgURI: string, wgPatentURI: string, wgPatentPolicy: string, groupType: W3CGroupType }} GroupDetails\n * @returns {Promise<GroupDetails|undefined>}\n */\nasync function getGroupDetails(group) {\n let type = \"\";\n let shortname = group;\n if (group.includes(\"/\")) {\n [type, shortname] = group.split(\"/\", 2);\n }\n const url = new URL(`${shortname}/${type}`, W3C_GROUPS_API);\n const res = await fetchAndCache(url.href);\n if (res.ok) {\n const json = await res.json();\n const {\n id: wgId,\n name: wg,\n URI: wgURI,\n patentURI: wgPatentURI,\n patentPolicy: wgPatentPolicy,\n type: groupType,\n } = json;\n return { wg, wgId, wgURI, wgPatentURI, wgPatentPolicy, groupType };\n }\n\n const text = await res.text();\n const message = `Failed to fetch group details (HTTP: ${res.status}). ${text}`;\n const hint =\n res.status === 404\n ? \"See [supported group names](https://respec.org/w3c/groups/) to use with the \" +\n \"[`group`](https://respec.org/docs/#group) configuration option.\"\n : undefined;\n showError(message, name, { hint });\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-link\";\n\n/**\n * @param {object} link\n * @param {string} link.key\n * @param {string} [link.class]\n * @param {LinkData[]} [link.data]\n */\nexport default function showLink(link) {\n if (!link.key) {\n const msg =\n \"Found a link without `key` attribute in the configuration. See dev console.\";\n showWarning(msg, name);\n console.warn(msg, link);\n return;\n }\n return html`\n <dt class=\"${link.class ? link.class : null}\">${link.key}</dt>\n ${link.data ? link.data.map(showLinkData) : showLinkData(link)}\n `;\n}\n\n/**\n * @typedef {object} LinkData\n * @property {string} [LinkData.class]\n * @property {string} [LinkData.href]\n * @property {string} [LinkData.value]\n * @param {LinkData} data\n */\nfunction showLinkData(data) {\n return html`<dd class=\"${data.class ? data.class : null}\">\n ${data.href\n ? html`<a href=\"${data.href}\">${data.value || data.href}</a>`\n : data.value}\n </dd>`;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-logo\";\n\n/**\n * @param {object} logo\n * @param {string} logo.src\n * @param {string} logo.url\n * @param {string} logo.alt\n * @param {string} [logo.id]\n * @param {number} [logo.width]\n * @param {number} [logo.height]\n */\nexport default function showLogo(logo) {\n /** @type {HTMLAnchorElement} */\n const a = html`<a href=\"${logo.url || \"\"}\" class=\"logo\"></a>`;\n if (!logo.alt) {\n const msg = \"Found spec logo without an `alt` attribute.\";\n showWarning(msg, name, { elements: [a] });\n }\n /** @type {HTMLImageElement} */\n const img = html`<img\n id=\"${logo.id}\"\n alt=\"${logo.alt}\"\n width=\"${logo.width}\"\n height=\"${logo.height}\"\n />`;\n // avoid triggering 404 requests from dynamically generated\n // hyperHTML attribute values\n img.src = logo.src;\n a.append(img);\n return a;\n}\n","// @ts-check\nimport { humanDate, showError, toShortIsoDate } from \"../../core/utils.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst name = \"core/templates/show-people\";\n\nconst localizationStrings = {\n en: {\n until(date) {\n return html` Until ${date} `;\n },\n },\n es: {\n until(date) {\n return html` Hasta ${date} `;\n },\n },\n ko: {\n until(date) {\n return html` ${date} 이전 `;\n },\n },\n ja: {\n until(date) {\n return html` ${date} 以前 `;\n },\n },\n de: {\n until(date) {\n return html` bis ${date} `;\n },\n },\n zh: {\n until(date) {\n return html` 直到 ${date} `;\n },\n },\n};\n\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nconst orcidIcon = html`<svg\n width=\"16\"\n height=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n>\n <style>\n .st1 {\n fill: #fff;\n }\n </style>\n <path\n d=\"M256 128c0 70.7-57.3 128-128 128S0 198.7 0 128 57.3 0 128 0s128 57.3 128 128z\"\n fill=\"#a6ce39\"\n />\n <path\n class=\"st1\"\n d=\"M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z\"\n />\n</svg>`;\n\n/**\n * @typedef {object} Person\n * @property {string} [Person.name]\n * @property {string} [Person.company]\n * @property {string|number} [Person.w3cid]\n * @property {string} [Person.mailto]\n * @property {string} [Person.url]\n * @property {string} [Person.orcid]\n * @property {string} [Person.company]\n * @property {string} [Person.companyURL]\n * @property {string} [Person.note]\n * @property {string} [Person.retiredDate]\n * @property {PersonExtras} [Person.extras]\n *\n * @typedef {object} PersonExtras\n * @property {string} PersonExtras.name\n * @property {string} [PersonExtras.class]\n * @property {string} [PersonExtras.href]\n *\n * @param {Person[]} persons\n */\nexport default function showPeople(persons = []) {\n const l10n = localizationStrings[lang];\n return persons.map(getItem);\n\n function getItem(p) {\n const personName = [p.name]; // treated as opt-in HTML by hyperHTML\n const company = [p.company];\n const editorid = p.w3cid ? parseInt(p.w3cid, 10) : null;\n /** @type {HTMLElement} */\n const dd = html`<dd\n class=\"p-author h-card vcard\"\n data-editor-id=\"${editorid}\"\n ></dd>`;\n const span = document.createDocumentFragment();\n const contents = [];\n if (p.mailto) {\n contents.push(html`<a\n class=\"ed_mailto u-email email p-name\"\n href=\"${`mailto:${p.mailto}`}\"\n >${personName}</a\n >`);\n } else if (p.url) {\n contents.push(\n html`<a class=\"u-url url p-name fn\" href=\"${p.url}\">${personName}</a>`\n );\n } else {\n contents.push(html`<span class=\"p-name fn\">${personName}</span>`);\n }\n if (p.orcid) {\n contents.push(\n html`<a class=\"p-name orcid\" href=\"${p.orcid}\"\n >${orcidIcon.cloneNode(true)}\n </a>`\n );\n }\n if (p.company) {\n if (p.companyURL) {\n contents.push(\n html`\n (<a class=\"p-org org h-org h-card\" href=\"${p.companyURL}\"\n >${company}</a\n >)\n `\n );\n } else {\n contents.push(html` (${company}) `);\n }\n }\n if (p.note) contents.push(document.createTextNode(` (${p.note})`));\n if (p.extras) {\n const results = p.extras\n // Remove empty names\n .filter(extra => extra.name && extra.name.trim())\n // Convert to HTML\n .map(getExtra);\n for (const result of results) {\n contents.push(document.createTextNode(\", \"), result);\n }\n }\n if (p.retiredDate) {\n const retiredDate = new Date(p.retiredDate);\n const isValidDate = retiredDate.toString() !== \"Invalid Date\";\n const timeElem = document.createElement(\"time\");\n timeElem.textContent = isValidDate\n ? humanDate(retiredDate)\n : \"Invalid Date\"; // todo: Localise invalid date\n if (!isValidDate) {\n const msg = \"The date is invalid. The expected format is YYYY-MM-DD.\";\n const title = \"Invalid date\";\n showError(msg, name, { title, elements: [timeElem] });\n }\n timeElem.dateTime = toShortIsoDate(retiredDate);\n contents.push(html` - ${l10n.until(timeElem)} `);\n }\n\n // @ts-ignore: hyperhtml types only support Element but we use a DocumentFragment here\n html.bind(span)`${contents}`;\n dd.appendChild(span);\n return dd;\n }\n\n function getExtra(extra) {\n const span = html`<span class=\"${extra.class || null}\"></span>`;\n let textContainer = span;\n if (extra.href) {\n textContainer = html`<a href=\"${extra.href}\"></a>`;\n span.appendChild(textContainer);\n }\n textContainer.textContent = extra.name;\n return span;\n }\n}\n","// @ts-check\nimport { getIntlData, humanDate, showWarning } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nconst name = \"w3c/templates/headers\";\n\nconst ccLicense = \"https://creativecommons.org/licenses/by/4.0/legalcode\";\nconst w3cLicense = \"https://www.w3.org/Consortium/Legal/copyright-documents\";\nconst legalDisclaimer =\n \"https://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer\";\nconst w3cTrademark =\n \"https://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks\";\n\nconst localizationStrings = {\n en: {\n author: \"Author:\",\n authors: \"Authors:\",\n editor: \"Editor:\",\n editors: \"Editors:\",\n former_editor: \"Former editor:\",\n former_editors: \"Former editors:\",\n latest_editors_draft: \"Latest editor's draft:\",\n latest_published_version: \"Latest published version:\",\n edited_in_place: \"edited in place\",\n this_version: \"This version:\",\n test_suite: \"Test suite:\",\n implementation_report: \"Implementation report:\",\n prev_editor_draft: \"Previous editor's draft:\",\n prev_version: \"Previous version:\",\n prev_recommendation: \"Previous Recommendation:\",\n latest_recommendation: \"Latest Recommendation:\",\n },\n ko: {\n author: \"저자:\",\n authors: \"저자:\",\n editor: \"편집자:\",\n editors: \"편집자:\",\n former_editor: \"이전 편집자:\",\n former_editors: \"이전 편집자:\",\n latest_editors_draft: \"최신 편집 초안:\",\n latest_published_version: \"최신 버전:\",\n this_version: \"현재 버전:\",\n },\n zh: {\n author: \"作者:\",\n authors: \"作者:\",\n editor: \"编辑:\",\n editors: \"编辑:\",\n former_editor: \"原编辑:\",\n former_editors: \"原编辑:\",\n latest_editors_draft: \"最新编辑草稿:\",\n latest_published_version: \"最新发布版本:\",\n this_version: \"本版本:\",\n test_suite: \"测试套件:\",\n implementation_report: \"实现报告:\",\n prev_editor_draft: \"上一版编辑草稿:\",\n prev_version: \"上一版:\",\n prev_recommendation: \"上一版正式推荐标准:\",\n latest_recommendation: \"最新发布的正式推荐标准:\",\n },\n ja: {\n author: \"著者:\",\n authors: \"著者:\",\n editor: \"編者:\",\n editors: \"編者:\",\n former_editor: \"以前の版の編者:\",\n former_editors: \"以前の版の編者:\",\n latest_editors_draft: \"最新の編集用草案:\",\n latest_published_version: \"最新バージョン:\",\n this_version: \"このバージョン:\",\n test_suite: \"テストスイート:\",\n implementation_report: \"実装レポート:\",\n },\n nl: {\n author: \"Auteur:\",\n authors: \"Auteurs:\",\n editor: \"Redacteur:\",\n editors: \"Redacteurs:\",\n latest_editors_draft: \"Laatste werkversie:\",\n latest_published_version: \"Laatst gepubliceerde versie:\",\n this_version: \"Deze versie:\",\n },\n es: {\n author: \"Autor:\",\n authors: \"Autores:\",\n editor: \"Editor:\",\n editors: \"Editores:\",\n latest_editors_draft: \"Borrador de editor mas reciente:\",\n latest_published_version: \"Versión publicada mas reciente:\",\n this_version: \"Ésta versión:\",\n },\n de: {\n author: \"Autor/in:\",\n authors: \"Autor/innen:\",\n editor: \"Redaktion:\",\n editors: \"Redaktion:\",\n former_editor: \"Frühere Mitwirkende:\",\n former_editors: \"Frühere Mitwirkende:\",\n latest_editors_draft: \"Letzter Entwurf:\",\n latest_published_version: \"Letzte publizierte Fassung:\",\n this_version: \"Diese Fassung:\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nfunction getSpecSubTitleElem(conf) {\n let specSubTitleElem = document.querySelector(\"h2#subtitle\");\n\n if (specSubTitleElem && specSubTitleElem.parentElement) {\n specSubTitleElem.remove();\n conf.subtitle = specSubTitleElem.textContent.trim();\n } else if (conf.subtitle) {\n specSubTitleElem = document.createElement(\"h2\");\n specSubTitleElem.textContent = conf.subtitle;\n specSubTitleElem.id = \"subtitle\";\n }\n if (specSubTitleElem) {\n specSubTitleElem.classList.add(\"subtitle\");\n }\n return specSubTitleElem;\n}\n\nexport default (conf, options) => {\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${document.querySelector(\"h1#title\")}\n ${getSpecSubTitleElem(conf)}\n <h2>\n ${conf.prependW3C ? \"W3C \" : \"\"}${conf.isCR\n ? `${conf.longStatus}`\n : `${conf.textStatus}`}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >${conf.modificationDate\n ? html`, ${l10n.edited_in_place}${\" \"}\n ${inPlaceModificationDate(conf.modificationDate)}`\n : \"\"}\n </h2>\n <dl>\n ${!conf.isNoTrack\n ? html`\n <dt>${l10n.this_version}</dt>\n <dd>\n <a class=\"u-url\" href=\"${conf.thisVersion}\"\n >${conf.thisVersion}</a\n >\n </dd>\n <dt>${l10n.latest_published_version}</dt>\n <dd>\n ${conf.latestVersion\n ? html`<a href=\"${conf.latestVersion}\"\n >${conf.latestVersion}</a\n >`\n : \"none\"}\n </dd>\n `\n : \"\"}\n ${conf.edDraftURI\n ? html`\n <dt>${l10n.latest_editors_draft}</dt>\n <dd><a href=\"${conf.edDraftURI}\">${conf.edDraftURI}</a></dd>\n `\n : \"\"}\n ${conf.testSuiteURI\n ? html`\n <dt>${l10n.test_suite}</dt>\n <dd><a href=\"${conf.testSuiteURI}\">${conf.testSuiteURI}</a></dd>\n `\n : \"\"}\n ${conf.implementationReportURI\n ? html`\n <dt>${l10n.implementation_report}</dt>\n <dd>\n <a href=\"${conf.implementationReportURI}\"\n >${conf.implementationReportURI}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.isED && conf.prevED\n ? html`\n <dt>${l10n.prev_editor_draft}</dt>\n <dd><a href=\"${conf.prevED}\">${conf.prevED}</a></dd>\n `\n : \"\"}\n ${conf.showPreviousVersion\n ? html`\n <dt>${l10n.prev_version}</dt>\n <dd><a href=\"${conf.prevVersion}\">${conf.prevVersion}</a></dd>\n `\n : \"\"}\n ${!conf.prevRecURI\n ? \"\"\n : conf.isRec\n ? html`\n <dt>${l10n.prev_recommendation}</dt>\n <dd><a href=\"${conf.prevRecURI}\">${conf.prevRecURI}</a></dd>\n `\n : html`\n <dt>${l10n.latest_recommendation}</dt>\n <dd><a href=\"${conf.prevRecURI}\">${conf.prevRecURI}</a></dd>\n `}\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${conf.errata\n ? html`<p>\n Please check the\n <a href=\"${conf.errata}\"><strong>errata</strong></a> for any errors or\n issues reported since publication.\n </p>`\n : \"\"}\n ${conf.isRec\n ? html`<p>\n See also\n <a\n href=\"${`http://www.w3.org/2003/03/Translations/byTechnology?technology=${conf.shortName}`}\"\n >\n <strong>translations</strong></a\n >.\n </p>`\n : \"\"}\n ${conf.alternateFormats\n ? html`<p>\n ${options.multipleAlternates\n ? \"This document is also available in these non-normative formats:\"\n : \"This document is also available in this non-normative format:\"}\n ${options.alternatesHTML}\n </p>`\n : \"\"}\n ${renderCopyright(conf)}\n <hr title=\"Separator for header\" />\n </div>`;\n};\n\n/**\n * @param {string} date document in-place edit date as YYYY-MM-DD\n * @returns {HTMLTimeElement}\n */\nfunction inPlaceModificationDate(date) {\n const modificationHumanDate = humanDate(new Date(date));\n return html`<time class=\"dt-modified\" datetime=\"${date}\"\n >${modificationHumanDate}</time\n >`;\n}\n\n/**\n * @param {string} text\n * @param {string} url\n * @param {string=} cssClass\n */\nfunction linkLicense(text, url, cssClass) {\n return html`<a rel=\"license\" href=\"${url}\" class=\"${cssClass}\">${text}</a>`;\n}\n\nfunction renderCopyright(conf) {\n // If there is already a copyright, let's relocate it.\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n return existingCopyright;\n }\n if (conf.hasOwnProperty(\"overrideCopyright\")) {\n const msg = \"The `overrideCopyright` configuration option is deprecated.\";\n const hint =\n 'Please add a `<p class=\"copyright\">` element directly to your document instead';\n showWarning(msg, name, { hint });\n return html`${[conf.overrideCopyright]}`;\n }\n if (conf.isUnofficial && conf.licenseInfo) {\n return html`<p class=\"copyright\">\n This document is licensed under a\n ${linkLicense(conf.licenseInfo.name, conf.licenseInfo.url, \"subfoot\")}\n (${conf.licenseInfo.short}).\n </p>`;\n }\n return renderOfficialCopyright(conf);\n}\n\nfunction renderOfficialCopyright(conf) {\n return html`<p class=\"copyright\">\n <a href=\"https://www.w3.org/Consortium/Legal/ipr-notice#Copyright\"\n >Copyright</a\n >\n ©\n ${conf.copyrightStart ? `${conf.copyrightStart}-` : \"\"}${conf.publishYear}\n ${conf.additionalCopyrightHolders\n ? html` ${[conf.additionalCopyrightHolders]} & `\n : \"\"}\n <a href=\"https://www.w3.org/\"\n ><abbr title=\"World Wide Web Consortium\">W3C</abbr></a\n ><sup>®</sup> (<a href=\"https://www.csail.mit.edu/\"\n ><abbr title=\"Massachusetts Institute of Technology\">MIT</abbr></a\n >,\n <a href=\"https://www.ercim.eu/\"\n ><abbr\n title=\"European Research Consortium for Informatics and Mathematics\"\n >ERCIM</abbr\n ></a\n >, <a href=\"https://www.keio.ac.jp/\">Keio</a>,\n <a href=\"https://ev.buaa.edu.cn/\">Beihang</a>). ${noteIfDualLicense(conf)}\n W3C <a href=\"${legalDisclaimer}\">liability</a>,\n <a href=\"${w3cTrademark}\">trademark</a> and ${linkDocumentUse(conf)} rules\n apply.\n </p>`;\n}\n\nfunction noteIfDualLicense(conf) {\n if (!conf.isCCBY) {\n return;\n }\n return html`\n Some Rights Reserved: this document is dual-licensed,\n ${linkLicense(\"CC-BY\", ccLicense)} and\n ${linkLicense(\"W3C Document License\", w3cLicense)}.\n `;\n}\n\nfunction linkDocumentUse(conf) {\n if (conf.isCCBY) {\n return linkLicense(\n \"document use\",\n \"https://www.w3.org/Consortium/Legal/2013/copyright-documents-dual.html\"\n );\n }\n if (conf.isW3CSoftAndDocLicense) {\n return linkLicense(\n \"permissive document license\",\n \"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\"\n );\n }\n return linkLicense(\"document use\", w3cLicense);\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { l10n } from \"./headers.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nexport default (conf, options) => {\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n }\n\n const specTitleElem = document.querySelector(\"h1#title\");\n const specTitleElemClone = specTitleElem.cloneNode(true);\n\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${specTitleElem}\n ${conf.subtitle ? html`<h2 id=\"subtitle\">${conf.subtitle}</h2>` : \"\"}\n <h2>\n ${conf.longStatus}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >\n </h2>\n <dl>\n ${conf.thisVersion\n ? html`\n <dt>${l10n.this_version}</dt>\n <dd>\n <a class=\"u-url\" href=\"${conf.thisVersion}\"\n >${conf.thisVersion}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.latestVersion\n ? html`\n <dt>${l10n.latest_published_version}</dt>\n <dd>\n <a href=\"${conf.latestVersion}\">${conf.latestVersion}</a>\n </dd>\n `\n : \"\"}\n ${conf.edDraftURI\n ? html`\n <dt>${l10n.latest_editors_draft}</dt>\n <dd><a href=\"${conf.edDraftURI}\">${conf.edDraftURI}</a></dd>\n `\n : \"\"}\n ${conf.testSuiteURI\n ? html`\n <dt>Test suite:</dt>\n <dd><a href=\"${conf.testSuiteURI}\">${conf.testSuiteURI}</a></dd>\n `\n : \"\"}\n ${conf.implementationReportURI\n ? html`\n <dt>Implementation report:</dt>\n <dd>\n <a href=\"${conf.implementationReportURI}\"\n >${conf.implementationReportURI}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.prevVersion\n ? html`\n <dt>Previous version:</dt>\n <dd><a href=\"${conf.prevVersion}\">${conf.prevVersion}</a></dd>\n `\n : \"\"}\n ${!conf.isCGFinal\n ? html`\n ${conf.prevED\n ? html`\n <dt>Previous editor's draft:</dt>\n <dd><a href=\"${conf.prevED}\">${conf.prevED}</a></dd>\n `\n : \"\"}\n `\n : \"\"}\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${conf.alternateFormats\n ? html`<p>\n ${options.multipleAlternates\n ? \"This document is also available in these non-normative formats:\"\n : \"This document is also available in this non-normative format:\"}\n ${options.alternatesHTML}\n </p>`\n : \"\"}\n ${existingCopyright\n ? existingCopyright\n : html`<p class=\"copyright\">\n <a href=\"https://www.w3.org/Consortium/Legal/ipr-notice#Copyright\"\n >Copyright</a\n >\n ©\n ${conf.copyrightStart\n ? `${conf.copyrightStart}-`\n : \"\"}${conf.publishYear}\n ${conf.additionalCopyrightHolders\n ? html` ${[conf.additionalCopyrightHolders]} & `\n : \"\"}\n the Contributors to the ${specTitleElemClone.childNodes}\n Specification, published by the\n <a href=\"${conf.wgURI}\">${conf.wg}</a> under the\n ${conf.isCGFinal\n ? html`\n <a href=\"https://www.w3.org/community/about/agreements/fsa/\"\n >W3C Community Final Specification Agreement (FSA)</a\n >. A human-readable\n <a\n href=\"https://www.w3.org/community/about/agreements/fsa-deed/\"\n >summary</a\n >\n is available.\n `\n : html`\n <a href=\"https://www.w3.org/community/about/agreements/cla/\"\n >W3C Community Contributor License Agreement (CLA)</a\n >. A human-readable\n <a\n href=\"https://www.w3.org/community/about/agreements/cla-deed/\"\n >summary</a\n >\n is available.\n `}\n </p>`}\n <hr title=\"Separator for header\" />\n </div>`;\n};\n","// @ts-check\nimport { getIntlData } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst localizationStrings = {\n en: {\n sotd: \"Status of This Document\",\n },\n ko: {\n sotd: \"현재 문서의 상태\",\n },\n zh: {\n sotd: \"关于本文档\",\n },\n ja: {\n sotd: \"この文書の位置付け\",\n },\n nl: {\n sotd: \"Status van dit document\",\n },\n es: {\n sotd: \"Estado de este Document\",\n },\n de: {\n sotd: \"Status dieses Dokuments\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nexport default (conf, opts) => {\n return html`\n <h2>${l10n.sotd}</h2>\n ${conf.isPreview ? renderPreview(conf) : \"\"}\n ${conf.isUnofficial\n ? renderIsUnofficial(opts)\n : conf.isTagFinding\n ? opts.additionalContent\n : conf.isNoTrack\n ? renderIsNoTrack(conf, opts)\n : html`\n <p><em>${conf.l10n.status_at_publication}</em></p>\n ${conf.isSubmission\n ? noteForSubmission(conf, opts)\n : html`\n ${!conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${!conf.overrideStatus\n ? html`\n ${linkToWorkingGroup(conf)} ${linkToCommunity(conf, opts)}\n `\n : \"\"}\n ${conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${conf.isRec ? renderIsRec(conf) : renderNotRec(conf)}\n ${renderDeliverer(conf)}\n <p>\n This document is governed by the\n <a\n id=\"w3c_process_revision\"\n href=\"https://www.w3.org/2020/Process-20200915/\"\n >15 September 2020 W3C Process Document</a\n >.\n </p>\n ${conf.addPatentNote\n ? html`<p>${[conf.addPatentNote]}</p>`\n : \"\"}\n `}\n `}\n ${opts.additionalSections}\n `;\n};\n\nexport function renderPreview(conf) {\n const { prUrl, prNumber, edDraftURI } = conf;\n return html`<details class=\"annoying-warning\" open=\"\">\n <summary>\n This is a\n preview${prUrl && prNumber\n ? html`\n of pull request\n <a href=\"${prUrl}\">#${prNumber}</a>\n `\n : \"\"}\n </summary>\n <p>\n Do not attempt to implement this version of the specification. Do not\n reference this version as authoritative in any way.\n ${edDraftURI\n ? html`\n Instead, see\n <a href=\"${edDraftURI}\">${edDraftURI}</a> for the Editor's draft.\n `\n : \"\"}\n </p>\n </details>`;\n}\n\nfunction renderIsUnofficial(opts) {\n const { additionalContent } = opts;\n return html`\n <p>\n This document is a draft of a potential specification. It has no official\n standing of any kind and does not represent the support or consensus of\n any standards organization.\n </p>\n ${additionalContent}\n `;\n}\n\nfunction renderIsNoTrack(conf, opts) {\n const { isMO } = conf;\n const { additionalContent } = opts;\n return html`\n <p>\n This document is merely a W3C-internal\n ${isMO ? \"member-confidential\" : \"\"} document. It has no official standing\n of any kind and does not represent consensus of the W3C Membership.\n </p>\n ${additionalContent}\n `;\n}\n\nfunction renderNotRec(conf) {\n let statusExplanation = \"\";\n let updatePolicy = html`This is a draft document and may be updated, replaced\n or obsoleted by other documents at any time. It is inappropriate to cite this\n document as other than work in progress.\n ${conf.updateableRec\n ? html`Future updates to this specification may incorporate\n <a href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}`;\n let reviewPolicy = \"\";\n if (conf.specStatus === \"CRD\") {\n statusExplanation =\n \"A Candidate Recommendation Draft integrates changes from the previous Candidate Recommendation that the Working Group intends to include in a subsequent Candidate Recommendation Snapshot.\";\n if (conf.pubMode === \"LS\") {\n updatePolicy =\n \"This document is maintained and updated at any time. Some parts of this document are work in progress. \";\n }\n } else if (conf.specStatus === \"CR\") {\n statusExplanation = html`A Candidate Recommendation Snapshot has received\n <a href=\"https://www.w3.org/2020/Process-20200915/#dfn-wide-review\"\n >wide review</a\n >\n and is intended to gather\n <a href=\"${conf.implementationReportURI}\">implementation experience</a>.`;\n updatePolicy = html`${conf.updateableRec\n ? html`Future updates to this specification may incorporate\n <a href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}`;\n if (conf.pubMode === \"LS\") {\n reviewPolicy = `Comments are welcome at any time but most especially before ${conf.humanCREnd}.`;\n } else {\n reviewPolicy = `This Candidate Recommendation is not expected to advance to Proposed Recommendation any earlier than ${conf.humanCREnd}.`;\n }\n } else if (conf.isPR) {\n reviewPolicy = html` The W3C Membership and other interested parties are\n invited to review the document and send comments through\n ${conf.humanPREnd}. Advisory Committee Representatives should consult\n their\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >. Note that substantive technical comments were expected during the\n Candidate Recommendation review period that ended ${conf.humanCREnd}.`;\n } else if (conf.isPER) {\n reviewPolicy = html` W3C Advisory Committee Members are invited to send\n formal review comments on this Proposed Edited Recommendation to the W3C\n Team until ${conf.humanPEREnd}. Members of the Advisory Committee will\n find the appropriate review form for this document by consulting their\n list of current\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >.`;\n }\n return html`<p>\n Publication as ${conf.anOrA} ${conf.textStatus} does not imply endorsement\n by the W3C Membership. ${statusExplanation}\n </p>\n ${updatePolicy ? html`<p>${updatePolicy}</p>` : \"\"}\n <p>${reviewPolicy}</p>`;\n}\n\nfunction renderIsRec({\n updateableRec,\n revisionTypes = [],\n humanRevisedRecEnd,\n}) {\n let reviewTarget = \"\";\n if (revisionTypes.includes(\"addition\")) {\n reviewTarget = \"additions\";\n }\n if (revisionTypes.includes(\"correction\") && !reviewTarget) {\n reviewTarget = \"corrections\";\n }\n return html`<p>\n A W3C Recommendation is a specification that, after extensive\n consensus-building, has received the endorsement of the W3C and its\n Members. W3C recommends the wide deployment of this specification as a\n standard for the Web.\n ${updateableRec\n ? html`Future updates to this Recommendation may incorporate\n <a\n href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}\n </p>\n ${revisionTypes.includes(\"addition\")\n ? html`<p class=\"addition\">\n Proposed additions are marked in the document.\n </p>`\n : \"\"}\n ${revisionTypes.includes(\"correction\")\n ? html`<p class=\"correction\">\n Proposed corrections are marked in the document.\n </p>`\n : \"\"}\n ${reviewTarget\n ? html`<p>\n The W3C Membership and other interested parties are invited to review\n the proposed ${reviewTarget} and send comments through\n ${humanRevisedRecEnd}. Advisory Committee Representatives should\n consult their\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >.\n </p>`\n : \"\"} `;\n}\n\nfunction renderDeliverer(conf) {\n const {\n isNote,\n wgId,\n isIGNote,\n multipleWGs,\n recNotExpected,\n wgPatentHTML,\n wgPatentURI,\n charterDisclosureURI,\n wgPatentPolicy,\n } = conf;\n\n const patentPolicyURL =\n wgPatentPolicy === \"PP2017\"\n ? \"https://www.w3.org/Consortium/Patent-Policy-20170801/\"\n : \"https://www.w3.org/Consortium/Patent-Policy/\";\n\n const producers = !isIGNote\n ? html`\n This document was produced by ${multipleWGs ? \"groups\" : \"a group\"}\n operating under the\n <a href=\"${patentPolicyURL}\"\n >${wgPatentPolicy === \"PP2017\" ? \"1 August 2017 \" : \"\"}W3C Patent\n Policy</a\n >.\n `\n : \"\";\n const wontBeRec = recNotExpected\n ? \"The group does not expect this document to become a W3C Recommendation.\"\n : \"\";\n return html`<p data-deliverer=\"${isNote || isIGNote ? wgId : null}\">\n ${producers} ${wontBeRec}\n ${!isNote && !isIGNote\n ? html`\n ${multipleWGs\n ? html` W3C maintains ${wgPatentHTML} `\n : html`\n W3C maintains a\n <a href=\"${[wgPatentURI]}\" rel=\"disclosure\"\n >public list of any patent disclosures</a\n >\n `}\n made in connection with the deliverables of\n ${multipleWGs\n ? \"each group; these pages also include\"\n : \"the group; that page also includes\"}\n instructions for disclosing a patent. An individual who has actual\n knowledge of a patent which the individual believes contains\n <a href=\"${patentPolicyURL}#def-essential\">Essential Claim(s)</a>\n must disclose the information in accordance with\n <a href=\"${patentPolicyURL}#sec-Disclosure\"\n >section 6 of the W3C Patent Policy</a\n >.\n `\n : \"\"}\n ${isIGNote\n ? html`\n The disclosure obligations of the Participants of this group are\n described in the\n <a href=\"${charterDisclosureURI}\">charter</a>.\n `\n : \"\"}\n </p>`;\n}\n\nfunction noteForSubmission(conf, opts) {\n return html`\n ${opts.additionalContent}\n ${conf.isMemberSubmission\n ? noteForMemberSubmission(conf)\n : conf.isTeamSubmission\n ? noteForTeamSubmission(conf, opts)\n : \"\"}\n `;\n}\n\nfunction noteForMemberSubmission(conf) {\n const teamComment = `https://www.w3.org/Submission/${conf.publishDate.getUTCFullYear()}/${\n conf.submissionCommentNumber\n }/Comment/`;\n\n const patentPolicyURL =\n conf.wgPatentPolicy === \"PP2017\"\n ? \"https://www.w3.org/Consortium/Patent-Policy-20170801/\"\n : \"https://www.w3.org/Consortium/Patent-Policy/\";\n\n return html`<p>\n By publishing this document, W3C acknowledges that the\n <a href=\"${conf.thisVersion}\">Submitting Members</a> have made a formal\n Submission request to W3C for discussion. Publication of this document by\n W3C indicates no endorsement of its content by W3C, nor that W3C has, is, or\n will be allocating any resources to the issues addressed by it. This\n document is not the product of a chartered W3C group, but is published as\n potential input to the\n <a href=\"https://www.w3.org/Consortium/Process\">W3C Process</a>. A\n <a href=\"${teamComment}\">W3C Team Comment</a> has been published in\n conjunction with this Member Submission. Publication of acknowledged Member\n Submissions at the W3C site is one of the benefits of\n <a href=\"https://www.w3.org/Consortium/Prospectus/Joining\">\n W3C Membership</a\n >. Please consult the requirements associated with Member Submissions of\n <a href=\"${patentPolicyURL}#sec-submissions\"\n >section 3.3 of the W3C Patent Policy</a\n >. Please consult the complete\n <a href=\"https://www.w3.org/Submission\"\n >list of acknowledged W3C Member Submissions</a\n >.\n </p>`;\n}\n\nfunction noteForTeamSubmission(conf, opts) {\n return html`\n ${renderPublicList(conf, opts)}\n <p>\n Please consult the complete\n <a href=\"https://www.w3.org/TeamSubmission/\">list of Team Submissions</a>.\n </p>\n `;\n}\n\nexport function renderPublicList(conf, opts) {\n const {\n mailToWGPublicListWithSubject,\n mailToWGPublicListSubscription,\n } = opts;\n const { wgPublicList, subjectPrefix } = conf;\n const archivesURL = `https://lists.w3.org/Archives/Public/${wgPublicList}/`;\n return html`<p>\n If you wish to make comments regarding this document, please send them to\n <a href=\"${mailToWGPublicListWithSubject}\">${wgPublicList}@w3.org</a>\n (<a href=\"${mailToWGPublicListSubscription}\">subscribe</a>,\n <a href=\"${archivesURL}\">archives</a>)${subjectPrefix\n ? html` with <code>${subjectPrefix}</code> at the start of your email's\n subject`\n : \"\"}.\n </p>`;\n}\n\nfunction linkToWorkingGroup(conf) {\n if (!conf.wg) {\n return;\n }\n let proposedChanges = null;\n if (conf.isRec && conf.revisionTypes && conf.revisionTypes.length) {\n if (conf.revisionTypes.includes(\"addition\")) {\n if (conf.revisionTypes.includes(\"correction\")) {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-changes\"\n >proposed changes</a\n >, introducing substantive changes and new features since the previous\n Recommentation.`;\n } else {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-addition\"\n >proposed additions</a\n >, introducing new features since the previous Recommentation.`;\n }\n } else if (conf.revisionTypes.includes(\"correction\")) {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-correction\"\n >proposed corrections</a\n >.`;\n }\n }\n return html`<p>\n This document was published by ${conf.wgHTML} as ${conf.anOrA}\n ${conf.longStatus}. ${proposedChanges}\n ${conf.notYetRec\n ? \"This document is intended to become a W3C Recommendation.\"\n : \"\"}\n </p>`;\n}\n\nexport function linkToCommunity(conf, opts) {\n if (!conf.github && !conf.wgPublicList) {\n return;\n }\n return html`<p>\n ${conf.github\n ? html`\n <a href=\"${conf.issueBase}\">GitHub Issues</a> are preferred for\n discussion of this specification.\n `\n : \"\"}\n ${conf.wgPublicList\n ? html`\n ${conf.github && conf.wgPublicList\n ? \"Alternatively, you can send comments to our mailing list.\"\n : \"Comments regarding this document are welcome.\"}\n Please send them to\n <a href=\"${opts.mailToWGPublicListWithSubject}\"\n >${conf.wgPublicList}@w3.org</a\n >\n (<a href=\"${opts.mailToWGPublicListSubscription}\">subscribe</a>,\n <a\n href=\"${`https://lists.w3.org/Archives/Public/${conf.wgPublicList}/`}\"\n >archives</a\n >)${conf.subjectPrefix\n ? html` with <code>${conf.subjectPrefix}</code> at the start of your\n email's subject`\n : \"\"}.\n `\n : \"\"}\n </p>`;\n}\n","// @ts-check\nimport {\n l10n,\n linkToCommunity,\n renderPreview,\n renderPublicList,\n} from \"./sotd.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nexport default (conf, opts) => {\n return html`\n <h2>${l10n.sotd}</h2>\n ${conf.isPreview ? renderPreview(conf) : \"\"}\n <p>\n This specification was published by the\n <a href=\"${conf.wgURI}\">${conf.wg}</a>. It is not a W3C Standard nor is it\n on the W3C Standards Track.\n ${conf.isCGFinal\n ? html`\n Please note that under the\n <a href=\"https://www.w3.org/community/about/agreements/final/\"\n >W3C Community Final Specification Agreement (FSA)</a\n >\n other conditions apply.\n `\n : html`\n Please note that under the\n <a href=\"https://www.w3.org/community/about/agreements/cla/\"\n >W3C Community Contributor License Agreement (CLA)</a\n >\n there is a limited opt-out and other conditions apply.\n `}\n Learn more about\n <a href=\"https://www.w3.org/community/\"\n >W3C Community and Business Groups</a\n >.\n </p>\n ${!conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${!conf.github && conf.wgPublicList ? renderPublicList(conf, opts) : \"\"}\n ${conf.github ? linkToCommunity(conf, opts) : \"\"}\n ${conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${opts.additionalSections}\n `;\n};\n","// @ts-check\n// Module w3c/headers\n// Generate the headers material based on the provided configuration.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n// - shortName: the small name that is used after /TR/ in published reports (required)\n// - editors: an array of people editing the document (at least one is required). People\n// are defined using:\n// - name: the person's name (required)\n// - url: URI for the person's home page\n// - company: the person's company\n// - companyURL: the URI for the person's company\n// - mailto: the person's email\n// - note: a note on the person (e.g. former editor)\n// - authors: an array of people who are contributing authors of the document.\n// - formerEditors: an array of people that had earlier edited the document but no longer edit.\n// - subtitle: a subtitle for the specification\n// - publishDate: the date to use for the publication, default to document.lastModified, and\n// failing that to now. The format is YYYY-MM-DD or a Date object.\n// - previousPublishDate: the date on which the previous version was published.\n// - previousMaturity: the specStatus of the previous version\n// - errata: the URI of the errata document, if any\n// - alternateFormats: a list of alternate formats for the document, each of which being\n// defined by:\n// - uri: the URI to the alternate\n// - label: a label for the alternate\n// - lang: optional language\n// - type: optional MIME type\n// - logos: a list of logos to use instead of the W3C logo, each of which being defined by:\n// - src: the URI to the logo (target of <img src=>)\n// - alt: alternate text for the image (<img alt=>), defaults to \"Logo\" or \"Logo 1\", \"Logo 2\", ...\n// if src is not specified, this is the text of the \"logo\"\n// - height: optional height of the logo (<img height=>)\n// - width: optional width of the logo (<img width=>)\n// - url: the URI to the organization represented by the logo (target of <a href=>)\n// - id: optional id for the logo, permits custom CSS (wraps logo in <span id=>)\n// - each logo element must specify either src or alt\n// - testSuiteURI: the URI to the test suite, if any\n// - implementationReportURI: the URI to the implementation report, if any\n// - noRecTrack: set to true if this document is not intended to be on the Recommendation track\n// - edDraftURI: the URI of the Editor's Draft for this document, if any. Required if\n// specStatus is set to \"ED\".\n// - additionalCopyrightHolders: a copyright owner in addition to W3C (or the only one if specStatus\n// is unofficial)\n// - overrideCopyright: provides markup to completely override the copyright\n// - copyrightStart: the year from which the copyright starts running\n// - prevED: the URI of the previous Editor's Draft if it has moved\n// - prevRecShortname: the short name of the previous Recommendation, if the name has changed\n// - prevRecURI: the URI of the previous Recommendation if not directly generated from\n// prevRecShortname.\n// - wg: the name of the WG in charge of the document. This may be an array in which case wgURI\n// and wgPatentURI need to be arrays as well, of the same length and in the same order\n// - wgURI: the URI to the group's page, or an array of such\n// - wgPatentURI: the URI to the group's patent information page, or an array of such. NOTE: this\n// is VERY IMPORTANT information to provide and get right, do not just paste this without checking\n// that you're doing it right\n// - wgPublicList: the name of the mailing list where discussion takes place. Note that this cannot\n// be an array as it is assumed that there is a single list to discuss the document, even if it\n// is handled by multiple groups\n// - charterDisclosureURI: used for IGs (when publishing IG-NOTEs) to provide a link to the IPR commitment\n// defined in their charter.\n// - addPatentNote: used to add patent-related information to the SotD, for instance if there's an open\n// PAG on the document.\n// - thisVersion: the URI to the dated current version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - latestVersion: the URI to the latest (undated) version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - prevVersion: the URI to the previous (dated) version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - subjectPrefix: the string that is expected to be used as a subject prefix when posting to the mailing\n// list of the group.\n// - otherLinks: an array of other links that you might want in the header (e.g., link github, twitter, etc).\n// Example of usage: [{key: \"foo\", href:\"https://b\"}, {key: \"bar\", href:\"https://\"}].\n// Allowed values are:\n// - key: the key for the <dt> (e.g., \"Bug Tracker\"). Required.\n// - value: The value that will appear in the <dd> (e.g., \"GitHub\"). Optional.\n// - href: a URL for the value (e.g., \"https://foo.com/issues\"). Optional.\n// - class: a string representing CSS classes. Optional.\n// - license: can be one of the following\n// - \"cc-by\", which is experimentally available in some groups (but likely to be phased out).\n// Note that this is a dual licensing regime.\n// - \"cc0\", an extremely permissive license. It is only recommended if you are working on a document that is\n// intended to be pushed to the WHATWG.\n// - \"w3c-software\", a permissive and attributions license (but GPL-compatible).\n// - \"w3c-software-doc\", (default) the W3C Software and Document License\n// https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\nimport {\n ISODate,\n concatDate,\n docLink,\n htmlJoinAnd,\n showError,\n showWarning,\n} from \"../core/utils.js\";\nimport cgbgHeadersTmpl from \"./templates/cgbg-headers.js\";\nimport cgbgSotdTmpl from \"./templates/cgbg-sotd.js\";\nimport headersTmpl from \"./templates/headers.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { pub } from \"../core/pubsubhub.js\";\nimport sotdTmpl from \"./templates/sotd.js\";\n\nexport const name = \"w3c/headers\";\n\nconst W3CDate = new Intl.DateTimeFormat([\"en-AU\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n});\n\nconst status2maturity = {\n LS: \"WD\",\n LD: \"WD\",\n FPWD: \"WD\",\n LC: \"WD\",\n FPLC: \"WD\",\n \"FPWD-NOTE\": \"NOTE\",\n \"WD-NOTE\": \"WD\",\n \"LC-NOTE\": \"LC\",\n \"IG-NOTE\": \"NOTE\",\n \"WG-NOTE\": \"NOTE\",\n};\n\nconst status2rdf = {\n NOTE: \"w3p:NOTE\",\n WD: \"w3p:WD\",\n LC: \"w3p:LastCall\",\n CR: \"w3p:CR\",\n CRD: \"w3p:CRD\",\n PR: \"w3p:PR\",\n REC: \"w3p:REC\",\n PER: \"w3p:PER\",\n RSCND: \"w3p:RSCND\",\n};\nconst status2text = {\n NOTE: \"Working Group Note\",\n \"WG-NOTE\": \"Working Group Note\",\n \"CG-NOTE\": \"Co-ordination Group Note\",\n \"IG-NOTE\": \"Interest Group Note\",\n \"Member-SUBM\": \"Member Submission\",\n \"Team-SUBM\": \"Team Submission\",\n MO: \"Member-Only Document\",\n ED: \"Editor's Draft\",\n LS: \"Living Standard\",\n LD: \"Living Document\",\n FPWD: \"First Public Working Draft\",\n WD: \"Working Draft\",\n \"FPWD-NOTE\": \"Working Group Note\",\n \"WD-NOTE\": \"Working Draft\",\n \"LC-NOTE\": \"Working Draft\",\n FPLC: \"First Public and Last Call Working Draft\",\n LC: \"Last Call Working Draft\",\n CR: \"Candidate Recommendation\",\n CRD: \"Candidate Recommendation\",\n PR: \"Proposed Recommendation\",\n PER: \"Proposed Edited Recommendation\",\n REC: \"Recommendation\",\n RSCND: \"Rescinded Recommendation\",\n unofficial: \"Unofficial Draft\",\n base: \"Document\",\n finding: \"TAG Finding\",\n \"draft-finding\": \"Draft TAG Finding\",\n \"CG-DRAFT\": \"Draft Community Group Report\",\n \"CG-FINAL\": \"Final Community Group Report\",\n \"BG-DRAFT\": \"Draft Business Group Report\",\n \"BG-FINAL\": \"Final Business Group Report\",\n};\nconst status2long = {\n ...status2text,\n CR: \"Candidate Recommendation Snapshot\",\n CRD: \"Candidate Recommendation Draft\",\n \"FPWD-NOTE\": \"First Public Working Group Note\",\n \"LC-NOTE\": \"Last Call Working Draft\",\n};\nconst maybeRecTrack = [\"FPWD\", \"WD\"];\nconst recTrackStatus = [\"FPLC\", \"LC\", \"CR\", \"CRD\", \"PR\", \"PER\", \"REC\"];\nexport const cgStatus = [\"CG-DRAFT\", \"CG-FINAL\"];\nexport const bgStatus = [\"BG-DRAFT\", \"BG-FINAL\"];\nexport const cgbgStatus = [...cgStatus, ...bgStatus];\nconst noTrackStatus = [\n \"base\",\n ...cgStatus,\n ...bgStatus,\n \"draft-finding\",\n \"finding\",\n \"MO\",\n \"unofficial\",\n];\nconst precededByAn = [\"ED\", \"IG-NOTE\"];\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"w3c-software\",\n {\n name: \"W3C Software Notice and License\",\n short: \"W3C Software\",\n url:\n \"https://www.w3.org/Consortium/Legal/2002/copyright-software-20021231\",\n },\n ],\n [\n \"w3c-software-doc\",\n {\n name: \"W3C Software and Document Notice and License\",\n short: \"W3C Software and Document\",\n url:\n \"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n]);\n\nconst baseLogo = Object.freeze({\n id: \"\",\n alt: \"\",\n href: \"\",\n src: \"\",\n height: \"48\",\n width: \"72\",\n});\n\n/**\n * @param {*} conf\n * @param {string} prop\n * @param {string | number | Date} fallbackDate\n */\nfunction validateDateAndRecover(conf, prop, fallbackDate = new Date()) {\n const date = conf[prop] ? new Date(conf[prop]) : new Date(fallbackDate);\n // if date is valid\n if (Number.isFinite(date.valueOf())) {\n const formattedDate = ISODate.format(date);\n return new Date(formattedDate);\n }\n const msg =\n `[\\`${prop}\\`](https://github.com/w3c/respec/wiki/${prop}) ` +\n `is not a valid date: \"${conf[prop]}\". Expected format 'YYYY-MM-DD'.`;\n showError(msg, name);\n return new Date(ISODate.format(new Date()));\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = `Missing required configuration: ${docLink(\"specStatus\")}.`;\n const hint = `Please select an appropriate status from ${docLink(\n \"specStatus\"\n )} based on your W3C group. If in doubt, use \\`\"unofficial\"\\`.`;\n showError(msg, name, { hint });\n }\n conf.isUnofficial = conf.specStatus === \"unofficial\";\n if (conf.isUnofficial && !Array.isArray(conf.logos)) {\n conf.logos = [];\n }\n if (conf.isUnofficial) {\n if (conf.license && !licenses.has(conf.license)) {\n const msg = `The ${docLink(\n \"license\"\n )} configuration option has an invalid value: \"\\`${\n conf.license\n }\\`\". Defaulting to \"cc-by\".`;\n const licensesKeys = [...licenses.keys()]\n .map(key => `\\`\"${key}\"\\``)\n .join(\", \");\n const hint = `Please explicitly set ${docLink(\n \"license\"\n )} to one of: ${licensesKeys}.`;\n showError(msg, name, { hint });\n conf.license = \"cc-by\";\n }\n // default it to cc-by\n if (conf.license === undefined) {\n conf.license = \"cc-by\";\n }\n }\n\n conf.isCCBY = conf.license === \"cc-by\";\n conf.isW3CSoftAndDocLicense = conf.license === \"w3c-software-doc\";\n if (!conf.isUnofficial && [\"cc-by\"].includes(conf.license)) {\n const msg = `You cannot use license \"\\`${conf.license}\\`\" with W3C Specs.`;\n const hint = `Please set ${docLink(\n \"license\"\n )} to \"w3c-software-doc\" instead.`;\n showError(msg, name, { hint });\n }\n conf.licenseInfo = licenses.get(conf.license);\n conf.isCGBG = cgbgStatus.includes(conf.specStatus);\n conf.isCGFinal = conf.isCGBG && conf.specStatus.endsWith(\"G-FINAL\");\n conf.isBasic = conf.specStatus === \"base\";\n conf.isRegular = !conf.isCGBG && !conf.isBasic;\n\n if (conf.isRegular && !conf.shortName) {\n const msg = \"Missing required configuration: `shortName`\";\n showError(msg, name);\n }\n if (conf.testSuiteURI) {\n const url = new URL(conf.testSuiteURI, location.href);\n const { host, pathname } = url;\n if (\n host === \"github.com\" &&\n pathname.startsWith(\"/w3c/web-platform-tests/\")\n ) {\n const msg =\n \"Web Platform Tests have moved to a new Github Organization at https://github.com/web-platform-tests. \";\n const hint =\n `Please update your ${docLink(\"testSuiteURI\")} to point to the ` +\n `new tests repository (e.g., https://github.com/web-platform-tests/wpt/tree/master/${conf.shortName} ).`;\n showWarning(msg, name, { hint });\n }\n }\n if (!conf.subtitle) conf.subtitle = \"\";\n conf.publishDate = validateDateAndRecover(\n conf,\n \"publishDate\",\n document.lastModified\n );\n conf.publishYear = conf.publishDate.getUTCFullYear();\n conf.publishHumanDate = W3CDate.format(conf.publishDate);\n conf.isNoTrack = noTrackStatus.includes(conf.specStatus);\n conf.isRecTrack = conf.noRecTrack\n ? false\n : recTrackStatus.concat(maybeRecTrack).includes(conf.specStatus);\n conf.isMemberSubmission = conf.specStatus === \"Member-SUBM\";\n if (conf.isMemberSubmission) {\n const memSubmissionLogo = {\n alt: \"W3C Member Submission\",\n href: \"https://www.w3.org/Submission/\",\n src: \"https://www.w3.org/Icons/member_subm-v.svg\",\n width: \"211\",\n };\n conf.logos.push({ ...baseLogo, ...memSubmissionLogo });\n }\n conf.isTeamSubmission = conf.specStatus === \"Team-SUBM\";\n if (conf.isTeamSubmission) {\n const teamSubmissionLogo = {\n alt: \"W3C Team Submission\",\n href: \"https://www.w3.org/TeamSubmission/\",\n src: \"https://www.w3.org/Icons/team_subm-v.svg\",\n width: \"211\",\n };\n conf.logos.push({ ...baseLogo, ...teamSubmissionLogo });\n }\n conf.isSubmission = conf.isMemberSubmission || conf.isTeamSubmission;\n conf.anOrA = precededByAn.includes(conf.specStatus) ? \"an\" : \"a\";\n conf.isTagFinding =\n conf.specStatus === \"finding\" || conf.specStatus === \"draft-finding\";\n\n if (conf.isRecTrack && !hasGitHubIssuesLink(conf)) {\n const msg = `Rec-track documents must link to Github issues from their head.`;\n const hint = `Please use the [\\`github\\`](https://respec.org/docs/#github) configuration option.`;\n showError(msg, name, { hint });\n }\n if (!conf.edDraftURI) {\n conf.edDraftURI = \"\";\n if (conf.specStatus === \"ED\") {\n const msg = \"Editor's Drafts should set edDraftURI.\";\n showWarning(msg, name);\n }\n }\n conf.maturity = status2maturity[conf.specStatus]\n ? status2maturity[conf.specStatus]\n : conf.specStatus;\n let publishSpace = \"TR\";\n if (conf.specStatus === \"Member-SUBM\") publishSpace = \"Submission\";\n else if (conf.specStatus === \"Team-SUBM\") publishSpace = \"TeamSubmission\";\n if (conf.isRegular)\n conf.thisVersion = `https://www.w3.org/${publishSpace}/${conf.publishDate.getUTCFullYear()}/${\n conf.maturity\n }-${conf.shortName}-${concatDate(conf.publishDate)}/`;\n if (conf.specStatus === \"ED\") conf.thisVersion = conf.edDraftURI;\n const skipLatestVersion =\n conf.specStatus === \"ED\" && conf.latestVersion === null;\n if (conf.isRegular && !skipLatestVersion)\n conf.latestVersion = `https://www.w3.org/${publishSpace}/${conf.shortName}/`;\n if (conf.isTagFinding) {\n conf.latestVersion = `https://www.w3.org/2001/tag/doc/${conf.shortName}`;\n conf.thisVersion = `${conf.latestVersion}-${ISODate.format(\n conf.publishDate\n )}`;\n }\n if (conf.previousPublishDate) {\n if (!conf.previousMaturity && !conf.isTagFinding) {\n const msg = \"`previousPublishDate` is set, but not `previousMaturity`.\";\n showError(msg, name);\n }\n\n conf.previousPublishDate = validateDateAndRecover(\n conf,\n \"previousPublishDate\"\n );\n\n const pmat = status2maturity[conf.previousMaturity]\n ? status2maturity[conf.previousMaturity]\n : conf.previousMaturity;\n if (conf.isTagFinding) {\n conf.prevVersion = `${conf.latestVersion}-${ISODate.format(\n conf.previousPublishDate\n )}`;\n } else if (conf.isCGBG) {\n conf.prevVersion = conf.prevVersion || \"\";\n } else if (conf.isBasic) {\n conf.prevVersion = \"\";\n } else {\n conf.prevVersion = `https://www.w3.org/TR/${conf.previousPublishDate.getUTCFullYear()}/${pmat}-${\n conf.shortName\n }-${concatDate(conf.previousPublishDate)}/`;\n }\n } else {\n if (\n !conf.specStatus.endsWith(\"NOTE\") &&\n conf.specStatus !== \"FPWD\" &&\n conf.specStatus !== \"FPLC\" &&\n conf.specStatus !== \"ED\" &&\n !conf.noRecTrack &&\n !conf.isNoTrack &&\n !conf.isSubmission\n ) {\n const msg = \"Document on track but no previous version.\";\n const hint =\n \"Add [`previousMaturity`](https://respec.org/docs/#previousMaturity) \" +\n \"and [`previousPublishDate`](https://respec.org/docs/#previousPublishDate) to ReSpec's config.\";\n showError(msg, name, { hint });\n }\n if (!conf.prevVersion) conf.prevVersion = \"\";\n }\n if (conf.prevRecShortname && !conf.prevRecURI)\n conf.prevRecURI = `https://www.w3.org/TR/${conf.prevRecShortname}`;\n const peopCheck = function (it) {\n if (!it.name) {\n const msg = \"All authors and editors must have a `name` property.\";\n const hint =\n \"See [Person](https://respec.org/docs/#person) configuration for available options.\";\n\n showError(msg, name, { hint });\n }\n if (it.orcid) {\n try {\n it.orcid = normalizeOrcid(it.orcid);\n } catch (e) {\n const msg = `\"${it.orcid}\" is not an ORCID. ${e.message}`;\n showError(msg, name);\n // A failed orcid link could link to something outside of orcid,\n // which would be misleading.\n delete it.orcid;\n }\n }\n };\n if (!conf.formerEditors) conf.formerEditors = [];\n if (conf.editors) {\n conf.editors.forEach(peopCheck);\n // Move any editors with retiredDate to formerEditors.\n for (let i = 0; i < conf.editors.length; i++) {\n const editor = conf.editors[i];\n if (\"retiredDate\" in editor) {\n conf.formerEditors.push(editor);\n conf.editors.splice(i--, 1);\n }\n }\n }\n if (!conf.editors || conf.editors.length === 0) {\n const msg = \"At least one editor is required\";\n showError(msg, name);\n }\n if (conf.formerEditors.length) {\n conf.formerEditors.forEach(peopCheck);\n }\n if (conf.authors) {\n conf.authors.forEach(peopCheck);\n }\n conf.multipleEditors = conf.editors && conf.editors.length > 1;\n conf.multipleFormerEditors = conf.formerEditors.length > 1;\n conf.multipleAuthors = conf.authors && conf.authors.length > 1;\n (conf.alternateFormats || []).forEach(it => {\n if (!it.uri || !it.label) {\n const msg = \"All alternate formats must have a uri and a label.\";\n showError(msg, name);\n }\n });\n if (conf.copyrightStart && conf.copyrightStart == conf.publishYear)\n conf.copyrightStart = \"\";\n conf.longStatus = status2long[conf.specStatus];\n conf.textStatus = status2text[conf.specStatus];\n if (status2rdf[conf.specStatus]) {\n conf.rdfStatus = status2rdf[conf.specStatus];\n }\n conf.showThisVersion = !conf.isNoTrack || conf.isTagFinding;\n conf.showPreviousVersion =\n conf.specStatus !== \"FPWD\" &&\n conf.specStatus !== \"FPLC\" &&\n conf.specStatus !== \"ED\" &&\n !conf.isNoTrack &&\n !conf.isSubmission;\n if (conf.specStatus.endsWith(\"NOTE\") && !conf.prevVersion)\n conf.showPreviousVersion = false;\n if (conf.isTagFinding)\n conf.showPreviousVersion = conf.previousPublishDate ? true : false;\n conf.notYetRec = conf.isRecTrack && conf.specStatus !== \"REC\";\n conf.isRec = conf.isRecTrack && conf.specStatus === \"REC\";\n if (conf.isRec && !conf.errata) {\n const msg = \"Recommendations must have an errata link.\";\n const hint =\n \"Add an [`errata`](https://respec.org/docs/#errata) URL to your respecConfig.\";\n showError(msg, name, { hint });\n }\n conf.prependW3C = !conf.isUnofficial;\n conf.isED = conf.specStatus === \"ED\";\n conf.isCR = conf.specStatus === \"CR\" || conf.specStatus === \"CRD\";\n conf.isCRDraft = conf.specStatus === \"CRD\";\n conf.isPR = conf.specStatus === \"PR\";\n conf.isPER = conf.specStatus === \"PER\";\n conf.isMO = conf.specStatus === \"MO\";\n conf.isNote = [\"FPWD-NOTE\", \"WG-NOTE\"].includes(conf.specStatus);\n conf.isIGNote = conf.specStatus === \"IG-NOTE\";\n conf.dashDate = ISODate.format(conf.publishDate);\n conf.publishISODate = conf.publishDate.toISOString();\n conf.shortISODate = ISODate.format(conf.publishDate);\n if (\n conf.wgPatentPolicy &&\n ![\"PP2017\", \"PP2020\"].includes(conf.wgPatentPolicy)\n ) {\n const msg =\n \"Invalid [`wgPatentPolicy`](https://respec.org/docs#wgPatentPolicy) value.\";\n const hint = 'Please use `\"PP2017\"` or `\"PP2020\"`.';\n showError(msg, name, { hint });\n }\n if (conf.hasOwnProperty(\"wgPatentURI\") && !Array.isArray(conf.wgPatentURI)) {\n Object.defineProperty(conf, \"wgId\", {\n get() {\n // it's always at \"pp-impl\" + 1\n const urlParts = this.wgPatentURI.split(\"/\");\n const pos = urlParts.findIndex(item => item === \"pp-impl\") + 1;\n return urlParts[pos] || \"\";\n },\n });\n } else {\n conf.wgId = conf.wgId ? conf.wgId : \"\";\n }\n // configuration done - yay!\n\n const options = {\n get multipleAlternates() {\n return conf.alternateFormats && conf.alternateFormats.length > 1;\n },\n get alternatesHTML() {\n return (\n conf.alternateFormats &&\n htmlJoinAnd(conf.alternateFormats, alt => {\n const lang = alt.hasOwnProperty(\"lang\") && alt.lang ? alt.lang : null;\n const type = alt.hasOwnProperty(\"type\") && alt.type ? alt.type : null;\n return html`<a\n rel=\"alternate\"\n href=\"${alt.uri}\"\n hreflang=\"${lang}\"\n type=\"${type}\"\n >${alt.label}</a\n >`;\n })\n );\n },\n };\n\n // insert into document\n const header = (conf.isCGBG ? cgbgHeadersTmpl : headersTmpl)(conf, options);\n document.body.prepend(header);\n document.body.classList.add(\"h-entry\");\n\n // handle SotD\n const sotd =\n document.getElementById(\"sotd\") || document.createElement(\"section\");\n if ((conf.isCGBG || !conf.isNoTrack || conf.isTagFinding) && !sotd.id) {\n const msg =\n \"A custom SotD paragraph is required for your type of document.\";\n showError(msg, name);\n }\n sotd.id = sotd.id || \"sotd\";\n sotd.classList.add(\"introductory\");\n // NOTE:\n // When arrays, wg and wgURI have to be the same length (and in the same order).\n // Technically wgURI could be longer but the rest is ignored.\n // However wgPatentURI can be shorter. This covers the case where multiple groups\n // publish together but some aren't used for patent policy purposes (typically this\n // happens when one is foolish enough to do joint work with the TAG). In such cases,\n // the groups whose patent policy applies need to be listed first, and wgPatentURI\n // can be shorter — but it still needs to be an array.\n const wgPotentialArray = [conf.wg, conf.wgURI, conf.wgPatentURI];\n if (\n wgPotentialArray.some(item => Array.isArray(item)) &&\n !wgPotentialArray.every(item => Array.isArray(item))\n ) {\n const msg =\n \"If one of '`wg`', '`wgURI`', or '`wgPatentURI`' is an array, they all have to be.\";\n showError(msg, name);\n }\n if (conf.isCGBG && !conf.wg) {\n const msg =\n \"[`wg`](https://github.com/w3c/respec/wiki/wg)\" +\n \" configuration option is required for this kind of document.\";\n showError(msg, name);\n }\n if (Array.isArray(conf.wg)) {\n conf.multipleWGs = conf.wg.length > 1;\n conf.wgHTML = htmlJoinAnd(conf.wg, (wg, idx) => {\n return html`the <a href=\"${conf.wgURI[idx]}\">${wg}</a>`;\n });\n const pats = [];\n for (let i = 0, n = conf.wg.length; i < n; i++) {\n pats.push(\n html`a\n <a href=\"${conf.wgPatentURI[i]}\" rel=\"disclosure\"\n >public list of any patent disclosures (${conf.wg[i]})</a\n >`\n );\n }\n conf.wgPatentHTML = htmlJoinAnd(pats);\n } else {\n conf.multipleWGs = false;\n if (conf.wg) {\n conf.wgHTML = html`the <a href=\"${conf.wgURI}\">${conf.wg}</a>`;\n }\n }\n if (conf.specStatus === \"PR\" && !conf.crEnd) {\n const msg =\n '`specStatus` is \"PR\" but no `crEnd` is specified (needed to indicate end of previous CR).';\n showError(msg, name);\n }\n\n if (conf.specStatus === \"CR\" && !conf.crEnd) {\n const msg =\n '`specStatus` is \"CR\", but no `crEnd` is specified in Respec config.';\n showError(msg, name);\n }\n conf.crEnd = validateDateAndRecover(conf, \"crEnd\");\n conf.humanCREnd = W3CDate.format(conf.crEnd);\n\n if (conf.specStatus === \"PR\" && !conf.prEnd) {\n const msg = `\\`specStatus\\` is \"PR\" but no \\`prEnd\\` is specified.`;\n showError(msg, name);\n }\n conf.prEnd = validateDateAndRecover(conf, \"prEnd\");\n conf.humanPREnd = W3CDate.format(conf.prEnd);\n\n if (conf.specStatus === \"PER\" && !conf.perEnd) {\n const msg = \"Status is PER but no perEnd is specified\";\n showError(msg, name);\n }\n conf.perEnd = validateDateAndRecover(conf, \"perEnd\");\n conf.humanPEREnd = W3CDate.format(conf.perEnd);\n\n const revisionTypes = [\"addition\", \"correction\"];\n if (\n conf.specStatus === \"REC\" &&\n conf.revisionTypes &&\n conf.revisionTypes.length > 0\n ) {\n const unknownRevisionType = conf.revisionTypes.find(\n x => !revisionTypes.includes(x)\n );\n if (unknownRevisionType) {\n const msg = `\\`specStatus\\` is \"REC\" with unknown revision type '${unknownRevisionType}'`;\n showError(msg, name);\n }\n if (conf.revisionTypes.includes(\"addition\") && !conf.updateableRec) {\n const msg = `\\`specStatus\\` is \"REC\" with proposed additions but the Rec is not marked as a allowing new features.`;\n showError(msg, name);\n }\n }\n\n if (\n conf.specStatus === \"REC\" &&\n conf.updateableRec &&\n conf.revisionTypes &&\n conf.revisionTypes.length > 0 &&\n !conf.revisedRecEnd\n ) {\n const msg = `\\`specStatus\\` is \"REC\" with proposed corrections or additions but no \\`revisedRecEnd\\` is specified.`;\n showError(msg, name);\n }\n conf.revisedRecEnd = validateDateAndRecover(conf, \"revisedRecEnd\");\n conf.humanRevisedRecEnd = W3CDate.format(conf.revisedRecEnd);\n\n conf.recNotExpected =\n conf.noRecTrack || conf.recNotExpected\n ? true\n : !conf.isRecTrack &&\n conf.maturity == \"WD\" &&\n conf.specStatus !== \"FPWD-NOTE\";\n if (conf.noRecTrack && recTrackStatus.includes(conf.specStatus)) {\n const msg = `Document configured as [\\`noRecTrack\\`](https://github.com/w3c/respec/wiki/noRecTrack), but its status (\"${conf.specStatus}\") puts it on the W3C Rec Track.`;\n const hint = `Status cannot be any of: ${recTrackStatus.join(\", \")}.`;\n showError(msg, name, { hint });\n }\n if (conf.isIGNote && !conf.charterDisclosureURI) {\n const msg =\n \"IG-NOTEs must link to charter's disclosure section using `charterDisclosureURI`.\";\n showError(msg, name);\n }\n if (!sotd.classList.contains(\"override\")) {\n html.bind(sotd)`${populateSoTD(conf, sotd)}`;\n }\n\n if (!conf.implementationReportURI && conf.isCR) {\n const msg =\n \"CR documents must have an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).\";\n showError(msg, name);\n }\n if (!conf.implementationReportURI && conf.isPR) {\n const msg =\n \"PR documents should include an \" +\n \" [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).\";\n showWarning(msg, name);\n }\n\n // Requested by https://github.com/w3c/respec/issues/504\n // Makes a record of a few auto-generated things.\n pub(\"amend-user-config\", {\n publishISODate: conf.publishISODate,\n generatedSubtitle: `${conf.longStatus} ${conf.publishHumanDate}`,\n });\n}\n\n/**\n * @param {*} conf\n * @param {HTMLElement} sotd\n */\nfunction populateSoTD(conf, sotd) {\n const options = {\n ...collectSotdContent(sotd, conf),\n\n get mailToWGPublicList() {\n return `mailto:${conf.wgPublicList}@w3.org`;\n },\n get mailToWGPublicListWithSubject() {\n const fragment = conf.subjectPrefix\n ? `?subject=${encodeURIComponent(conf.subjectPrefix)}`\n : \"\";\n return this.mailToWGPublicList + fragment;\n },\n get mailToWGPublicListSubscription() {\n return `mailto:${conf.wgPublicList}-request@w3.org?subject=subscribe`;\n },\n };\n const template = conf.isCGBG ? cgbgSotdTmpl : sotdTmpl;\n return template(conf, options);\n}\n\n/**\n * @param {HTMLElement} sotd\n */\nfunction collectSotdContent(sotd, { isTagFinding = false }) {\n const sotdClone = sotd.cloneNode(true);\n const additionalContent = document.createDocumentFragment();\n // we collect everything until we hit a section,\n // that becomes the custom content.\n while (sotdClone.hasChildNodes()) {\n if (\n isElement(sotdClone.firstChild) &&\n sotdClone.firstChild.localName === \"section\"\n ) {\n break;\n }\n additionalContent.appendChild(sotdClone.firstChild);\n }\n if (isTagFinding && !additionalContent.hasChildNodes()) {\n const msg = `ReSpec does not support automated SotD generation for TAG findings.`;\n const hint = `Please add the prerequisite content in the 'sotd' section.`;\n showWarning(msg, name, { hint });\n }\n return {\n additionalContent,\n // Whatever sections are left, we throw at the end.\n additionalSections: sotdClone.childNodes,\n };\n}\n\n/**\n * @param {string} orcid Either an ORCID URL or just the 16-digit ID which comes after the /\n * @return {string} the full ORCID URL. Throws an error if the ID is invalid.\n */\nfunction normalizeOrcid(orcid) {\n const orcidUrl = new URL(orcid, \"https://orcid.org/\");\n if (orcidUrl.origin !== \"https://orcid.org\") {\n throw new Error(\n `The origin should be \"https://orcid.org\", not \"${orcidUrl.origin}\".`\n );\n }\n\n // trailing slash would mess up checksum\n const orcidId = orcidUrl.pathname.slice(1).replace(/\\/$/, \"\");\n if (!/^\\d{4}-\\d{4}-\\d{4}-\\d{3}(\\d|X)$/.test(orcidId)) {\n throw new Error(\n `ORCIDs have the format \"1234-1234-1234-1234\", not \"${orcidId}\"`\n );\n }\n\n // calculate checksum as per https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier\n const lastDigit = orcidId[orcidId.length - 1];\n const remainder = orcidId\n .split(\"\")\n .slice(0, -1)\n .filter(c => /\\d/.test(c))\n .map(Number)\n .reduce((acc, c) => (acc + c) * 2, 0);\n const lastDigitInt = (12 - (remainder % 11)) % 11;\n const lastDigitShould = lastDigitInt === 10 ? \"X\" : String(lastDigitInt);\n if (lastDigit !== lastDigitShould) {\n throw new Error(`\"${orcidId}\" has an invalid checksum.`);\n }\n\n return orcidUrl.href;\n}\n\n/**\n * @param {Node} node\n * @return {node is Element}\n */\nfunction isElement(node) {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\nfunction hasGitHubIssuesLink(conf) {\n return (\n conf.github ||\n (conf.otherLinks &&\n conf.otherLinks.find(linkGroup =>\n linkGroup.data.find(\n l =>\n l.href &&\n l.href.toString().match(/^https:\\/\\/github\\.com\\/.*\\/issues/)\n )\n ))\n );\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Linter rule \"wpt-tests-exist\".\n * Warns about nonexistent web platform tests.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { showWarning } from \"../utils.js\";\n\nconst name = \"wpt-tests-exist\";\n\nconst meta = {\n en: {\n description: \"Non-existent Web Platform Tests\",\n howToFix: \"Please fix the tests mentioned.\",\n help: \"See developer console.\",\n },\n};\n\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {Promise<import(\"../LinterRule\").LinterResult>}\n */\nasync function linterFunction(conf, doc) {\n const filesInWPT = await getFilesInWPT(conf.testSuiteURI, conf.githubAPI);\n if (!filesInWPT) {\n return;\n }\n\n const offendingElements = [];\n const offendingTests = new Set();\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = doc.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n for (const elem of testables) {\n const tests = elem.dataset.tests\n .split(/,/gm)\n .map(test => test.trim().split(\"#\")[0])\n .filter(test => test);\n\n const missingTests = tests.filter(test => !filesInWPT.has(test));\n if (missingTests.length) {\n offendingElements.push(elem);\n missingTests.forEach(test => offendingTests.add(test));\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n\n const missingTests = [...offendingTests].map(test => `\\`${test}\\``);\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n description: `${meta[lang].description}: ${missingTests.join(\", \")}.`,\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\n/**\n * @param {string} testSuiteURI\n * @param {string} githubAPIBase\n */\nasync function getFilesInWPT(testSuiteURI, githubAPIBase) {\n let wptDirectory;\n try {\n const testSuiteURL = new URL(testSuiteURI);\n if (\n testSuiteURL.pathname.startsWith(\"/web-platform-tests/wpt/tree/master/\")\n ) {\n const re = /web-platform-tests\\/wpt\\/tree\\/master\\/(.+)/;\n wptDirectory = testSuiteURL.pathname.match(re)[1].replace(/\\//g, \"\");\n } else {\n wptDirectory = testSuiteURL.pathname.replace(/\\//g, \"\");\n }\n } catch (error) {\n const msg = \"Failed to parse WPT directory from testSuiteURI\";\n showWarning(msg, `linter/${name}`);\n console.error(error);\n return null;\n }\n\n const url = new URL(\"web-platform-tests/wpt/files\", `${githubAPIBase}/`);\n url.searchParams.set(\"path\", wptDirectory);\n\n const response = await fetch(url);\n if (!response.ok) {\n const error = await response.text();\n const msg =\n \"Failed to fetch files from WPT repository. \" +\n `Request failed with error: ${error} (${response.status})`;\n showWarning(msg, `linter/${name}`);\n return null;\n }\n /** @type {{ entries: string[] }} */\n const { entries } = await response.json();\n const files = entries.filter(entry => !entry.endsWith(\"/\"));\n return new Set(files);\n}\n","// @ts-check\n/**\n * Sets the defaults for W3C specs\n */\nexport const name = \"w3c/defaults\";\nimport { bgStatus, cgStatus, cgbgStatus } from \"./headers.js\";\nimport { docLink, showError } from \"../core/utils.js\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\nimport { rule as wptTestsExist } from \"../core/linter-rules/wpt-tests-exist.js\";\n\nlinter.register(privsecSectionRule, wptTestsExist);\n\nconst w3cLogo = {\n src: \"https://www.w3.org/StyleSheets/TR/2016/logos/W3C\",\n alt: \"W3C\",\n height: 48,\n width: 72,\n url: \"https://www.w3.org/\",\n};\n\nconst w3cDefaults = {\n lint: {\n \"privsec-section\": true,\n \"wpt-tests-exist\": false,\n },\n doJsonLd: false,\n logos: [],\n xref: true,\n};\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...w3cDefaults.lint,\n ...conf.lint,\n };\n\n if (conf.specStatus && conf.specStatus.toLowerCase() !== \"unofficial\") {\n w3cDefaults.logos.push(w3cLogo);\n if (!conf.hasOwnProperty(\"license\")) {\n w3cDefaults.license = \"w3c-software-doc\";\n }\n }\n\n Object.assign(conf, {\n ...coreDefaults,\n ...w3cDefaults,\n ...conf,\n lint,\n });\n\n if (conf.groupType && conf.specStatus) {\n validateStatusForGroup(conf);\n }\n}\n\nfunction validateStatusForGroup(conf) {\n const { specStatus, groupType } = conf;\n switch (groupType) {\n case \"cg\": {\n if (![...cgbgStatus, \"unofficial\"].includes(specStatus)) {\n const msg = `W3C Community Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please use one of: ${toMDCode(\n cgStatus\n )}. Automatically falling back to \\`\"CG-DRAFT\"\\`.`;\n showError(msg, name, { hint });\n conf.specStatus = \"CG-DRAFT\";\n }\n break;\n }\n case \"bg\": {\n if (![...bgStatus, \"unofficial\"].includes(specStatus)) {\n const msg = `W3C Business Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please use one of: ${toMDCode(\n bgStatus\n )}. Automatically falling back to \\`\"BG-DRAFT\"\\`.`;\n showError(msg, name, { hint });\n conf.specStatus = \"BG-DRAFT\";\n }\n break;\n }\n case \"wg\": {\n if (cgbgStatus.includes(specStatus)) {\n const msg = `W3C Working Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please see ${docLink(\n \"specStatus\"\n )} for appropriate values for this type of group.`;\n showError(msg, name, { hint });\n }\n break;\n }\n }\n}\n\nfunction toMDCode(list) {\n return list.map(item => `\\`\"${item}\"\\``).join(\", \");\n}\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport { fetchAsset } from \"./text-loader.js\";\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/respec.css\")).default;\n } catch {\n return fetchAsset(\"respec.css\");\n }\n}\n\nasync function insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = await loadStyle();\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport async function run(conf) {\n if (conf.noReSpecCSS) {\n (await styleElement).remove();\n }\n}\n","// @ts-check\n/* jshint strict: true, browser:true, jquery: true */\n// Module w3c/style\n// Inserts a link to the appropriate W3C style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"w3c/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n if (location.hash) {\n script.addEventListener(\n \"load\",\n () => {\n window.location.href = location.hash;\n },\n { once: true }\n );\n }\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createBaseStyle() {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = \"https://www.w3.org/StyleSheets/TR/2016/base.css\";\n link.classList.add(\"removeOnSave\");\n return link;\n}\n\nfunction selectStyleVersion(styleVersion) {\n let version = \"\";\n switch (styleVersion) {\n case null:\n case true:\n version = \"2016\";\n break;\n default:\n if (styleVersion && !isNaN(styleVersion)) {\n version = styleVersion.toString().trim();\n }\n }\n return version;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C styles and scripts.\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preload\", // all specs include on base.css.\n href: \"https://www.w3.org/StyleSheets/TR/2016/base.css\",\n as: \"style\",\n },\n {\n hint: \"preload\", // all specs show the logo.\n href: \"https://www.w3.org/StyleSheets/TR/2016/logos/W3C\",\n as: \"image\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// Opportunistically apply base style\nelements.appendChild(createBaseStyle());\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\nfunction styleMover(linkURL) {\n return exportDoc => {\n const w3cStyle = exportDoc.querySelector(`head link[href=\"${linkURL}\"]`);\n exportDoc.querySelector(\"head\").append(w3cStyle);\n };\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'base'.\";\n conf.specStatus = \"base\";\n showWarning(msg, name);\n }\n\n let styleFile = \"W3C-\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"CG-DRAFT\":\n case \"CG-FINAL\":\n case \"BG-DRAFT\":\n case \"BG-FINAL\":\n styleFile = conf.specStatus.toLowerCase();\n break;\n case \"FPWD\":\n case \"LC\":\n case \"WD-NOTE\":\n case \"LC-NOTE\":\n styleFile += \"WD\";\n break;\n case \"WG-NOTE\":\n case \"FPWD-NOTE\":\n styleFile += \"WG-NOTE.css\";\n break;\n case \"UNOFFICIAL\":\n styleFile += \"UD\";\n break;\n case \"FINDING\":\n case \"FINDING-DRAFT\":\n case \"BASE\":\n styleFile = \"base.css\";\n break;\n default:\n styleFile += conf.specStatus;\n }\n\n // Select between released styles and experimental style.\n const version = selectStyleVersion(conf.useExperimentalStyles || \"2016\");\n // Attach W3C fixup script after we are done.\n if (version && !conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, version);\n },\n { once: true }\n );\n }\n const finalVersionPath = version ? `${version}/` : \"\";\n const finalStyleURL = `https://www.w3.org/StyleSheets/TR/${finalVersionPath}${styleFile}`;\n linkCSS(document, finalStyleURL);\n // Make sure the W3C stylesheet is the last stylesheet, as required by W3C Pub Rules.\n const moveStyle = styleMover(finalStyleURL);\n sub(\"beforesave\", moveStyle);\n}\n","// @ts-check\n// Module w3c/l10n\n// Looks at the lang attribute on the root element and uses it to manage the config.l10n object so\n// that other parts of the system can localise their text\nimport { html } from \"../core/import-maps.js\";\nimport { l10n } from \"../core/l10n.js\";\nexport const name = \"w3c/l10n\";\nconst additions = {\n en: {\n status_at_publication: html`This section describes the status of this\n document at the time of its publication. Other documents may supersede\n this document. A list of current W3C publications and the latest revision\n of this technical report can be found in the\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> at\n https://www.w3.org/TR/.`,\n },\n ko: {\n status_at_publication: html`이 부분은 현재 문서의 발행 당시 상태에 대해\n 기술합니다. 다른 문서가 이 문서를 대체할 수 있습니다. W3C 발행 문서의 최신\n 목록 및 테크니컬 리포트 최신판을 https://www.w3.org/TR/ 의\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> 에서\n 열람할 수 있습니다.`,\n },\n zh: {\n status_at_publication: html`本章节描述了本文档的发布状态。其它更新版本可能会覆盖本文档。W3C的文档列\n 表和最新版本可通过<a href=\"https://www.w3.org/TR/\">W3C技术报告</a\n >索引访问。`,\n },\n ja: {\n status_at_publication: html`この節には、公開時点でのこの文書の位置づけが記されている。他の文書によって置き換えられる可能性がある。現時点でのW3Cの発行文書とこのテクニカルレポートの最新版は、下記から参照できる。\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a>\n (https://www.w3.org/TR/)`,\n },\n es: {\n status_at_publication: html`Esta sección describe el estado del presente\n documento al momento de su publicación. El presente documento puede ser\n remplazado por otros. Una lista de las publicaciones actuales del W3C y la\n última revisión del presente informe técnico puede hallarse en\n http://www.w3.org/TR/\n <a href=\"https://www.w3.org/TR/\">el índice de informes técnicos</a> del\n W3C.`,\n },\n de: {\n status_at_publication: html`Dieser Abschnitt beschreibt den Status des\n Dokuments zum Zeitpunkt der Publikation. Neuere Dokumente können dieses\n Dokument obsolet machen. Eine Liste der aktuellen Publikatinen des W3C und\n die aktuellste Fassung dieser Spezifikation kann im\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> unter\n https://www.w3.org/TR/ abgerufen werden.`,\n },\n};\n\nObject.keys(additions).forEach(key => {\n if (!l10n[key]) l10n[key] = {};\n Object.assign(l10n[key], additions[key]);\n});\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","/**\n * This module handles the creation of the h1#title of a spec and\n * makes sure the <title> always matches the h1.\n *\n * If no h1#title is included, then the <title> becomes the h1#title.\n *\n * When a h1#title is included, it always takes precedence over the\n * <title> of a spec. An error will be displayed in case of\n * any mismatch.\n *\n */\n\nimport { getIntlData, norm, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/title\";\n\nconst localizationStrings = {\n en: {\n default_title: \"No Title\",\n },\n de: {\n default_title: \"Kein Titel\",\n },\n zh: {\n default_title: \"无标题\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n /** @type {HTMLElement} */\n const h1Elem =\n document.querySelector(\"h1#title\") || html`<h1 id=\"title\"></h1>`;\n\n // check existing element is ok to use\n if (h1Elem.isConnected && h1Elem.textContent.trim() === \"\") {\n const msg =\n \"The document is missing a title, so using a default title. \" +\n \"To fix this, please give your document a `<title>`. \" +\n \"If you need special markup in the document's title, \" +\n 'please use a `<h1 id=\"title\">`.';\n const title = \"Document is missing a title\";\n showError(msg, name, { title, elements: [h1Elem] });\n }\n\n // Decorate the spec title\n if (!h1Elem.id) h1Elem.id = \"title\";\n h1Elem.classList.add(\"title\");\n\n setDocumentTitle(conf, h1Elem);\n\n // This will get relocated by a template later.\n document.body.prepend(h1Elem);\n}\n\nfunction setDocumentTitle(conf, h1Elem) {\n // If the h1 is newly created, it won't be connected. In this case\n // we use the <title> or a localized fallback.\n if (!h1Elem.isConnected) {\n h1Elem.textContent = document.title || `${l10n.default_title}`;\n }\n\n let documentTitle = norm(h1Elem.textContent);\n\n if (conf.isPreview && conf.prNumber) {\n const prUrl = conf.prUrl || `${conf.github.repoURL}pull/${conf.prNumber}`;\n const { childNodes } = html`\n Preview of PR <a href=\"${prUrl}\">#${conf.prNumber}</a>:\n `;\n h1Elem.prepend(...childNodes);\n documentTitle = `Preview of PR #${conf.prNumber}: ${documentTitle}`;\n }\n\n document.title = documentTitle;\n\n // conf.title is deperecated - we are keeping this here just to\n // retain backwards compat as we think the ePub generator\n // relies on it.\n conf.title = documentTitle;\n}\n","/**\n * This module updates the title and shortName\n * of a spec when there is a valid level configuration.\n *\n * Levels should be integers >= 0.\n */\n\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"w3c/level\";\n\nconst localizationStrings = {\n en: {\n level: \"Level\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n if (!conf.hasOwnProperty(\"level\")) return;\n\n const h1Elem = document.querySelector(\"h1#title\");\n\n const level = parseInt(conf.level);\n if (!Number.isInteger(level) || level < 0) {\n const msg = `The \\`level\\` configuration option must be a number greater or equal to 0. It is currently set to \\`${level}\\``;\n const title = \"Invalid level config.\";\n showError(msg, name, { title, elements: [h1Elem] });\n return;\n }\n\n h1Elem.append(` ${l10n.level} ${level}`);\n document.title = `${document.title} ${l10n.level} ${level}`;\n conf.shortName = `${conf.shortName}-${level}`;\n conf.level = level;\n}\n","// @ts-check\n// Module w3c/abstract\n// Handle the abstract section properly.\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"w3c/abstract\";\n\nconst localizationStrings = {\n en: {\n abstract: \"Abstract\",\n },\n ko: {\n abstract: \"요약\",\n },\n zh: {\n abstract: \"摘要\",\n },\n ja: {\n abstract: \"要約\",\n },\n nl: {\n abstract: \"Samenvatting\",\n },\n es: {\n abstract: \"Resumen\",\n },\n de: {\n abstract: \"Zusammenfassung\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run() {\n const abs = document.getElementById(\"abstract\");\n if (!abs) {\n const msg = 'Document must have one element with `id=\"abstract\"`.';\n showError(msg, name);\n return;\n }\n abs.classList.add(\"introductory\");\n let abstractHeading = document.querySelector(\"#abstract>h2\");\n if (abstractHeading) {\n return;\n }\n abstractHeading = document.createElement(\"h2\");\n abstractHeading.textContent = l10n.abstract;\n abs.prepend(abstractHeading);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Module core/data-abbr\n// - Finds all elements with data-abbr attribute and processes them.\nimport { showError } from \"./utils.js\";\nexport const name = \"core/dfn-abbr\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = document.querySelectorAll(\"[data-abbr]\");\n for (const elem of elements) {\n const { localName } = elem;\n switch (localName) {\n case \"dfn\":\n processDfnElement(elem);\n break;\n default: {\n const msg = `\\`data-abbr\\` attribute not supported on \\`${localName}\\` elements.`;\n showError(msg, name, {\n elements: [elem],\n title: \"Error: unsupported.\",\n });\n }\n }\n }\n}\n/**\n * @param {HTMLElement} dfn\n */\nfunction processDfnElement(dfn) {\n const abbr = generateAbbreviation(dfn);\n // get normalized <dfn> textContent to remove spaces, tabs, new lines.\n const fullForm = dfn.textContent.replace(/\\s\\s+/g, \" \").trim();\n dfn.insertAdjacentHTML(\n \"afterend\",\n ` (<abbr title=\"${fullForm}\">${abbr}</abbr>)`\n );\n const lt = dfn.dataset.lt || \"\";\n dfn.dataset.lt = lt\n .split(\"|\")\n .filter(i => i.trim())\n .concat(abbr)\n .join(\"|\");\n}\n\nfunction generateAbbreviation(elem) {\n if (elem.dataset.abbr) return elem.dataset.abbr;\n // Generates abbreviation from textContent\n // e.g., \"Permanent Account Number\" -> \"PAN\"\n return elem.textContent\n .match(/\\b([a-z])/gi)\n .join(\"\")\n .toUpperCase();\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\n/* jshint jquery: true */\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\n// for backward compatibity\nexport { wireReference, stringifyReference } from \"./render-biblio.js\";\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://specref.herokuapp.com/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst defaultsReference = Object.freeze({\n authors: [],\n date: \"\",\n href: \"\",\n publisher: \"\",\n status: \"\",\n title: \"\",\n etAl: false,\n});\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\nexport function wireReference(rawRef, target = \"_blank\") {\n if (typeof rawRef !== \"object\") {\n throw new TypeError(\"Only modern object references are allowed\");\n }\n const ref = Object.assign({}, defaultsReference, rawRef);\n const authors = ref.authors.join(\"; \") + (ref.etAl ? \" et al\" : \"\");\n const status = REF_STATUSES.get(ref.status) || ref.status;\n return html.wire(ref)`\n <cite>\n <a\n href=\"${ref.href}\"\n target=\"${target}\"\n rel=\"noopener noreferrer\">\n ${ref.title.trim()}</a>.\n </cite>\n <span class=\"authors\">\n ${endWithDot(authors)}\n </span>\n <span class=\"publisher\">\n ${endWithDot(ref.publisher)}\n </span>\n <span class=\"pubDate\">\n ${endWithDot(ref.date)}\n </span>\n <span class=\"pubStatus\">\n ${endWithDot(status)}\n </span>\n `;\n}\n\n/** @param {BiblioData|string} ref */\nexport function stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\n// Module w3c/conformance\n// Handle the conformance section properly.\nimport { getIntlData, htmlJoinAnd, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { renderInlineCitation } from \"../core/render-biblio.js\";\nimport { rfc2119Usage } from \"../core/inlines.js\";\nexport const name = \"w3c/conformance\";\n\nconst localizationStrings = {\n en: {\n conformance: \"Conformance\",\n normativity:\n \"As well as sections marked as non-normative, all authoring guidelines, \" +\n \"diagrams, examples, and notes in this specification are non-normative. \" +\n \"Everything else in this specification is normative.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n The key word${plural ? \"s\" : \"\"} ${keywords} in this document\n ${plural ? \"are\" : \"is\"} to be interpreted as described in\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n when, and only when, they appear in all capitals, as shown here.\n </p>`;\n },\n },\n de: {\n conformance: \"Anforderungen\",\n normativity:\n \"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten \" +\n \"sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument \" +\n \"nicht normativ. Alle anderen Angaben sind normativ.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n ${plural ? \"Die Schlüsselwörter\" : \"Das Schlüsselwort\"} ${keywords} in\n diesem Dokument ${plural ? \"sind\" : \"ist\"} gemäß\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n und unter Berücksichtigung von\n <a href=\"https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst\"\n >2119de</a\n >\n zu interpretieren, wenn und nur wenn ${plural ? \"sie\" : \"es\"} wie hier\n gezeigt durchgehend groß geschrieben wurde${plural ? \"n\" : \"\"}.\n </p>`;\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {Element} conformance\n * @param {*} conf\n */\nfunction processConformance(conformance, conf) {\n const terms = [...Object.keys(rfc2119Usage)];\n // Add RFC2119 to bibliography\n if (terms.length) {\n conf.normativeReferences.add(\"RFC2119\");\n conf.normativeReferences.add(\"RFC8174\");\n }\n // Put in the 2119 clause and reference\n const keywords = htmlJoinAnd(\n terms.sort(),\n item => html`<em class=\"rfc2119\">${item}</em>`\n );\n const plural = terms.length > 1;\n const content = html`\n <h2>${l10n.conformance}</h2>\n <p>${l10n.normativity}</p>\n ${terms.length ? l10n.keywordInterpretation(keywords, plural) : null}\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run(conf) {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance && !conformance.classList.contains(\"override\")) {\n processConformance(conformance, conf);\n }\n // Warn when there are RFC2119/RFC8174 keywords, but not conformance section\n if (!conformance && Object.keys(rfc2119Usage).length) {\n const msg = `Document uses RFC2119 keywords but lacks a conformance section.`;\n const hint = 'Please add a `<section id=\"conformance\">`.';\n showWarning(msg, name, { hint });\n }\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/examples.css\")).default;\n } catch {\n return fetchAsset(\"examples.css\");\n }\n}\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n const css = await cssPromise;\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/issues-notes.css\")).default;\n } catch {\n return fetchAsset(\"issues-notes.css\");\n }\n}\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const css = await cssPromise;\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\nimport { definitionMap, registerDefinition } from \"./dfn-map.js\";\nimport { showError, wrapInner } from \"./utils.js\";\n\nconst topLevelEntities = new Set([\n \"callback interface\",\n \"callback\",\n \"dictionary\",\n \"enum\",\n \"interface mixin\",\n \"interface\",\n \"typedef\",\n]);\n\n/**\n * This function looks for a <dfn> element whose title is 'name' and\n * that is \"for\" 'parent', which is the empty string when 'name'\n * refers to a top-level entity. For top-level entities, <dfn>\n * elements that inherit a non-empty [dfn-for] attribute are also\n * counted as matching.\n *\n * When a matching <dfn> is found, it's given <code> formatting,\n * marked as an IDL definition, and returned. If no <dfn> is found,\n * the function returns 'undefined'.\n * @param {*} defn\n * @param {string} name\n */\nexport function findDfn(defn, name, { parent = \"\" } = {}) {\n switch (defn.type) {\n case \"constructor\":\n case \"operation\":\n return findOperationDfn(defn, parent, name);\n default:\n return findNormalDfn(defn, parent, name);\n }\n}\n\n/**\n * @param {{ type: string, arguments: any[] }} idlAst\n * @param {string} parent\n * @param {string} name\n */\nfunction getAlternativeNames(idlAst, parent, name) {\n const { type } = idlAst;\n const asQualifiedName = `${parent}.${name}`;\n switch (type) {\n case \"constructor\":\n case \"operation\": {\n // Allow linking to \"method()\", method(arg) and \"method\" name.\n const asMethodName = `${name}()`;\n const asFullyQualifiedName = `${asQualifiedName}()`;\n const asMethodWithArgs = generateMethodNamesWithArgs(\n name,\n idlAst.arguments\n );\n return {\n local: [asQualifiedName, asFullyQualifiedName, name],\n exportable: [asMethodName, ...asMethodWithArgs],\n };\n }\n case \"attribute\":\n return {\n local: [asQualifiedName],\n exportable: [name],\n };\n }\n}\n\n/**\n * Generates all possible permutations of a method name based\n * on what arguments they method accepts.\n\n * Required arguments are always present, and optional ones\n * are stacked one by one.\n *\n * For examples: foo(req1, req2), foo(req1, req2, opt1) and so on.\n *\n * @param {String} operationName\n * @param {*} argsAst\n */\nfunction generateMethodNamesWithArgs(operationName, argsAst) {\n const operationNames = [];\n if (argsAst.length === 0) {\n return operationNames;\n }\n const required = []; // required arguments\n const optional = []; // optional arguments, including variadic ones\n for (const { name, optional: isOptional, variadic } of argsAst) {\n if (isOptional || variadic) {\n optional.push(name);\n } else {\n required.push(name);\n }\n }\n const requiredArgs = required.join(\", \");\n const requiredOperation = `${operationName}(${requiredArgs})`;\n operationNames.push(requiredOperation);\n const optionalOps = optional.map((_, index) => {\n const args = [...required, ...optional.slice(0, index + 1)].join(\", \");\n const result = `${operationName}(${args})`;\n return result;\n });\n operationNames.push(...optionalOps);\n return operationNames;\n}\n\n/**\n * @param {*} defn\n * @param {string} parent\n * @param {string} name\n */\nfunction findOperationDfn(defn, parent, name) {\n // Overloads all have unique names\n if (name.includes(\"!overload\")) {\n return findNormalDfn(defn, parent, name);\n }\n const asMethodName = `${name}()`;\n return findNormalDfn(defn, parent, asMethodName, name);\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {Record<\"local\" | \"exportable\", string[]>} names\n */\nfunction addAlternativeNames(dfn, names) {\n const { local, exportable } = names;\n const lt = dfn.dataset.lt ? new Set(dfn.dataset.lt.split(\"|\")) : new Set();\n for (const item of exportable) {\n lt.add(item);\n }\n // Fix any ill-placed ones - local ones don't belong here\n local.filter(item => lt.has(item)).forEach(item => lt.delete(item));\n dfn.dataset.lt = [...lt].join(\"|\");\n dfn.dataset.localLt = local.join(\"|\");\n registerDefinition(dfn, [...local, ...exportable]);\n}\n\n/**\n * @param {*} defn\n * @param {string} parent\n * @param {...string} names\n */\nfunction findNormalDfn(defn, parent, ...names) {\n const { type } = defn;\n for (const name of names) {\n let resolvedName =\n type === \"enum-value\" && name === \"\" ? \"the-empty-string\" : name;\n let dfns = getDfns(resolvedName, parent, name, type);\n // If we haven't found any definitions with explicit [for]\n // and [title], look for a dotted definition, \"parent.name\".\n if (dfns.length === 0 && parent !== \"\") {\n resolvedName = `${parent}.${resolvedName}`;\n const alternativeDfns = definitionMap.get(resolvedName);\n if (alternativeDfns && alternativeDfns.size === 1) {\n dfns = [...alternativeDfns];\n registerDefinition(dfns[0], [resolvedName]);\n }\n } else {\n resolvedName = name;\n }\n if (dfns.length > 1) {\n const msg = `WebIDL identifier \\`${name}\\` ${\n parent ? `for \\`${parent}\\`` : \"\"\n } is defined multiple times`;\n const title = \"Duplicate definition.\";\n showError(msg, name, { title, elements: dfns });\n }\n if (dfns.length) {\n return dfns[0];\n }\n }\n}\n\n/**\n * @param {HTMLElement} dfnElem\n * @param {*} idlAst\n * @param {string} parent\n * @param {string} name\n */\nexport function decorateDfn(dfnElem, idlAst, parent, name) {\n if (!dfnElem.id) {\n const lCaseParent = parent.toLowerCase();\n const middle = lCaseParent ? `${lCaseParent}-` : \"\";\n let last = name.toLowerCase().replace(/[()]/g, \"\").replace(/\\s/g, \"-\");\n if (last === \"\") last = \"the-empty-string\";\n dfnElem.id = `dom-${middle}${last}`;\n }\n dfnElem.dataset.idl = idlAst.type;\n dfnElem.dataset.title = dfnElem.textContent;\n dfnElem.dataset.dfnFor = parent;\n // Derive the data-type for dictionary members, interface attributes,\n // and methods\n switch (idlAst.type) {\n case \"operation\":\n case \"attribute\":\n case \"field\":\n dfnElem.dataset.type = getDataType(idlAst);\n break;\n }\n\n // Mark the definition as code.\n if (\n !dfnElem.querySelector(\"code\") &&\n !dfnElem.closest(\"code\") &&\n dfnElem.children\n ) {\n wrapInner(dfnElem, dfnElem.ownerDocument.createElement(\"code\"));\n }\n\n // Add data-lt and data-local-lt values and register them\n switch (idlAst.type) {\n case \"attribute\":\n case \"constructor\":\n case \"operation\":\n addAlternativeNames(dfnElem, getAlternativeNames(idlAst, parent, name));\n break;\n }\n\n return dfnElem;\n}\n\n/**\n * @param {string} name\n * @param {string} parent data-dfn-for\n * @param {string} originalName\n * @param {string} type\n */\nfunction getDfns(name, parent, originalName, type) {\n const foundDfns = definitionMap.get(name);\n if (!foundDfns || foundDfns.size === 0) {\n return [];\n }\n const dfnForArray = [...foundDfns];\n // Definitions that have a name and [data-dfn-for] that exactly match the\n // IDL entity:\n const dfns = dfnForArray.filter(dfn => {\n // This is explicitly marked as a concept, so we can't use it\n if (dfn.dataset.dfnType === \"dfn\") return false;\n\n /** @type {HTMLElement} */\n const closestDfnFor = dfn.closest(`[data-dfn-for]`);\n return closestDfnFor && closestDfnFor.dataset.dfnFor === parent;\n });\n\n if (dfns.length === 0 && parent === \"\" && dfnForArray.length === 1) {\n // Make sure the name exactly matches\n return dfnForArray[0].textContent === originalName ? dfnForArray : [];\n } else if (topLevelEntities.has(type) && dfnForArray.length) {\n const dfn = dfnForArray.find(\n dfn => dfn.textContent.trim() === originalName\n );\n if (dfn) return [dfn];\n }\n return dfns;\n}\n\n/**\n * @return {string}\n */\nfunction getDataType(idlStruct = {}) {\n const { idlType, generic, union } = idlStruct;\n if (idlType === undefined) return \"\";\n if (typeof idlType === \"string\") return idlType;\n if (generic) return generic;\n // join on \"|\" handles for \"unsigned short\" etc.\n if (union) return idlType.map(getDataType).join(\"|\");\n return getDataType(idlType);\n}\n","// @ts-check\n/**\n * Module core/webidl-clipboard\n *\n * This module adds a button to each IDL pre making it possible to copy\n * well-formatted IDL to the clipboard.\n *\n */\nexport const name = \"core/webidl-clipboard\";\n\nfunction createButton() {\n const copyButton = document.createElement(\"button\");\n copyButton.innerHTML =\n '<svg height=\"16\" viewBox=\"0 0 14 16\" width=\"14\"><path fill-rule=\"evenodd\" d=\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"/></svg>';\n copyButton.title = \"Copy IDL to clipboard\";\n copyButton.classList.add(\"respec-button-copy-paste\", \"removeOnSave\");\n return copyButton;\n}\n\nconst copyButton = createButton();\n\n/**\n * Adds a HTML button that copies WebIDL to the clipboard.\n *\n * @param {HTMLSpanElement} idlHeader\n */\nexport function addCopyIDLButton(idlHeader) {\n // There may be multiple <span>s of IDL, so we take everything\n // apart from the idl header.\n const pre = idlHeader.closest(\"pre.idl\");\n const idl = pre.cloneNode(true);\n idl.querySelector(\".idlHeader\").remove();\n const { textContent: idlText } = idl;\n const button = copyButton.cloneNode(true);\n button.addEventListener(\"click\", () => {\n navigator.clipboard.writeText(idlText);\n });\n idlHeader.append(button);\n}\n","// Module core/webidl\n// Highlights and links WebIDL marked up inside <pre class=\"idl\">.\n\n// TODO:\n// - It could be useful to report parsed IDL items as events\n// - don't use generated content in the CSS!\nimport {\n addHashId,\n showError,\n showWarning,\n wrapInner,\n xmlEscape,\n} from \"./utils.js\";\nimport { decorateDfn, findDfn } from \"./dfn-finder.js\";\nimport { html, webidl2 } from \"./import-maps.js\";\nimport { addCopyIDLButton } from \"./webidl-clipboard.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/webidl\";\nconst pluginName = name;\n\nconst operationNames = {};\nconst idlPartials = {};\n\nconst templates = {\n wrap(items) {\n return items\n .flat()\n .filter(x => x !== \"\")\n .map(x => (typeof x === \"string\" ? new Text(x) : x));\n },\n trivia(t) {\n if (!t.trim()) {\n return t;\n }\n return html`<span class=\"idlSectionComment\">${t}</span>`;\n },\n generic(keyword) {\n // Shepherd classifies \"interfaces\" as starting with capital letters,\n // like Promise, FrozenArray, etc.\n return /^[A-Z]/.test(keyword)\n ? html`<a data-xref-type=\"interface\" data-cite=\"WebIDL\">${keyword}</a>`\n : // Other keywords like sequence, maplike, etc...\n html`<a data-xref-type=\"dfn\" data-cite=\"WebIDL\">${keyword}</a>`;\n },\n reference(wrapped, unescaped, context) {\n if (context.type === \"extended-attribute\" && context.name !== \"Exposed\") {\n return wrapped;\n }\n let type = \"_IDL_\";\n let cite = null;\n let lt;\n switch (unescaped) {\n case \"Window\":\n type = \"interface\";\n cite = \"HTML\";\n break;\n case \"object\":\n type = \"interface\";\n cite = \"WebIDL\";\n break;\n default: {\n const isWorkerType = unescaped.includes(\"Worker\");\n if (isWorkerType && context.type === \"extended-attribute\") {\n lt = `${unescaped}GlobalScope`;\n type = \"interface\";\n cite = [\"Worker\", \"DedicatedWorker\", \"SharedWorker\"].includes(\n unescaped\n )\n ? \"HTML\"\n : null;\n }\n }\n }\n return html`<a data-xref-type=\"${type}\" data-cite=\"${cite}\" data-lt=\"${lt}\"\n >${wrapped}</a\n >`;\n },\n name(escaped, { data, parent }) {\n if (data.idlType && data.idlType.type === \"argument-type\") {\n return html`<span class=\"idlParamName\">${escaped}</span>`;\n }\n const idlLink = defineIdlName(escaped, data, parent);\n if (data.type !== \"enum-value\") {\n const className = parent ? \"idlName\" : \"idlID\";\n idlLink.classList.add(className);\n }\n return idlLink;\n },\n nameless(escaped, { data, parent }) {\n switch (data.type) {\n case \"operation\":\n case \"constructor\":\n return defineIdlName(escaped, data, parent);\n default:\n return escaped;\n }\n },\n type(contents) {\n return html`<span class=\"idlType\">${contents}</span>`;\n },\n inheritance(contents) {\n return html`<span class=\"idlSuperclass\">${contents}</span>`;\n },\n definition(contents, { data, parent }) {\n const className = getIdlDefinitionClassName(data);\n switch (data.type) {\n case \"includes\":\n case \"enum-value\":\n return html`<span class=\"${className}\">${contents}</span>`;\n }\n const parentName = parent ? parent.name : \"\";\n const { name, idlId } = getNameAndId(data, parentName);\n return html`<span\n class=\"${className}\"\n id=\"${idlId}\"\n data-idl\n data-title=\"${name}\"\n >${contents}</span\n >`;\n },\n extendedAttribute(contents) {\n const result = html`<span class=\"extAttr\">${contents}</span>`;\n return result;\n },\n extendedAttributeReference(name) {\n return html`<a data-xref-type=\"extended-attribute\">${name}</a>`;\n },\n};\n\n/**\n * Returns a link to existing <dfn> or creates one if doesn’t exists.\n */\nfunction defineIdlName(escaped, data, parent) {\n const parentName = parent ? parent.name : \"\";\n const { name } = getNameAndId(data, parentName);\n const dfn = findDfn(data, name, {\n parent: parentName,\n });\n const linkType = getDfnType(data.type);\n if (dfn) {\n if (!data.partial) {\n dfn.dataset.export = \"\";\n dfn.dataset.dfnType = linkType;\n }\n decorateDfn(dfn, data, parentName, name);\n const href = `#${dfn.id}`;\n return html`<a\n data-link-for=\"${parentName}\"\n data-link-type=\"${linkType}\"\n href=\"${href}\"\n class=\"internalDFN\"\n ><code>${escaped}</code></a\n >`;\n }\n\n const isDefaultJSON =\n data.type === \"operation\" &&\n data.name === \"toJSON\" &&\n data.extAttrs.some(({ name }) => name === \"Default\");\n if (isDefaultJSON) {\n return html`<a data-link-type=\"dfn\" data-lt=\"default toJSON steps\"\n >${escaped}</a\n >`;\n }\n if (!data.partial) {\n const dfn = html`<dfn data-export data-dfn-type=\"${linkType}\"\n >${escaped}</dfn\n >`;\n registerDefinition(dfn, [name]);\n decorateDfn(dfn, data, parentName, name);\n return dfn;\n }\n\n const unlinkedAnchor = html`<a\n data-idl=\"${data.partial ? \"partial\" : null}\"\n data-link-type=\"${linkType}\"\n data-title=\"${data.name}\"\n data-xref-type=\"${linkType}\"\n >${escaped}</a\n >`;\n\n const showWarnings =\n name && data.type !== \"typedef\" && !(data.partial && !dfn);\n if (showWarnings) {\n const styledName = data.type === \"operation\" ? `${name}()` : name;\n const ofParent = parentName ? ` \\`${parentName}\\`'s` : \"\";\n const msg = `Missing \\`<dfn>\\` for${ofParent} \\`${styledName}\\` ${data.type}. [More info](https://github.com/w3c/respec/wiki/WebIDL-thing-is-not-defined).`;\n showWarning(msg, pluginName, { elements: [unlinkedAnchor] });\n }\n return unlinkedAnchor;\n}\n\n/**\n * Map to Shepherd types, for export.\n * @see https://tabatkins.github.io/bikeshed/#dfn-types\n */\nfunction getDfnType(idlType) {\n switch (idlType) {\n case \"operation\":\n return \"method\";\n case \"field\":\n return \"dict-member\";\n case \"callback interface\":\n case \"interface mixin\":\n return \"interface\";\n default:\n return idlType;\n }\n}\n\nfunction getIdlDefinitionClassName(defn) {\n switch (defn.type) {\n case \"callback interface\":\n return \"idlInterface\";\n case \"operation\":\n return \"idlMethod\";\n case \"field\":\n return \"idlMember\";\n case \"enum-value\":\n return \"idlEnumItem\";\n case \"callback function\":\n return \"idlCallback\";\n }\n return `idl${defn.type[0].toUpperCase()}${defn.type.slice(1)}`;\n}\n\nconst nameResolverMap = new WeakMap();\nfunction getNameAndId(defn, parent = \"\") {\n if (nameResolverMap.has(defn)) {\n return nameResolverMap.get(defn);\n }\n const result = resolveNameAndId(defn, parent);\n nameResolverMap.set(defn, result);\n return result;\n}\n\nfunction resolveNameAndId(defn, parent) {\n let name = getDefnName(defn);\n // For getters, setters, etc. \"anonymous-getter\",\n const prefix = defn.special && defn.name === \"\" ? \"anonymous-\" : \"\";\n let idlId = getIdlId(prefix + name, parent);\n switch (defn.type) {\n // Top-level entities with linkable members.\n case \"callback interface\":\n case \"dictionary\":\n case \"interface\":\n case \"interface mixin\": {\n idlId += resolvePartial(defn);\n break;\n }\n case \"constructor\":\n case \"operation\": {\n const overload = resolveOverload(name, parent);\n if (overload) {\n name += overload;\n idlId += overload;\n } else if (defn.arguments.length) {\n idlId += defn.arguments\n .map(arg => `-${arg.name.toLowerCase()}`)\n .join(\"\");\n }\n break;\n }\n }\n return { name, idlId };\n}\n\nfunction resolvePartial(defn) {\n if (!defn.partial) {\n return \"\";\n }\n if (!idlPartials[defn.name]) {\n idlPartials[defn.name] = 0;\n }\n idlPartials[defn.name] += 1;\n return `-partial-${idlPartials[defn.name]}`;\n}\n\nfunction resolveOverload(name, parentName) {\n const qualifiedName = `${parentName}.${name}`;\n const fullyQualifiedName = `${qualifiedName}()`;\n let overload;\n if (!operationNames[fullyQualifiedName]) {\n operationNames[fullyQualifiedName] = 0;\n }\n if (!operationNames[qualifiedName]) {\n operationNames[qualifiedName] = 0;\n } else {\n overload = `!overload-${operationNames[qualifiedName]}`;\n }\n operationNames[fullyQualifiedName] += 1;\n operationNames[qualifiedName] += 1;\n return overload || \"\";\n}\n\nfunction getIdlId(name, parentName) {\n if (!parentName) {\n return `idl-def-${name.toLowerCase()}`;\n }\n return `idl-def-${parentName.toLowerCase()}-${name.toLowerCase()}`;\n}\n\nfunction getDefnName(defn) {\n switch (defn.type) {\n case \"enum-value\":\n return defn.value;\n case \"operation\":\n return defn.name || defn.special;\n default:\n return defn.name || defn.type;\n }\n}\n\n/**\n * @param {Element} idlElement\n * @param {number} index\n */\nfunction renderWebIDL(idlElement, index) {\n let parse;\n try {\n parse = webidl2.parse(idlElement.textContent, {\n sourceName: String(index),\n });\n } catch (e) {\n const msg = `Failed to parse WebIDL: ${e.bareMessage}.`;\n showError(msg, pluginName, {\n title: e.bareMessage,\n details: `<pre>${e.context}</pre>`,\n elements: [idlElement],\n });\n // Skip this <pre> and move on to the next one.\n return [];\n }\n // we add \"idl\" as the canonical match, so both \"webidl\" and \"idl\" work\n idlElement.classList.add(\"def\", \"idl\");\n const highlights = webidl2.write(parse, { templates });\n html.bind(idlElement)`${highlights}`;\n wrapInner(idlElement, document.createElement(\"code\"));\n idlElement.querySelectorAll(\"[data-idl]\").forEach(elem => {\n if (elem.dataset.dfnFor) {\n return;\n }\n const title = elem.dataset.title;\n // Select the nearest ancestor element that can contain members.\n const parent = elem.parentElement.closest(\"[data-idl][data-title]\");\n if (parent) {\n elem.dataset.dfnFor = parent.dataset.title;\n }\n if (elem.localName === \"dfn\") {\n registerDefinition(elem, [title]);\n }\n });\n // cross reference\n const closestCite = idlElement.closest(\"[data-cite], body\");\n const { dataset } = closestCite;\n if (!dataset.cite) dataset.cite = \"WebIDL\";\n // includes webidl in some form\n if (!/\\bwebidl\\b/i.test(dataset.cite)) {\n const cites = dataset.cite.trim().split(/\\s+/);\n dataset.cite = [\"WebIDL\", ...cites].join(\" \");\n }\n addIDLHeader(idlElement);\n return parse;\n}\n/**\n * Adds a \"WebIDL\" decorative header/permalink to a block of WebIDL.\n * @param {HTMLPreElement} pre\n */\nexport function addIDLHeader(pre) {\n addHashId(pre, \"webidl\");\n const header = html`<span class=\"idlHeader\"\n ><a class=\"self-link\" href=\"${`#${pre.id}`}\">WebIDL</a></span\n >`;\n pre.prepend(header);\n addCopyIDLButton(header);\n}\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/webidl.css\")).default;\n } catch {\n return fetchAsset(\"webidl.css\");\n }\n}\n\nexport async function run() {\n const idls = document.querySelectorAll(\"pre.idl, pre.webidl\");\n if (!idls.length) {\n return;\n }\n if (!document.querySelector(\".idl:not(pre), .webidl:not(pre)\")) {\n const link = document.querySelector(\"head link\");\n if (link) {\n const style = document.createElement(\"style\");\n style.textContent = await cssPromise;\n link.before(style);\n }\n }\n\n const astArray = [...idls].map(renderWebIDL);\n\n const validations = webidl2.validate(astArray);\n for (const validation of validations) {\n let details = `<pre>${xmlEscape(validation.context)}</pre>`;\n if (validation.autofix) {\n validation.autofix();\n const idlToFix = webidl2.write(astArray[validation.sourceName]);\n const escaped = xmlEscape(idlToFix);\n details += `Try fixing as:\n <pre>${escaped}</pre>`;\n }\n const msg = `WebIDL validation error: ${validation.bareMessage}`;\n showError(msg, pluginName, {\n details,\n elements: [idls[validation.sourceName]],\n title: validation.bareMessage,\n });\n }\n document.normalize();\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\nimport { API_URL } from \"./xref.js\";\nimport { idb } from \"./import-maps.js\";\n\n/**\n * @typedef {import('core/xref').RequestEntry} RequestEntry\n * @typedef {import('core/xref').Response} Response\n * @typedef {import('core/xref').SearchResultEntry} SearchResultEntry\n * @typedef {import('core/xref').XrefDatabase} XrefDatabase\n */\n\nconst STORE_NAME = \"xrefs\";\nconst VERSION_CHECK_WAIT = 5 * 60 * 1000; // 5 min\n\nasync function getIdbCache() {\n /** @type {XrefDatabase} */\n const db = await idb.openDB(\"xref\", 2, {\n upgrade(db) {\n [...db.objectStoreNames].forEach(s => db.deleteObjectStore(s));\n const store = db.createObjectStore(STORE_NAME, { keyPath: \"query.id\" });\n store.createIndex(\"byTerm\", \"query.term\", { unique: false });\n },\n });\n return db;\n}\n\n/** @param {RequestEntry[]} queries */\nexport async function resolveXrefCache(queries) {\n /** @type {Map<string, SearchResultEntry[]>} */\n const cachedData = new Map();\n\n const bustCache = await shouldBustCache();\n if (bustCache) {\n await clearXrefData();\n return cachedData;\n }\n\n const requiredKeySet = new Set(queries.map(query => query.id));\n try {\n const cache = await getIdbCache();\n let cursor = await cache.transaction(STORE_NAME).store.openCursor();\n while (cursor) {\n if (requiredKeySet.has(cursor.key)) {\n cachedData.set(cursor.key, cursor.value.result);\n }\n cursor = await cursor.continue();\n }\n } catch (err) {\n console.error(err);\n }\n return cachedData;\n}\n\n/**\n * Get last updated timestamp from server and bust cache based on that. This\n * way, we prevent dirty/erroneous/stale data being kept on a client (which is\n * possible if we use a `MAX_AGE` based caching strategy).\n */\nasync function shouldBustCache() {\n const key = \"XREF:LAST_VERSION_CHECK\";\n const lastChecked = parseInt(localStorage.getItem(key), 10);\n const now = Date.now();\n\n if (!lastChecked) {\n localStorage.setItem(key, now.toString());\n return false;\n }\n if (now - lastChecked < VERSION_CHECK_WAIT) {\n // avoid checking network for any data update if old cache \"fresh\"\n return false;\n }\n\n const url = new URL(\"meta/version\", API_URL).href;\n const res = await fetch(url);\n if (!res.ok) return false;\n const lastUpdated = await res.text();\n localStorage.setItem(key, now.toString());\n return parseInt(lastUpdated, 10) > lastChecked;\n}\n\n/**\n * @param {RequestEntry[]} queries\n * @param {Map<string, SearchResultEntry[]>} results\n */\nexport async function cacheXrefData(queries, results) {\n try {\n const cache = await getIdbCache();\n const tx = cache.transaction(STORE_NAME, \"readwrite\");\n for (const query of queries) {\n const result = results.get(query.id);\n tx.objectStore(STORE_NAME).add({ query, result });\n }\n await tx.done;\n } catch (e) {\n console.error(e);\n }\n}\n\nexport async function clearXrefData() {\n try {\n await getIdbCache().then(db => db.clear(STORE_NAME));\n } catch (e) {\n console.error(e);\n }\n}\n","// @ts-check\n/**\n * @module core/xref\n *\n * Automatically adds external references.\n *\n * Searches for the terms which do not have a local definition at xref API and\n * for each query, adds `data-cite` attributes to respective elements.\n * `core/data-cite` later converts these data-cite attributes to actual links.\n * https://github.com/w3c/respec/issues/1662\n */\n/**\n * @typedef {import('core/xref').RequestEntry} RequestEntry\n * @typedef {import('core/xref').Response} Response\n * @typedef {import('core/xref').SearchResultEntry} SearchResultEntry\n * @typedef {Map<string, { elems: HTMLElement[], results: SearchResultEntry[], query: RequestEntry }>} ErrorCollection\n * @typedef {{ ambiguous: ErrorCollection, notFound: ErrorCollection }} Errors\n */\nimport { cacheXrefData, resolveXrefCache } from \"./xref-db.js\";\nimport {\n createResourceHint,\n nonNormativeSelector,\n norm as normalize,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { possibleExternalLinks } from \"./link-to-dfn.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/xref\";\n\nconst profiles = {\n \"web-platform\": [\"HTML\", \"INFRA\", \"URL\", \"WEBIDL\", \"DOM\", \"FETCH\"],\n};\n\nexport const API_URL = \"https://respec.org/xref/\";\n\nif (\n !document.querySelector(\"link[rel='preconnect'][href='https://respec.org']\")\n) {\n const link = createResourceHint({\n hint: \"preconnect\",\n href: \"https://respec.org\",\n });\n document.head.appendChild(link);\n}\n\n/**\n * @param {Object} conf respecConfig\n */\nexport async function run(conf) {\n if (!conf.xref) {\n return;\n }\n\n const xref = normalizeConfig(conf.xref);\n if (xref.specs) {\n const bodyCite = document.body.dataset.cite\n ? document.body.dataset.cite.split(/\\s+/)\n : [];\n document.body.dataset.cite = bodyCite.concat(xref.specs).join(\" \");\n }\n\n const elems = possibleExternalLinks.concat(findExplicitExternalLinks());\n if (!elems.length) return;\n\n /** @type {RequestEntry[]} */\n const queryKeys = [];\n for (const elem of elems) {\n const entry = getRequestEntry(elem);\n const id = await objectHash(entry);\n queryKeys.push({ ...entry, id });\n }\n\n const data = await getData(queryKeys, xref.url);\n addDataCiteToTerms(elems, queryKeys, data, conf);\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Find additional references that need to be looked up externally.\n * Examples: a[data-cite=\"spec\"], dfn[data-cite=\"spec\"], dfn.externalDFN\n */\nfunction findExplicitExternalLinks() {\n /** @type {NodeListOf<HTMLElement>} */\n const links = document.querySelectorAll(\n \"a[data-cite]:not([data-cite='']):not([data-cite*='#']), \" +\n \"dfn[data-cite]:not([data-cite='']):not([data-cite*='#'])\"\n );\n /** @type {NodeListOf<HTMLElement>} */\n const externalDFNs = document.querySelectorAll(\"dfn.externalDFN\");\n return [...links]\n .filter(el => {\n // ignore empties\n if (el.textContent.trim() === \"\") return false;\n /** @type {HTMLElement} */\n const closest = el.closest(\"[data-cite]\");\n return !closest || closest.dataset.cite !== \"\";\n })\n .concat(...externalDFNs);\n}\n\n/**\n * converts conf.xref to object with url and spec properties\n */\nfunction normalizeConfig(xref) {\n const defaults = {\n url: API_URL,\n specs: null,\n };\n\n const config = Object.assign({}, defaults);\n\n const type = Array.isArray(xref) ? \"array\" : typeof xref;\n switch (type) {\n case \"boolean\":\n // using defaults already, as above\n break;\n case \"string\":\n if (xref.toLowerCase() in profiles) {\n Object.assign(config, { specs: profiles[xref.toLowerCase()] });\n } else {\n invalidProfileError(xref);\n }\n break;\n case \"array\":\n Object.assign(config, { specs: xref });\n break;\n case \"object\":\n Object.assign(config, xref);\n if (xref.profile) {\n const profile = xref.profile.toLowerCase();\n if (profile in profiles) {\n const specs = (xref.specs || []).concat(profiles[profile]);\n Object.assign(config, { specs });\n } else {\n invalidProfileError(xref.profile);\n }\n }\n break;\n default: {\n const msg = `Invalid value for \\`xref\\` configuration option. Received: \"${xref}\".`;\n showError(msg, name);\n }\n }\n return config;\n\n function invalidProfileError(profile) {\n const supportedProfiles = Object.keys(profiles)\n .map(p => `\"${p}\"`)\n .join(\", \");\n const msg =\n `Invalid profile \"${profile}\" in \\`respecConfig.xref\\`. ` +\n `Please use one of the supported profiles: ${supportedProfiles}.`;\n showError(msg, name);\n }\n}\n\n/**\n * get xref API request entry (term and context) for given xref element\n * @param {HTMLElement} elem\n */\nfunction getRequestEntry(elem) {\n const isIDL = \"xrefType\" in elem.dataset;\n\n let term = getTermFromElement(elem);\n if (!isIDL) term = term.toLowerCase();\n\n const specs = getSpecContext(elem);\n const types = getTypeContext(elem, isIDL);\n const forContext = getForContext(elem, isIDL);\n\n return {\n term,\n types,\n ...(specs.length && { specs }),\n ...(typeof forContext === \"string\" && { for: forContext }),\n };\n}\n\n/** @param {HTMLElement} elem */\nexport function getTermFromElement(elem) {\n const { lt: linkingText } = elem.dataset;\n let term = linkingText ? linkingText.split(\"|\", 1)[0] : elem.textContent;\n term = normalize(term);\n return term === \"the-empty-string\" ? \"\" : term;\n}\n\n/**\n * Get spec context as a fallback chain, where each level (sub-array) represents\n * decreasing priority.\n * @param {HTMLElement} elem\n */\nfunction getSpecContext(elem) {\n /** @type {string[][]} */\n const specs = [];\n\n /** @type {HTMLElement} */\n let dataciteElem = elem.closest(\"[data-cite]\");\n\n // Traverse up towards the root element, adding levels of lower priority specs\n while (dataciteElem) {\n const cite = dataciteElem.dataset.cite.toLowerCase().replace(/[!?]/g, \"\");\n const cites = cite.split(/\\s+/).filter(s => s);\n if (cites.length) {\n specs.push(cites);\n }\n if (dataciteElem === elem) break;\n dataciteElem = dataciteElem.parentElement.closest(\"[data-cite]\");\n }\n\n // If element itself contains data-cite, we don't take inline context into\n // account. The inline bibref context has lowest priority, if available.\n if (dataciteElem !== elem) {\n const closestSection = elem.closest(\"section\");\n /** @type {Iterable<HTMLElement>} */\n const bibrefs = closestSection\n ? closestSection.querySelectorAll(\"a.bibref\")\n : [];\n const inlineRefs = [...bibrefs].map(el => el.textContent.toLowerCase());\n if (inlineRefs.length) {\n specs.push(inlineRefs);\n }\n }\n\n const uniqueSpecContext = dedupeSpecContext(specs);\n return uniqueSpecContext;\n}\n\n/**\n * If we already have a spec in a higher priority level (closer to element) of\n * fallback chain, skip it from low priority levels, to prevent duplication.\n * @param {string[][]} specs\n * */\nfunction dedupeSpecContext(specs) {\n /** @type {string[][]} */\n const unique = [];\n for (const level of specs) {\n const higherPriority = unique[unique.length - 1] || [];\n const uniqueSpecs = [...new Set(level)].filter(\n spec => !higherPriority.includes(spec)\n );\n unique.push(uniqueSpecs.sort());\n }\n return unique;\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {boolean} isIDL\n */\nfunction getForContext(elem, isIDL) {\n if (elem.dataset.xrefFor) {\n return normalize(elem.dataset.xrefFor);\n }\n\n if (isIDL) {\n /** @type {HTMLElement} */\n const dataXrefForElem = elem.closest(\"[data-xref-for]\");\n if (dataXrefForElem) {\n return normalize(dataXrefForElem.dataset.xrefFor);\n }\n }\n\n return null;\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {boolean} isIDL\n */\nfunction getTypeContext(elem, isIDL) {\n if (isIDL) {\n if (elem.dataset.xrefType) {\n return elem.dataset.xrefType.split(\"|\");\n }\n return [\"_IDL_\"];\n }\n\n return [\"_CONCEPT_\"];\n}\n\n/**\n * @param {RequestEntry[]} queryKeys\n * @param {string} apiUrl\n * @returns {Promise<Map<string, SearchResultEntry[]>>}\n */\nasync function getData(queryKeys, apiUrl) {\n const uniqueIds = new Set();\n const uniqueQueryKeys = queryKeys.filter(key => {\n return uniqueIds.has(key.id) ? false : uniqueIds.add(key.id) && true;\n });\n\n const resultsFromCache = await resolveXrefCache(uniqueQueryKeys);\n\n const termsToLook = uniqueQueryKeys.filter(\n key => !resultsFromCache.get(key.id)\n );\n const fetchedResults = await fetchFromNetwork(termsToLook, apiUrl);\n if (fetchedResults.size) {\n // add data to cache\n await cacheXrefData(uniqueQueryKeys, fetchedResults);\n }\n\n return new Map([...resultsFromCache, ...fetchedResults]);\n}\n\n/**\n * @param {RequestEntry[]} keys\n * @param {string} url\n * @returns {Promise<Map<string, SearchResultEntry[]>>}\n */\nasync function fetchFromNetwork(keys, url) {\n if (!keys.length) return new Map();\n\n const query = { keys };\n const options = {\n method: \"POST\",\n body: JSON.stringify(query),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n const response = await fetch(url, options);\n const json = await response.json();\n return new Map(json.result);\n}\n\n/**\n * Figures out from the tree structure if the reference is\n * normative (true) or informative (false).\n * @param {HTMLElement} elem\n */\nfunction isNormative(elem) {\n const closestNormative = elem.closest(\".normative\");\n const closestInform = elem.closest(nonNormativeSelector);\n if (!closestInform || elem === closestNormative) {\n return true;\n }\n return (\n closestNormative &&\n closestInform &&\n closestInform.contains(closestNormative)\n );\n}\n\n/**\n * adds data-cite attributes to elems for each term for which results are found.\n * adds citations to references section.\n * collects and shows linking errors if any.\n * @param {HTMLElement[]} elems\n * @param {RequestEntry[]} queryKeys\n * @param {Map<string, SearchResultEntry[]>} data\n * @param {any} conf\n */\nfunction addDataCiteToTerms(elems, queryKeys, data, conf) {\n /** @type {Errors} */\n const errors = { ambiguous: new Map(), notFound: new Map() };\n\n for (let i = 0, l = elems.length; i < l; i++) {\n if (elems[i].closest(\"[data-no-xref]\")) continue;\n\n const elem = elems[i];\n const query = queryKeys[i];\n\n const { id } = query;\n const results = data.get(id);\n if (results.length === 1) {\n addDataCite(elem, query, results[0], conf);\n } else {\n const collector = errors[results.length === 0 ? \"notFound\" : \"ambiguous\"];\n if (!collector.has(id)) {\n collector.set(id, { elems: [], results, query });\n }\n collector.get(id).elems.push(elem);\n }\n }\n\n showErrors(errors);\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {RequestEntry} query\n * @param {SearchResultEntry} result\n * @param {any} conf\n */\nfunction addDataCite(elem, query, result, conf) {\n const { term, specs = [] } = query;\n const { uri, shortname, spec, normative, type, for: forContext } = result;\n // if authored spec context had `result.spec`, use it instead of shortname\n const cite = specs.flat().includes(spec) ? spec : shortname;\n const url = new URL(uri, \"https://example.org\");\n const { pathname: citePath } = url;\n const citeFrag = url.hash.slice(1);\n const dataset = { cite, citePath, citeFrag, type };\n if (forContext) dataset.linkFor = forContext[0];\n Object.assign(elem.dataset, dataset);\n\n addToReferences(elem, cite, normative, term, conf);\n}\n\n/**\n * add specs for citation (references section)\n * @param {HTMLElement} elem\n * @param {string} cite\n * @param {boolean} normative\n * @param {string} term\n * @param {any} conf\n */\nfunction addToReferences(elem, cite, normative, term, conf) {\n const isNormRef = isNormative(elem);\n if (!isNormRef) {\n // Only add it if not already normative...\n if (!conf.normativeReferences.has(cite)) {\n conf.informativeReferences.add(cite);\n }\n return;\n }\n if (normative) {\n // If it was originally informative, we move the existing\n // key to be normative.\n const existingKey = conf.informativeReferences.has(cite)\n ? conf.informativeReferences.getCanonicalKey(cite)\n : cite;\n conf.normativeReferences.add(existingKey);\n conf.informativeReferences.delete(existingKey);\n return;\n }\n\n const msg = `Normative reference to \"${term}\" found but term is defined informatively in \"${cite}\"`;\n const title = \"Error: Normative reference to informative term\";\n showWarning(msg, name, { title, elements: [elem] });\n}\n\n/** @param {Errors} errors */\nfunction showErrors({ ambiguous, notFound }) {\n const getPrefilledFormURL = (term, query, specs = []) => {\n const url = new URL(API_URL);\n url.searchParams.set(\"term\", term);\n if (query.for) url.searchParams.set(\"for\", query.for);\n url.searchParams.set(\"types\", query.types.join(\",\"));\n if (specs.length) url.searchParams.set(\"specs\", specs.join(\",\"));\n return url;\n };\n\n const howToFix = howToCiteURL =>\n \"[Learn more about this error](https://respec.org/docs/#error-term-not-found)\" +\n ` or see [how to cite to resolve the error](${howToCiteURL}).`;\n\n for (const { query, elems } of notFound.values()) {\n const specs = query.specs ? [...new Set(query.specs.flat())].sort() : [];\n const originalTerm = getTermFromElement(elems[0]);\n const formUrl = getPrefilledFormURL(originalTerm, query);\n const specsString = specs.map(spec => `\\`${spec}\\``).join(\", \");\n const hint = howToFix(formUrl);\n const msg = `Couldn't match \"**${originalTerm}**\" to anything in the document or in any other document cited in this specification: ${specsString}.`;\n const title = \"Error: No matching dfn found.\";\n showError(msg, name, { title, elements: elems, hint });\n }\n\n for (const { query, elems, results } of ambiguous.values()) {\n const specs = [...new Set(results.map(entry => entry.shortname))].sort();\n const specsString = specs.map(s => `**${s}**`).join(\", \");\n const originalTerm = getTermFromElement(elems[0]);\n const formUrl = getPrefilledFormURL(originalTerm, query, specs);\n const hint = howToFix(formUrl);\n const msg = `The term \"**${originalTerm}**\" is defined in ${specsString} in multiple ways, so it's ambiguous.`;\n const title = \"Error: Linking an ambiguous dfn.\";\n showError(msg, name, { title, elements: elems, hint });\n }\n}\n\nfunction objectHash(obj) {\n const str = JSON.stringify(obj, Object.keys(obj).sort());\n const buffer = new TextEncoder().encode(str);\n return crypto.subtle.digest(\"SHA-1\", buffer).then(bufferToHexString);\n}\n\n/** @param {ArrayBuffer} buffer */\nfunction bufferToHexString(buffer) {\n const byteArray = new Uint8Array(buffer);\n return [...byteArray].map(v => v.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction cleanup(doc) {\n const elems = doc.querySelectorAll(\n \"a[data-xref-for], a[data-xref-type], a[data-link-for]\"\n );\n const attrToRemove = [\"data-xref-for\", \"data-xref-type\", \"data-link-for\"];\n elems.forEach(el => {\n attrToRemove.forEach(attr => el.removeAttribute(attr));\n });\n}\n","// @ts-check\n/**\n * Module: core/webidl-index\n * constructs a summary of WebIDL in the document by\n * cloning all the generated WebIDL nodes and\n * appending them to pre element.\n *\n * Usage\n * Add a <section id=\"idl-index\"> to the document.\n * It also supports title elements to generate a header.\n * Or if a header element is an immediate child, then\n * that is preferred.\n */\nexport const name = \"core/webidl-index\";\nimport { nonNormativeSelector, wrapInner } from \"./utils.js\";\nimport { addIDLHeader } from \"./webidl.js\";\n\nexport function run() {\n /** @type {HTMLElement | null} */\n const idlIndexSec = document.querySelector(\"section#idl-index\");\n if (!idlIndexSec) {\n return;\n }\n // Query for decedents headings, e.g., \"h2:first-child, etc..\"\n const query = [2, 3, 4, 5, 6].map(level => `h${level}:first-child`).join(\",\");\n if (!idlIndexSec.querySelector(query)) {\n const header = document.createElement(\"h2\");\n if (idlIndexSec.title) {\n header.textContent = idlIndexSec.title;\n idlIndexSec.removeAttribute(\"title\");\n } else {\n header.textContent = \"IDL Index\";\n }\n idlIndexSec.prepend(header);\n }\n\n // filter out the IDL marked with class=\"exclude\" and the IDL in non-normative sections\n const idlIndex = Array.from(\n document.querySelectorAll(\"pre.idl:not(.exclude) > code\")\n ).filter(idl => !idl.closest(nonNormativeSelector));\n\n if (idlIndex.length === 0) {\n const text = \"This specification doesn't normatively declare any Web IDL.\";\n idlIndexSec.append(text);\n return;\n }\n\n const pre = document.createElement(\"pre\");\n pre.classList.add(\"idl\", \"def\");\n pre.id = \"actual-idl-index\";\n idlIndex\n .map(elem => {\n const fragment = document.createDocumentFragment();\n for (const child of elem.children) {\n fragment.appendChild(child.cloneNode(true));\n }\n return fragment;\n })\n .forEach(elem => {\n if (pre.lastChild) {\n pre.append(\"\\n\\n\");\n }\n pre.appendChild(elem);\n });\n // Remove duplicate IDs\n pre.querySelectorAll(\"*[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n\n // Add our own IDL header\n idlIndexSec.appendChild(pre);\n wrapInner(pre, document.createElement(\"code\"));\n addIDLHeader(pre);\n}\n","// @ts-check\n/**\n * If a `<section id=\"index\">` exists, it is filled by a list of terms defined\n * (locally) by current document and a list of terms referenced (external) by\n * current document.\n */\n\nimport { addId, getIntlData, norm } from \"./utils.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { getTermFromElement } from \"./xref.js\";\nimport { html } from \"./import-maps.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\nimport { sub } from \"./pubsubhub.js\";\nimport { toCiteDetails } from \"./data-cite.js\";\n\nexport const name = \"core/dfn-index\";\n\nconst localizationStrings = {\n en: {\n heading: \"Index\",\n headingExternal: \"Terms defined by reference\",\n headlingLocal: \"Terms defined by this specification\",\n dfnOf: \"definition of\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Terms of these _types_ are wrapped in `<code>`.\nconst CODE_TYPES = new Set([\n \"attribute\",\n \"callback\",\n \"dict-member\",\n \"dictionary\",\n \"element-attr\",\n \"element\",\n \"enum-value\",\n \"enum\",\n \"exception\",\n \"extended-attribute\",\n \"interface\",\n \"method\",\n \"typedef\",\n]);\n\n/**\n * @typedef {{ term: string, type: string, linkFor: string, elem: HTMLAnchorElement }} Entry\n */\n\nexport async function run() {\n const index = document.querySelector(\"section#index\");\n if (!index) {\n return;\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.textContent = await loadStyle();\n document.head.appendChild(styleEl);\n\n index.classList.add(\"appendix\");\n if (!index.querySelector(\"h2\")) {\n index.prepend(html`<h2>${l10n.heading}</h2>`);\n }\n\n const localTermIndex = html`<section id=\"index-defined-here\">\n <h3>${l10n.headlingLocal}</h3>\n ${createLocalTermIndex()}\n </section>`;\n index.append(localTermIndex);\n\n const externalTermIndex = html`<section id=\"index-defined-elsewhere\">\n <h3>${l10n.headingExternal}</h3>\n ${createExternalTermIndex()}\n </section>`;\n index.append(externalTermIndex);\n for (const el of externalTermIndex.querySelectorAll(\".index-term\")) {\n addId(el, \"index-term\");\n }\n\n // XXX: This event is used to overcome an edge case with core/structure,\n // related to a circular dependency in plugin run order. We want\n // core/structure to run after dfn-index so the #index can be listed in the\n // TOC, but we also want section numbers in dfn-index. So, we \"split\"\n // core/dfn-index in two parts, one that runs before core/structure (using\n // plugin order in profile) and the other (following) after section numbers\n // are generated in core/structure (this event).\n sub(\"toc\", appendSectionNumbers, { once: true });\n\n sub(\"beforesave\", cleanup);\n}\n\nfunction createLocalTermIndex() {\n const dataSortedByTerm = collectLocalTerms();\n return html`<ul class=\"index\">\n ${dataSortedByTerm.map(([term, dfns]) => renderLocalTerm(term, dfns))}\n </ul>`;\n}\n\nfunction collectLocalTerms() {\n /** @type {Map<string, HTMLElement[]>} */\n const data = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"dfn:not([data-cite])\");\n for (const elem of elems) {\n if (!elem.id) continue;\n const text = norm(elem.textContent);\n const elemsByTerm = data.get(text) || data.set(text, []).get(text);\n elemsByTerm.push(elem);\n }\n\n const dataSortedByTerm = [...data].sort(([a], [b]) =>\n a.slice(a.search(/\\w/)).localeCompare(b.slice(b.search(/\\w/)))\n );\n\n return dataSortedByTerm;\n}\n\n/**\n * @param {string} term\n * @param {HTMLElement[]} dfns\n * @returns {HTMLLIElement}\n */\nfunction renderLocalTerm(term, dfns) {\n const renderItem = (dfn, text, suffix) => {\n const href = `#${dfn.id}`;\n return html`<li data-id=${dfn.id}>\n <a class=\"index-term\" href=\"${href}\">${{ html: text }}</a> ${suffix\n ? { html: suffix }\n : \"\"}\n </li>`;\n };\n\n if (dfns.length === 1) {\n const dfn = dfns[0];\n const type = getLocalTermType(dfn);\n const text = getLocalTermText(dfn, type, term);\n const suffix = getLocalTermSuffix(dfn, type, term);\n return renderItem(dfn, text, suffix);\n }\n return html`<li>\n ${term}\n <ul>\n ${dfns.map(dfn => {\n const type = getLocalTermType(dfn);\n const text = getLocalTermSuffix(dfn, type, term) || l10n.dfnOf;\n return renderItem(dfn, text);\n })}\n </ul>\n </li>`;\n}\n\n/** @param {HTMLElement} dfn */\nfunction getLocalTermType(dfn) {\n const ds = dfn.dataset;\n const type = ds.dfnType || ds.idl || ds.linkType || \"\";\n switch (type) {\n case \"\":\n case \"dfn\":\n return \"\";\n default:\n return type;\n }\n}\n\n/** @param {HTMLElement} dfn */\nfunction getLocalTermParentContext(dfn) {\n /** @type {HTMLElement} */\n const dfnFor = dfn.closest(\"[data-dfn-for]:not([data-dfn-for=''])\");\n return dfnFor ? dfnFor.dataset.dfnFor : \"\";\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {string} type\n * @param {string} term\n */\nfunction getLocalTermText(dfn, type, term) {\n let text = term;\n if (type === \"enum-value\") {\n text = `\"${text}\"`;\n }\n if (CODE_TYPES.has(type) || dfn.dataset.idl || dfn.closest(\"code\")) {\n text = `<code>${text}</code>`;\n }\n return text;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {string} type\n * @param {string} [term=\"\"]\n */\nfunction getLocalTermSuffix(dfn, type, term = \"\") {\n if (term.startsWith(\"[[\")) {\n const parent = getLocalTermParentContext(dfn);\n return `internal slot for <code>${parent}</code>`;\n }\n\n switch (type) {\n case \"dict-member\":\n case \"method\":\n case \"attribute\":\n case \"enum-value\": {\n const typeText =\n type === \"dict-member\" ? \"member\" : type.replace(\"-\", \" \");\n const parent = getLocalTermParentContext(dfn);\n return `${typeText} for <code>${parent}</code>`;\n }\n case \"interface\":\n case \"dictionary\":\n case \"enum\": {\n return type;\n }\n case \"constructor\": {\n const parent = getLocalTermParentContext(dfn);\n return `for <code>${parent}</code>`;\n }\n default:\n return \"\";\n }\n}\n\nfunction appendSectionNumbers() {\n const getSectionNumber = id => {\n const dfn = document.getElementById(id);\n const sectionNumberEl = dfn.closest(\"section\").querySelector(\".secno\");\n const secNum = `§${sectionNumberEl.textContent.trim()}`;\n return html`<span class=\"print-only\">${secNum}</span>`;\n };\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"#index-defined-here li[data-id]\");\n elems.forEach(el => el.append(getSectionNumber(el.dataset.id)));\n}\n\nfunction createExternalTermIndex() {\n const data = collectExternalTerms();\n const dataSortedBySpec = [...data.entries()].sort(([specA], [specB]) =>\n specA.localeCompare(specB)\n );\n return html`<ul class=\"index\">\n ${dataSortedBySpec.map(\n ([spec, entries]) => html`<li data-spec=\"${spec}\">\n ${renderInlineCitation(spec)} defines the following:\n <ul>\n ${entries\n .sort((a, b) => a.term.localeCompare(b.term))\n .map(renderExternalTermEntry)}\n </ul>\n </li>`\n )}\n </ul>`;\n}\n\nfunction collectExternalTerms() {\n /** @type {Set<string>} */\n const uniqueReferences = new Set();\n /** @type {Map<string, Entry[]>} spec => entry[] */\n const data = new Map();\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const elements = document.querySelectorAll(`a[data-cite]`);\n for (const elem of elements) {\n if (!elem.dataset.cite) {\n continue;\n }\n const uniqueID = elem.href;\n if (uniqueReferences.has(uniqueID)) {\n continue;\n }\n\n const { type, linkFor } = elem.dataset;\n const term = getTermFromElement(elem);\n if (!term) {\n continue; // <a data-cite=\"SPEC\"></a>\n }\n const spec = toCiteDetails(elem).key.toUpperCase();\n\n const entriesBySpec = data.get(spec) || data.set(spec, []).get(spec);\n entriesBySpec.push({ term, type, linkFor, elem });\n uniqueReferences.add(uniqueID);\n }\n\n return data;\n}\n\n/**\n * @param {Entry} entry\n * @returns {HTMLLIElement}\n */\nfunction renderExternalTermEntry(entry) {\n const { elem } = entry;\n const text = getTermText(entry);\n const el = html`<li>\n <span class=\"index-term\" data-href=\"${elem.href}\">${{ html: text }}</span>\n </li>`;\n return el;\n}\n\n// Terms of these _types_ are suffixed with their type info.\nconst TYPED_TYPES = new Map([\n [\"attribute\", \"attribute\"],\n [\"element-attr\", \"attribute\"],\n [\"element\", \"element\"],\n [\"enum\", \"enum\"],\n [\"exception\", \"exception\"],\n [\"extended-attribute\", \"extended attribute\"],\n [\"interface\", \"interface\"],\n]);\n\n// These _terms_ have type suffix \"type\".\nconst TYPE_TERMS = new Set([\n // Following are primitive types as per WebIDL spec:\n \"boolean\",\n \"byte\",\n \"octet\",\n \"short\",\n \"unsigned short\",\n \"long\",\n \"unsigned long\",\n \"long long\",\n \"unsigned long long\",\n \"float\",\n \"unrestricted float\",\n \"double\",\n \"unrestricted double\",\n // Following are not primitive types, but aren't interfaces either.\n \"undefined\",\n \"any\",\n \"object\",\n \"symbol\",\n]);\n\n/** @param {Entry} entry */\nfunction getTermText(entry) {\n const { term, type, linkFor } = entry;\n let text = term;\n\n if (CODE_TYPES.has(type)) {\n if (type === \"extended-attribute\") {\n text = `[${text}]`;\n }\n text = `<code>${text}</code>`;\n }\n\n const typeSuffix = TYPE_TERMS.has(term) ? \"type\" : TYPED_TYPES.get(type);\n if (typeSuffix) {\n text += ` ${typeSuffix}`;\n }\n\n if (linkFor) {\n let linkForText = linkFor;\n if (!/\\s/.test(linkFor)) {\n // If linkFor is a single word, highlight it.\n linkForText = `<code>${linkForText}</code>`;\n }\n if (type === \"element-attr\") {\n linkForText += \" element\";\n }\n text += ` (for ${linkForText})`;\n }\n\n return text;\n}\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/dfn-index.css\")).default;\n } catch {\n return fetchAsset(\"dfn-index.css\");\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n doc\n .querySelectorAll(\"#index-defined-elsewhere li[data-spec]\")\n .forEach(el => el.removeAttribute(\"data-spec\"));\n\n doc\n .querySelectorAll(\"#index-defined-here li[data-id]\")\n .forEach(el => el.removeAttribute(\"data-id\"));\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","// @ts-check\n/**\n * Module: \"core/caniuse\"\n * Adds a caniuse support table for a \"feature\" #1238\n * Usage options: https://github.com/w3c/respec/wiki/caniuse\n */\nimport { pub, sub } from \"./pubsubhub.js\";\nimport { showError, showWarning } from \"./utils.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/caniuse\";\n\nconst API_URL = \"https://respec.org/caniuse/\";\n\nconst BROWSERS = new Set([\n \"and_chr\",\n \"and_ff\",\n \"and_uc\",\n \"android\",\n \"bb\",\n \"chrome\",\n \"edge\",\n \"firefox\",\n \"ie\",\n \"ios_saf\",\n \"op_mini\",\n \"op_mob\",\n \"opera\",\n \"safari\",\n \"samsung\",\n]);\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/caniuse.css\")).default;\n } catch {\n return fetchAsset(\"caniuse.css\");\n }\n}\n\nexport async function prepare(conf) {\n if (!conf.caniuse) {\n return; // nothing to do.\n }\n const options = getNormalizedConf(conf);\n conf.caniuse = options; // for tests\n if (!options.feature) {\n return; // no feature to show\n }\n\n const caniuseCss = await loadStyle();\n document.head.appendChild(html`<style class=\"removeOnSave\">\n ${caniuseCss}\n </style>`);\n\n const apiUrl = options.apiURL || API_URL;\n // Initiate a fetch, but do not wait. Try to fill the cache early instead.\n conf.state[name] = {\n fetchPromise: fetchStats(apiUrl, options),\n };\n}\n\nexport async function run(conf) {\n const options = conf.caniuse;\n if (!options?.feature) return;\n\n const featureURL = new URL(options.feature, \"https://caniuse.com/\").href;\n\n const headDlElem = document.querySelector(\".head dl\");\n const contentPromise = (async () => {\n try {\n const stats = await conf.state[name].fetchPromise;\n return html`${{ html: stats }}`;\n } catch (err) {\n const msg = `Couldn't find feature \"${options.feature}\" on caniuse.com.`;\n const hint =\n \"Please check the feature key on [caniuse.com](https://caniuse.com)\";\n showError(msg, name, { hint });\n console.error(err);\n return html`<a href=\"${featureURL}\">caniuse.com</a>`;\n }\n })();\n const definitionPair = html`<dt class=\"caniuse-title\">Browser support:</dt>\n <dd class=\"caniuse-stats\">\n ${{\n any: contentPromise,\n placeholder: \"Fetching data from caniuse.com...\",\n }}\n </dd>`;\n headDlElem.append(...definitionPair.childNodes);\n await contentPromise;\n\n // remove from export\n pub(\"amend-user-config\", { caniuse: options.feature });\n sub(\"beforesave\", outputDoc => {\n html.bind(outputDoc.querySelector(\".caniuse-stats\"))`\n <a href=\"${featureURL}\">caniuse.com</a>`;\n });\n}\n\n/**\n * returns normalized `conf.caniuse` configuration\n * @param {Object} conf configuration settings\n */\nfunction getNormalizedConf(conf) {\n const DEFAULTS = { versions: 4 };\n if (typeof conf.caniuse === \"string\") {\n return { feature: conf.caniuse, ...DEFAULTS };\n }\n const caniuseConf = { ...DEFAULTS, ...conf.caniuse };\n const { browsers } = caniuseConf;\n if (Array.isArray(browsers)) {\n const invalidBrowsers = browsers.filter(browser => !BROWSERS.has(browser));\n if (invalidBrowsers.length) {\n const names = invalidBrowsers.map(b => `\"\\`${b}\\`\"`).join(\", \");\n const msg =\n `Ignoring invalid browser(s): ${names} in ` +\n \"[`respecConfig.caniuse.browsers`](https://github.com/w3c/respec/wiki/caniuse)\";\n showWarning(msg, name);\n }\n }\n return caniuseConf;\n}\n\n/**\n * @param {string} apiURL\n * @typedef {Record<string, [string, string[]][]>} ApiResponse\n * @throws {Error} on failure\n */\nasync function fetchStats(apiURL, options) {\n const { feature, versions, browsers } = options;\n const searchParams = new URLSearchParams();\n searchParams.set(\"feature\", feature);\n searchParams.set(\"versions\", versions);\n if (Array.isArray(browsers)) {\n searchParams.set(\"browsers\", browsers.join(\",\"));\n }\n searchParams.set(\"format\", \"html\");\n const url = `${apiURL}?${searchParams.toString()}`;\n const response = await fetch(url);\n if (!response.ok) {\n const { status, statusText } = response;\n throw new Error(`Failed to get caniuse data: (${status}) ${statusText}`);\n }\n const stats = await response.text();\n return stats;\n}\n","// @ts-check\nimport { fetchAndCache, getIntlData, showError } from \"./utils.js\";\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/mdn-annotation\";\n\nconst BASE_JSON_PATH = \"https://w3c.github.io/mdn-spec-links/\";\nconst MDN_URL_BASE = \"https://developer.mozilla.org/en-US/docs/Web/\";\nconst MDN_BROWSERS = {\n // The browser IDs here must match the ones in the imported JSON data.\n // See the list of browser IDs at:\n // https://github.com/mdn/browser-compat-data/blob/master/schemas/compat-data-schema.md#browser-identifiers.\n chrome: \"Chrome\",\n chrome_android: \"Chrome Android\",\n edge: \"Edge\",\n edge_mobile: \"Edge Mobile\",\n firefox: \"Firefox\",\n firefox_android: \"Firefox Android\",\n ie: \"Internet Explorer\",\n // nodejs: \"Node.js\", // no data for features in HTML\n opera: \"Opera\",\n opera_android: \"Opera Android\",\n // qq_android: \"QQ Browser\", // not enough data for features in HTML\n safari: \"Safari\",\n safari_ios: \"Safari iOS\",\n samsunginternet_android: \"Samsung Internet\",\n // uc_android: \"UC browser\", // not enough data for features in HTML\n // uc_chinese_android: \"Chinese UC Browser\", // not enough data for features in HTML\n webview_android: \"WebView Android\",\n};\n\nconst localizationStrings = {\n en: {\n inAllEngines: \"This feature is in all major engines.\",\n inSomeEngines: \"This feature has limited support.\",\n },\n zh: {\n inAllEngines: \"所有主要引擎均支持此特性。\",\n inSomeEngines: \"此功能支持有限。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/mdn-annotation.css\")).default;\n } catch {\n return fetchAsset(\"mdn-annotation.css\");\n }\n}\n\n/**\n * @param {HTMLElement} node\n */\nfunction insertMDNBox(node) {\n const targetAncestor = node.closest(\"section\");\n if (!targetAncestor) return;\n const { previousElementSibling: targetSibling } = targetAncestor;\n if (targetSibling && targetSibling.classList.contains(\"mdn\")) {\n // If the target ancestor already has a mdnBox inserted, we just use it\n return targetSibling;\n }\n const mdnBox = html`<aside class=\"mdn\"></aside>`;\n targetAncestor.before(mdnBox);\n return mdnBox;\n}\n\n/**\n * @param {MdnEntry} mdnSpec\n * @returns {HTMLDetailsElement}\n */\nfunction attachMDNDetail(mdnSpec) {\n const { name, slug, summary, support, engines } = mdnSpec;\n const mdnSubPath = slug.slice(slug.indexOf(\"/\") + 1);\n const href = `${MDN_URL_BASE}${slug}`;\n const label = `Expand MDN details for ${name}`;\n const engineSupport = getEngineSupportIcons(engines);\n return html`<details>\n <summary aria-label=\"${label}\"><span>MDN</span>${engineSupport}</summary>\n <a title=\"${summary}\" href=\"${href}\">${mdnSubPath}</a>\n ${getEngineSupport(engines)}\n ${support\n ? buildBrowserSupportTable(support)\n : html`<p class=\"nosupportdata\">No support data.</p>`}\n </details>`;\n}\n\n/**\n * @param {MdnEntry['support']} support\n * @returns {HTMLTableElement}\n */\nfunction buildBrowserSupportTable(support) {\n /**\n * @param {string | keyof MDN_BROWSERS} browserId\n * @param {\"Yes\" | \"No\" | \"Unknown\"} yesNoUnknown\n * @param {string} version\n * @returns {HTMLTableRowElement}\n */\n function createRow(browserId, yesNoUnknown, version) {\n const displayStatus = yesNoUnknown === \"Unknown\" ? \"?\" : yesNoUnknown;\n const classList = `${browserId} ${yesNoUnknown.toLowerCase()}`;\n return html`<tr class=\"${classList}\">\n <td>${MDN_BROWSERS[browserId]}</td>\n <td>${version ? version : displayStatus}</td>\n </tr>`;\n }\n\n /**\n * @param {string | keyof MDN_BROWSERS} browserId\n * @param {VersionDetails} versionData\n */\n function createRowFromBrowserData(browserId, versionData) {\n if (versionData.version_removed) {\n return createRow(browserId, \"No\", \"\");\n }\n const versionAdded = versionData.version_added;\n if (typeof versionAdded === \"boolean\") {\n return createRow(browserId, versionAdded ? \"Yes\" : \"No\", \"\");\n } else if (!versionAdded) {\n return createRow(browserId, \"Unknown\", \"\");\n } else {\n return createRow(browserId, \"Yes\", `${versionAdded}+`);\n }\n }\n\n return html`<table>\n ${Object.keys(MDN_BROWSERS).map(browserId => {\n return support[browserId]\n ? createRowFromBrowserData(browserId, support[browserId])\n : createRow(browserId, \"Unknown\", \"\");\n })}\n </table>`;\n}\n\nexport async function run(conf) {\n const mdnKey = getMdnKey(conf);\n if (!mdnKey) return;\n\n const mdnSpecJson = await getMdnData(mdnKey, conf.mdn);\n if (!mdnSpecJson) return;\n\n const style = document.createElement(\"style\");\n style.textContent = await loadStyle();\n document.head.append(style);\n\n for (const elem of findElements(mdnSpecJson)) {\n const mdnSpecArray = mdnSpecJson[elem.id];\n const mdnBox = insertMDNBox(elem);\n if (!mdnBox) continue;\n for (const spec of mdnSpecArray) {\n mdnBox.append(attachMDNDetail(spec));\n }\n }\n}\n\n/** @returns {string} */\nfunction getMdnKey(conf) {\n const { shortName, mdn } = conf;\n if (!mdn) return;\n if (typeof mdn === \"string\") return mdn;\n return mdn.key || shortName;\n}\n\n/**\n * @param {string} key MDN key\n * @param {object} mdnConf\n * @param {string} [mdnConf.specMapUrl]\n * @param {string} [mdnConf.baseJsonPath]\n * @param {number} [mdnConf.maxAge]\n *\n * @typedef {{ version_added: string|boolean|null, version_removed?: string }} VersionDetails\n * @typedef {Record<string | keyof MDN_BROWSERS, VersionDetails>} MdnSupportEntry\n * @typedef {{ name: string, title: string, slug: string, summary: string, support: MdnSupportEntry, engines: string[] }} MdnEntry\n * @typedef {Record<string, MdnEntry[]>} MdnData\n * @returns {Promise<MdnData|undefined>}\n */\nasync function getMdnData(key, mdnConf) {\n const {\n baseJsonPath = BASE_JSON_PATH,\n maxAge = 60 * 60 * 24 * 1000,\n } = mdnConf;\n const url = new URL(`${key}.json`, baseJsonPath).href;\n const res = await fetchAndCache(url, maxAge);\n if (res.status === 404) {\n const msg = `Could not find MDN data associated with key \"${key}\".`;\n const hint = \"Please add a valid key to `respecConfig.mdn`\";\n showError(msg, name, { hint });\n return;\n }\n return await res.json();\n}\n\n/**\n * Find elements that can have an annotation box attached.\n * @param {MdnData} data\n */\nfunction findElements(data) {\n /** @type {NodeListOf<HTMLElement>} */\n const elemsWithId = document.body.querySelectorAll(\"[id]:not(script)\");\n return [...elemsWithId].filter(({ id }) => Array.isArray(data[id]));\n}\n\n/**\n * @param {MdnEntry['engines']} engines\n * @returns {HTMLSpanElement}\n */\nfunction getEngineSupportIcons(engines) {\n if (engines.length === 3) {\n return html`<span title=\"${l10n.inAllEngines}\">✅</span>`;\n }\n if (engines.length < 2) {\n return html`<span title=\"${l10n.inSomeEngines}\">🚫</span>`;\n }\n return html`<span> </span>`;\n}\n\n/**\n * @param {MdnEntry['engines']} engines\n * @returns {HTMLParagraphElement|undefined}\n */\nfunction getEngineSupport(engines) {\n if (engines.length === 3) {\n return html`<p class=\"engines-all\">${l10n.inAllEngines}</p>`;\n }\n if (engines.length < 2) {\n return html`<p class=\"engines-some\">${l10n.inSomeEngines}</p>`;\n }\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nfunction serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/search-specref\n// Search Specref database\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\nimport { wireReference } from \"../core/biblio.js\";\n\nconst localizationStrings = {\n en: {\n search_specref: \"Search Specref\",\n },\n nl: {\n search_specref: \"Doorzoek Specref\",\n },\n ja: {\n search_specref: \"仕様検索\",\n },\n de: {\n search_specref: \"Spezifikationen durchsuchen\",\n },\n zh: {\n search_specref: \"搜索 Specref\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst button = ui.addCommand(\n l10n.search_specref,\n show,\n \"Ctrl+Shift+Alt+space\",\n \"🔎\"\n);\nconst specrefURL = \"https://specref.herokuapp.com/\";\nconst refSearchURL = `${specrefURL}search-refs`;\nconst reveseLookupURL = `${specrefURL}reverse-lookup`;\nconst form = document.createElement(\"form\");\nconst renderer = html.bind(form);\nconst resultList = html.bind(document.createElement(\"div\"));\n\nform.id = \"specref-ui\";\n\n/**\n * @param {Map<string, string>} resultMap\n * @param {string} query\n * @param {number} timeTaken\n */\nfunction renderResults(resultMap, query, timeTaken) {\n if (!resultMap.size) {\n return resultList`\n <p class=\"state\">\n Your search - <strong> ${query} </strong> -\n did not match any references.\n </p>\n `;\n }\n const wires = Array.from(resultMap)\n .slice(0, 99)\n .map(toDefinitionPair)\n .reduce((collector, pair) => collector.concat(pair), []);\n return resultList`\n <p class=\"result-stats\">\n ${resultMap.size} results (${timeTaken} seconds).\n ${resultMap.size > 99 ? \"First 100 results.\" : \"\"}\n </p>\n <dl class=\"specref-results\">${wires}</dl>\n `;\n}\n\nfunction toDefinitionPair([key, entry]) {\n return html.wire(entry)`\n <dt>\n [${key}]\n </dt>\n <dd>${wireReference(entry)}</dd>\n `;\n}\n\nfunction resultProcessor({ includeVersions = false } = {}) {\n return (...fetchedData) => {\n /** @type {{ [key: string]: any }} */\n const combinedResults = Object.assign({}, ...fetchedData);\n const results = new Map(Object.entries(combinedResults));\n // remove aliases\n Array.from(results)\n .filter(([, entry]) => entry.aliasOf)\n .map(([key]) => key)\n .reduce((results, key) => results.delete(key) && results, results);\n // Remove versions, if asked to\n if (!includeVersions) {\n Array.from(results.values())\n .filter(entry => typeof entry === \"object\" && \"versions\" in entry)\n .flat()\n .forEach(version => {\n results.delete(version);\n });\n }\n // Remove legacy string entries\n Array.from(results)\n .filter(([, value]) => typeof value !== \"object\")\n .forEach(([key]) => results.delete(key));\n return results;\n };\n}\n\nform.addEventListener(\"submit\", async ev => {\n ev.preventDefault();\n const { searchBox } = form;\n const query = searchBox.value;\n if (!query) {\n searchBox.focus();\n return;\n }\n render({ state: \"Searching Specref…\" });\n const refSearch = new URL(refSearchURL);\n refSearch.searchParams.set(\"q\", query);\n const reverseLookup = new URL(reveseLookupURL);\n reverseLookup.searchParams.set(\"urls\", query);\n try {\n const startTime = performance.now();\n const jsonData = await Promise.all([\n fetch(refSearch).then(response => response.json()),\n fetch(reverseLookup).then(response => response.json()),\n ]);\n const { checked: includeVersions } = form.includeVersions;\n const processResults = resultProcessor({ includeVersions });\n const results = processResults(...jsonData);\n render({\n query,\n results,\n state: \"\",\n timeTaken: Math.round(performance.now() - startTime) / 1000,\n });\n } catch (err) {\n console.error(err);\n render({ state: \"Error! Couldn't do search.\" });\n } finally {\n searchBox.focus();\n }\n});\n\nfunction show() {\n render();\n ui.freshModal(l10n.search_specref, form, button);\n /** @type {HTMLElement} */\n const input = form.querySelector(\"input[type=search]\");\n input.focus();\n}\n\nconst mast = html.wire()`\n <header>\n <p>\n An Open-Source, Community-Maintained Database of\n Web Standards & Related References.\n </p>\n </header>\n <div class=\"searchcomponent\">\n <input\n name=\"searchBox\"\n type=\"search\"\n aria-label=\"Search\"\n autocomplete=\"off\"\n placeholder=\"Keywords, titles, authors, urls…\">\n <button\n type=\"submit\">\n Search\n </button>\n <label>\n <input type=\"checkbox\" name=\"includeVersions\"> Include all versions.\n </label>\n </div>\n`;\n\n/**\n * @param {object} options\n * @param {string} [options.state]\n * @param {Map<string, string>} [options.results]\n * @param {number} [options.timeTaken]\n * @param {string} [options.query]\n */\nfunction render({ state = \"\", results, timeTaken, query } = {}) {\n if (!results) {\n renderer`<div>${mast}</div>`;\n return;\n }\n renderer`\n <div>${mast}</div>\n <p class=\"state\" hidden=\"${!state}\">\n ${state}\n </p>\n <section hidden=\"${!results}\" aria-live=\"polite\">${\n results ? renderResults(results, query, timeTaken) : []\n }</section>\n `;\n}\n","// @ts-check\n// Module ui/search-xref\n// Search xref database\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst XREF_URL = \"https://respec.org/xref/\";\n\nconst localizationStrings = {\n en: {\n title: \"Search definitions\",\n },\n ja: {\n title: \"定義検索\",\n },\n de: {\n title: \"Definitionen durchsuchen\",\n },\n zh: {\n title: \"搜索定义\",\n },\n};\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\nconst l10n = localizationStrings[lang];\n\nconst button = ui.addCommand(l10n.title, show, \"Ctrl+Shift+Alt+x\", \"📚\");\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n const xrefSearchUI = html`\n <iframe id=\"xref-ui\" src=\"${XREF_URL}\" onload=${onLoad}></iframe>\n <a href=\"${XREF_URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.title, xrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","// @ts-check\n// Module w3c/seo\n// Manages SEO information for documents\n// e.g. set the canonical URL for the document if configured\nimport { resolveRef } from \"../core/biblio.js\";\nimport { showWarning } from \"../core/utils.js\";\nexport const name = \"w3c/seo\";\nexport async function run(conf) {\n // Don't include a canonical URL for documents\n // that haven't been published.\n if (!conf.canonicalURI) {\n switch (conf.specStatus) {\n case \"CG-DRAFT\":\n case \"BG-DRAFT\":\n case \"unofficial\":\n return;\n }\n }\n const trLatestUri = conf.shortName\n ? `https://www.w3.org/TR/${conf.shortName}/`\n : null;\n switch (conf.canonicalURI) {\n case \"edDraft\":\n if (conf.edDraftURI) {\n conf.canonicalURI = new URL(\n conf.edDraftURI,\n document.location.href\n ).href;\n } else {\n const msg = `Canonical URI set to edDraft, but no edDraftURI is set in configuration`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n break;\n case \"TR\":\n if (trLatestUri) {\n conf.canonicalURI = trLatestUri;\n } else {\n const msg = `Canonical URI set to TR, but no shortName is set in configuration`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n break;\n default:\n if (conf.canonicalURI) {\n try {\n conf.canonicalURI = new URL(\n conf.canonicalURI,\n document.location.href\n ).href;\n } catch (err) {\n const msg = `CanonicalURI is an invalid URL: ${err.message}`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n } else if (trLatestUri) {\n conf.canonicalURI = trLatestUri;\n }\n }\n if (conf.canonicalURI) {\n const linkElem = document.createElement(\"link\");\n linkElem.setAttribute(\"rel\", \"canonical\");\n linkElem.setAttribute(\"href\", conf.canonicalURI);\n document.head.appendChild(linkElem);\n }\n if (conf.doJsonLd) {\n await addJSONLDInfo(conf, document);\n }\n}\n\nasync function addJSONLDInfo(conf, doc) {\n // Content for JSON\n const type = [\"TechArticle\"];\n if (conf.rdfStatus) type.push(conf.rdfStatus);\n\n const jsonld = {\n \"@context\": [\n \"http://schema.org\",\n {\n \"@vocab\": \"http://schema.org/\",\n \"@language\": doc.documentElement.lang || \"en\",\n w3p: \"http://www.w3.org/2001/02pd/rec54#\",\n foaf: \"http://xmlns.com/foaf/0.1/\",\n datePublished: { \"@type\": \"http://www.w3.org/2001/XMLSchema#date\" },\n inLanguage: { \"@language\": null },\n isBasedOn: { \"@type\": \"@id\" },\n license: { \"@type\": \"@id\" },\n },\n ],\n id: conf.canonicalURI || conf.thisVersion,\n type,\n name: document.title,\n inLanguage: doc.documentElement.lang || \"en\",\n license: conf.licenseInfo.url,\n datePublished: conf.dashDate,\n /** @type {{ name: string, url?: string } | { name: string, url?: string }[]} */\n copyrightHolder: {\n name: \"World Wide Web Consortium\",\n url: \"https://www.w3.org/\",\n },\n discussionUrl: conf.issueBase,\n alternativeHeadline: conf.subtitle,\n isBasedOn: conf.prevVersion,\n };\n\n // add any additional copyright holders\n if (conf.additionalCopyrightHolders) {\n const addl = Array.isArray(conf.additionalCopyrightHolders)\n ? conf.additionalCopyrightHolders\n : [conf.additionalCopyrightHolders];\n jsonld.copyrightHolder = [\n jsonld.copyrightHolder,\n ...addl.map(h => ({ name: h })),\n ];\n }\n\n // description from meta description\n const description = doc.head.querySelector(\"meta[name=description]\");\n if (description) {\n jsonld.description = description.content;\n }\n\n // Editors\n if (conf.editors) {\n jsonld.editor = conf.editors.map(addPerson);\n }\n if (conf.authors) {\n jsonld.contributor = conf.authors.map(addPerson);\n }\n\n // normative and informative references\n const citationIds = [\n ...conf.normativeReferences,\n ...conf.informativeReferences,\n ];\n const citationContents = await Promise.all(\n citationIds.map(ref => resolveRef(ref))\n );\n jsonld.citation = citationContents\n .filter(ref => typeof ref === \"object\")\n .map(addRef);\n\n const script = doc.createElement(\"script\");\n script.type = \"application/ld+json\";\n script.textContent = JSON.stringify(jsonld, null, 2);\n doc.head.appendChild(script);\n}\n\n/**\n * Turn editors and authors into a list of JSON-LD relationships\n */\nfunction addPerson({ name, url, mailto, company, companyURL }) {\n const ed = {\n type: \"Person\",\n name,\n url,\n \"foaf:mbox\": mailto,\n };\n if (company || companyURL) {\n ed.worksFor = {\n name: company,\n url: companyURL,\n };\n }\n return ed;\n}\n\n/**\n * Create a reference URL from the ref\n */\nfunction addRef(ref) {\n const { href: id, title: name, href: url } = ref;\n const jsonld = {\n id,\n type: \"TechArticle\",\n name,\n url,\n };\n if (ref.authors) {\n jsonld.creator = ref.authors.map(a => ({ name: a }));\n }\n if (ref.rawDate) {\n jsonld.publishedDate = ref.rawDate;\n }\n if (ref.isbn) {\n jsonld.identifier = ref.isbn;\n }\n if (ref.publisher) {\n jsonld.publisher = { name: ref.publisher };\n }\n return jsonld;\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport { fetchAsset } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nconst ghCssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/highlight.css\")).default;\n } catch {\n return fetchAsset(\"highlight.css\");\n }\n}\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n const ghCss = await ghCssPromise;\n document.head.appendChild(\n html`<style>\n ${ghCss}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\n/**\n * Module core/data-tests\n *\n * Allows specs to link to test files in a test suite, by adding `details` of where\n * particular tests for a testable assertion can be found.\n *\n * `data-tests` takes a space separated list of URLs, e.g. data-test=\"foo.html bar.html\".\n *\n * Docs: https://github.com/w3c/respec/wiki/data-tests\n */\nimport { getIntlData, showError, showWarning } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst localizationStrings = {\n en: {\n missing_test_suite_uri:\n \"Found tests in your spec, but missing '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.\",\n tests: \"tests\",\n test: \"test\",\n },\n ja: {\n missing_test_suite_uri:\n \"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.\",\n tests: \"テスト\",\n test: \"テスト\",\n },\n de: {\n missing_test_suite_uri:\n \"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.\",\n tests: \"Tests\",\n test: \"Test\",\n },\n zh: {\n missing_test_suite_uri:\n \"本规范中包含测试,但在 ReSpec 配置中缺少 '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。\",\n tests: \"测试\",\n test: \"测试\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport const name = \"core/data-tests\";\n\nfunction toListItem(href) {\n const emojiList = [];\n const [testFile] = new URL(href).pathname.split(\"/\").reverse();\n const testParts = testFile.split(\".\");\n let [testFileName] = testParts;\n\n const isSecureTest = testParts.find(part => part === \"https\");\n if (isSecureTest) {\n const requiresConnectionEmoji = document.createElement(\"span\");\n requiresConnectionEmoji.textContent = \"🔒\";\n requiresConnectionEmoji.setAttribute(\n \"aria-label\",\n \"requires a secure connection\"\n );\n requiresConnectionEmoji.setAttribute(\"title\", \"Test requires HTTPS\");\n testFileName = testFileName.replace(\".https\", \"\");\n emojiList.push(requiresConnectionEmoji);\n }\n\n const isManualTest = testFileName\n .split(\".\")\n .join(\"-\")\n .split(\"-\")\n .find(part => part === \"manual\");\n if (isManualTest) {\n const manualPerformEmoji = document.createElement(\"span\");\n manualPerformEmoji.textContent = \"💪\";\n manualPerformEmoji.setAttribute(\n \"aria-label\",\n \"the test must be run manually\"\n );\n manualPerformEmoji.setAttribute(\"title\", \"Manual test\");\n testFileName = testFileName.replace(\"-manual\", \"\");\n emojiList.push(manualPerformEmoji);\n }\n\n const testList = html`\n <li>\n <a href=\"${href}\">${testFileName}</a>\n ${emojiList}\n </li>\n `;\n return testList;\n}\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n if (!testables.length) {\n return;\n }\n if (!conf.testSuiteURI) {\n showError(l10n.missing_test_suite_uri, name);\n return;\n }\n\n for (const elem of testables) {\n const tests = elem.dataset.tests.split(/,/gm).map(url => url.trim());\n const testURLs = toTestURLs(tests, conf.testSuiteURI);\n handleDuplicates(testURLs, elem);\n const details = toHTML(testURLs);\n elem.append(details);\n }\n}\n\n/**\n * @param {string[]} tests\n * @param {string} testSuiteURI\n */\nfunction toTestURLs(tests, testSuiteURI) {\n return tests\n .map(test => {\n try {\n return new URL(test, testSuiteURI).href;\n } catch {\n const msg = `Bad URI: ${test}`;\n showWarning(msg, name);\n }\n })\n .filter(href => href);\n}\n\n/**\n * @param {string[]} testURLs\n * @param {HTMLElement} elem\n */\nfunction handleDuplicates(testURLs, elem) {\n const duplicates = testURLs.filter(\n (link, i, self) => self.indexOf(link) !== i\n );\n if (duplicates.length) {\n const msg = `Duplicate tests found`;\n const hint = `To fix, remove duplicates from \"data-tests\": ${duplicates\n .map(url => new URL(url).pathname)\n .join(\", \")}`;\n showWarning(msg, name, { hint, elements: [elem] });\n }\n}\n\n/**\n * @param {string[]} testURLs\n */\nfunction toHTML(testURLs) {\n const uniqueList = [...new Set(testURLs)];\n const details = html`\n <details class=\"respec-tests-details removeOnSave\">\n <summary>tests: ${uniqueList.length}</summary>\n <ul>\n ${uniqueList.map(toListItem)}\n </ul>\n </details>\n `;\n return details;\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport { fetchAsset } from \"./text-loader.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nconst hlVarsPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/var.css\")).default;\n } catch {\n return fetchAsset(\"var.css\");\n }\n}\n\nexport async function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = await hlVarsPromise;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport { fetchAsset, fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n const css = await loadStyle();\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/dfn-panel.css\")).default;\n } catch {\n return fetchAsset(\"dfn-panel.css\");\n }\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","// @ts-check\n/**\n * Module core/data-type\n * Propagates data type of a <var> to subsequent instances within a section.\n * Also adds the CSS for the data type tooltip.\n * Set `conf.highlightVars = true` to enable.\n */\nimport { fetchAsset } from \"./text-loader.js\";\n\nexport const name = \"core/data-type\";\n\nconst tooltipStylePromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/datatype.css\")).default;\n } catch {\n return fetchAsset(\"datatype.css\");\n }\n}\n\nexport async function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = await tooltipStylePromise;\n document.head.appendChild(style);\n\n let section = null;\n const varMap = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const variables = document.querySelectorAll(\"section var\");\n for (const varElem of variables) {\n const currentSection = varElem.closest(\"section\");\n if (section !== currentSection) {\n section = currentSection;\n varMap.clear();\n }\n if (varElem.dataset.type) {\n varMap.set(varElem.textContent.trim(), varElem.dataset.type);\n continue;\n }\n const type = varMap.get(varElem.textContent.trim());\n if (type) varElem.dataset.type = type;\n }\n}\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\n\nimport { fetchAsset } from \"./text-loader.js\";\n\nexport const name = \"core/algorithms\";\n\nconst cssPromise = loadStyle();\n\nasync function loadStyle() {\n try {\n return (await import(\"text!../../assets/algorithms.css\")).default;\n } catch {\n return fetchAsset(\"algorithms.css\");\n }\n}\n\nexport async function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = await cssPromise;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n","// @ts-check\n/**\n * Fetches commits between two commitish (tag or commit) - `from` and `to=HEAD`\n * and shows them as a list of \"changes during\" those commitish. If a filter\n * function is provided by the user, it is used to filter the commits that are\n * to be shown. Otherwise, all commits are shown.\n *\n * @typedef {{message: string, hash: string}} Commit\n */\nimport { github } from \"../github.js\";\nimport { html } from \"../import-maps.js\";\nimport { showError } from \"../utils.js\";\n\nexport const name = \"rs-changelog\";\n\nexport const element = class ChangelogElement extends HTMLElement {\n constructor() {\n super();\n this.props = {\n from: this.getAttribute(\"from\"),\n to: this.getAttribute(\"to\") || \"HEAD\",\n /** @type {(commit: Commit) => boolean} */\n filter:\n typeof window[this.getAttribute(\"filter\")] === \"function\"\n ? window[this.getAttribute(\"filter\")]\n : () => true,\n };\n }\n\n connectedCallback() {\n const { from, to, filter } = this.props;\n html.bind(this)`\n <ul>\n ${{\n any: fetchCommits(from, to, filter)\n .then(commits => toHTML(commits))\n .catch(error => showError(error.message, name, { elements: [this] }))\n .finally(() => {\n this.dispatchEvent(new CustomEvent(\"done\"));\n }),\n placeholder: \"Loading list of commits...\",\n }}\n </ul>\n `;\n }\n};\n\nasync function fetchCommits(from, to, filter) {\n /** @type {Commit[]} */\n let commits;\n try {\n const gh = await github;\n if (!gh) {\n throw new Error(\"`respecConfig.github` is not set\");\n }\n const url = new URL(\"commits\", `${gh.apiBase}/${gh.fullName}/`);\n url.searchParams.set(\"from\", from);\n url.searchParams.set(\"to\", to);\n\n const res = await fetch(url.href);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n commits = await res.json();\n if (!commits.length) {\n throw new Error(`No commits between ${from}..${to}.`);\n }\n commits = commits.filter(filter);\n } catch (error) {\n const msg = `Error loading commits from GitHub. ${error.message}`;\n console.error(error);\n throw new Error(msg);\n }\n return commits;\n}\n\nasync function toHTML(commits) {\n const { repoURL } = await github;\n return commits.map(commit => {\n const [message, prNumber = null] = commit.message.split(/\\(#(\\d+)\\)/, 2);\n const commitURL = `${repoURL}commit/${commit.hash}`;\n const prURL = prNumber ? `${repoURL}pull/${prNumber}` : null;\n const pr = prNumber && html` (<a href=\"${prURL}\">#${prNumber}</a>)`;\n return html`<li><a href=\"${commitURL}\">${message.trim()}</a>${pr}</li>`;\n });\n}\n","// @ts-check\n/**\n * Registers custom elements and waits for them to finish their processing.\n *\n * Every custom element file exports:\n * - `name`: registered name of the custom element, prefixed with `rs-`.\n * - `element`: class defintion of the custom element.\n *\n * Every custom element must dispatch a CustomEvent 'done' that tells the\n * element has finished its processing, with or without errors.\n *\n * @typedef {{ name: string, element: CustomElementConstructor }} CustomElementDfn\n */\n\nimport * as changelog from \"./rs-changelog.js\";\n/** @type {CustomElementDfn[]} */\nconst CUSTOM_ELEMENTS = [changelog];\n\nexport const name = \"core/custom-elements/index\";\n\nexport async function run() {\n // prepare and register elements\n CUSTOM_ELEMENTS.forEach(el => {\n customElements.define(el.name, el.element);\n });\n\n // wait for each element to be ready\n const selectors = CUSTOM_ELEMENTS.map(el => el.name).join(\", \");\n const elems = document.querySelectorAll(selectors);\n const readyPromises = [...elems].map(\n el => new Promise(res => el.addEventListener(\"done\", res, { once: true }))\n );\n await Promise.all(readyPromises);\n}\n","// @ts-check\n/**\n * Module: core/a11y\n * Lints for accessibility issues using axe-core package.\n */\n\nimport { showError, showWarning } from \"./utils.js\";\n\nexport const name = \"core/a11y\";\n\nconst DISABLED_RULES = [\n \"color-contrast\", // too slow 🐢\n \"landmark-one-main\", // need to add a <main>, else it marks entire page as errored\n \"landmark-unique\",\n \"region\",\n];\n\nexport async function run(conf) {\n if (!conf.a11y) {\n return;\n }\n\n const options = conf.a11y === true ? {} : conf.a11y;\n const violations = await getViolations(options);\n for (const violation of violations) {\n /**\n * We're grouping by failureSummary as it contains hints to fix the issue.\n * For example, with color-constrast rule, it tells about the present color\n * contrast and how to fix it. If we don't group, errors will be repetitive.\n * @type {Map<string, HTMLElement[]>}\n */\n const groupedBySummary = new Map();\n for (const node of violation.nodes) {\n const { failureSummary, element } = node;\n const elements =\n groupedBySummary.get(failureSummary) ||\n groupedBySummary.set(failureSummary, []).get(failureSummary);\n elements.push(element);\n }\n\n const { id, help, description, helpUrl } = violation;\n const title = `a11y/${id}: ${help}`;\n for (const [failureSummary, elements] of groupedBySummary) {\n const hints = formatHintsAsMarkdown(failureSummary);\n const details = `\\n\\n${description}.\\n\\n${hints}. ([Learn more](${helpUrl}))`;\n showWarning(title, name, { details, elements });\n }\n }\n}\n\n/**\n * @param {object} opts Options as described at https://github.com/dequelabs/axe-core/blob/develop/doc/API.md#options-parameter\n */\nasync function getViolations(opts) {\n const { rules, ...otherOptions } = opts;\n const options = {\n rules: {\n ...Object.fromEntries(DISABLED_RULES.map(id => [id, { enabled: false }])),\n ...rules,\n },\n ...otherOptions,\n elementRef: true,\n resultTypes: [\"violations\"],\n reporter: \"v1\", // v1 includes a `failureSummary`\n };\n\n let axe;\n try {\n axe = await importAxe();\n } catch (error) {\n const msg = \"Failed to load a11y linter.\";\n showError(msg, name);\n console.error(error);\n return [];\n }\n\n try {\n const result = await axe.run(document, options);\n return result.violations;\n } catch (error) {\n const msg = \"Error while looking for a11y issues.\";\n showError(msg, name);\n console.error(error);\n return [];\n }\n}\n\n/** @returns {Promise<typeof window.axe>} */\nfunction importAxe() {\n const script = document.createElement(\"script\");\n script.classList.add(\"remove\");\n script.src = \"https://unpkg.com/axe-core@3/axe.min.js\";\n document.head.appendChild(script);\n return new Promise((resolve, reject) => {\n script.onload = () => resolve(window.axe);\n script.onerror = reject;\n });\n}\n\n/** @param {string} text */\nfunction formatHintsAsMarkdown(text) {\n const results = [];\n for (const group of text.split(\"\\n\\n\")) {\n const [msg, ...opts] = group.split(/^\\s{2}/m);\n const options = opts.map(opt => `- ${opt.trimEnd()}`).join(\"\\n\");\n results.push(`${msg}${options}`);\n }\n return results.join(\"\\n\\n\");\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","source","position","current","kind","level","autofix","ruleName","sliceTokens","count","slice","Math","max","tokensToText","inputs","precedes","text","t","trivia","join","nextToken","type","length","line","precedingLastLine","splitted","split","lastLine","subsequentTokens","subsequentText","sourceContext","repeat","contextType","context","partial","node","hierarchy","parent","unshift","n","base","appendIfExist","contextAsText","bareMessage","sourceName","input","tokens","syntaxError","validationError","token","options","Base","Object","defineProperties","writable","json","inheritance","proto","descMap","getOwnPropertyDescriptors","key","entries","enumerable","getPrototypeOf","idlTypeIncludesDictionary","idlType","defs","useNullableInner","union","def","unique","typedefIncludesDictionary","cache","reference","dictionary","nullable","subtype","dictionaryIncludesRequiredField","dict","members","field","required","superdict","ArrayBase","Array","super","Token","tokeniser","consume","unescape","tokenName","list","parser","listName","extAttrValueSyntax","renamedLegacies","extAttrListItems","syntax","toks","ExtendedAttributeParameters","assign","ret","autoParenter","secondaryName","rhsIsList","argument_list","close","hasRhs","rhsType","SimpleExtendedAttribute","params","parse","defineProperty","rhs","arguments","extAttr","arg","validate","ExtendedAttributes","push","probe","type_suffix","obj","single_type","typeName","Type","return_type","type_with_extended_attributes","keyType","stringTypes","keyIdlType","separator","valueType","generic_type","primitive_type","typeNameKeywords","generic","typ","or","union_type","extAttrs","Boolean","prefix","postfix","filter","typedef","targetToken","Default","const_value","expression","const_data","negative","Argument","start_position","optional","variadic","argumentNameKeywords","default","unconsume","autofixOptionalDictionaryDefaultValue","indexOf","a","isLastRequiredArgument","firstToken","getFirstToken","Tokeniser","Operation","special","regular","termination","argument","Attribute","noInherit","readonly","identifier","startsWith","allowDangler","first","items","item","num_type","integer_type","decimal_type","voidToken","stringifier","getLastIndentation","str","lines","match","autofixAddExposedWindow","exposed","existing","test","data","values","x","y","p","isArray","tokenRe","decimal","integer","string","whitespace","comment","other","nonRegexTerminals","concat","punctuations","reserved","idl","lastCharIndex","nextChar","charAt","attemptTokenMatch","noFlushTrivia","currentTrivia","pop","lastIndex","WebIDLParseError","punctuation","re","exec","tokenise","candidates","EnumValue","Enum","Includes","mixin","Typedef","CallbackFunction","Container","instance","inheritable","allowedMembers","colon","ea","mem","member","Constant","IterableLike","secondTypeRequired","secondTypeAllowed","argumentAllowed","argsOpen","argsClose","Constructor","static_member","Interface","every","oldConstructors","constructor","autofixConstructor","factoryFunctions","named","constructors","i","opNames","Set","getOperations","op","partials","mixins","mixinMap","ext","additions","forEachExtension","addition","add","existings","checkInterfaceMemberDuplication","interfaceDef","constructorExtAttr","indentation","memberIndent","parentTrivia","indentCh","getMemberIndentation","constructorOp","existingIndex","array","predicate","reverse","findIndex","findLastIndex","m","splice","removed","trim","Mixin","Field","Dictionary","Namespace","CallbackInterface","parseByTokens","interface_","opts","definition","res","eof","concrete","definitions","noop","templates","nameless","extendedAttribute","extendedAttributeReference","getMixinMap","include","validateIterable","ast","duplicates","groupDefinitions","dup","checkDuplicatedNames","ts","raw","unescaped","wrapper","reference_token","name_token","type_body","it","ref","extended_attributes","default_","extended_attribute_listitem","make_ext_at","id","endsWith","eats","container","inh","iterate","iterable_like","table","interface","interface mixin","namespace","operation","body","attribute","const","enum","enum-value","v","iterable","maplike","setlike","callback interface","things","thing","dispatch","flat","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","_","toLowerCase","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","href","rtrim","relativeBase","invert","l","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","merge","hasOwnProperty","splitCells","tableRow","cells","offset","escaped","curr","findClosingBracket","b","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","title","Tokenizer_1","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","indentCodeCompensation","heading","trimmed","depth","nptable","header","align","hr","blockquote","bull","isordered","ordered","start","loose","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","tag","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","prevRenderer","prevTokenizer","lexInline","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","r","delete","configurable","o","s","WeakSet","u","insertBefore","selected","selectedIndex","f","querySelectorAll","w","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","g","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","_wire$","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","component","setState","idb","_idb","webidl2","_webidl2","_marked","_pluralize","dashes","getIntlData","x_and_y","x_y_and_z","ISODate","Intl","DateTimeFormat","timeZone","year","month","day","nonNormativeSelector","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","mapper","docLang","ListFormat","format","lastComma","and","xmlEscape","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","concatDate","date","sep","humanDate","Date","langs","toLocaleString","runTransforms","flist","funcArgs","methods","meth","showWarning","fetchAndCache","maxAge","Request","cachedResponse","caches","headers","response","fetch","ok","clonedResponse","clone","customHeaders","Headers","expiryDate","now","toISOString","cacheResponse","Response","blob","put","htmlJoinComma","joined","htmlJoinAnd","addHashId","addId","hash","char","imul","hashString","pfx","txt","noLC","normalize","getElementById","nextId","getDfnTitles","titleSet","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","element","closestInformative","closest","isInformative","querySelector","illegal","wrapInner","outer","parents","selector","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","getCanonicalKey","existingKey","find","makeSafeCopy","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","walkTree","nextNode","CaseInsensitiveMap","RespecError","plugin","isWarning","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","docLink","subscriptions","topic","from","cb","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","respecVersion","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","head","includeConfig","URLSearchParams","search","overrideEntries","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","fetchBase","fetchAsset","fileName","reindent","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","prepend","Builder","tagName","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","loadStyle","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hasLink","isLegacyFrag","LEGACY_OPTIONS","getGroupDetails","group","shortname","wgId","wg","URI","wgURI","patentURI","wgPatentURI","patentPolicy","wgPatentPolicy","groupType","status","usedLegacyOptions","groupDetails","groups","getMultipleGroupDetails","showLink","class","showLinkData","showLogo","logo","alt","img","width","height","until","es","ko","ja","zh","defaultLang","orcidIcon","showPeople","persons","personName","company","editorid","w3cid","dd","span","contents","mailto","orcid","companyURL","note","extras","extra","getExtra","retiredDate","isValidDate","timeElem","dateTime","textContainer","ccLicense","w3cLicense","legalDisclaimer","w3cTrademark","author","authors","editor","editors","former_editor","former_editors","latest_editors_draft","latest_published_version","edited_in_place","this_version","test_suite","implementation_report","prev_editor_draft","prev_version","prev_recommendation","latest_recommendation","nl","logos","specSubTitleElem","subtitle","getSpecSubTitleElem","prependW3C","isCR","longStatus","textStatus","dashDate","publishHumanDate","modificationDate","modificationHumanDate","inPlaceModificationDate","isNoTrack","thisVersion","latestVersion","edDraftURI","testSuiteURI","implementationReportURI","isED","prevED","showPreviousVersion","prevVersion","prevRecURI","isRec","multipleEditors","formerEditors","multipleFormerEditors","multipleAuthors","otherLinks","errata","shortName","alternateFormats","multipleAlternates","alternatesHTML","existingCopyright","overrideCopyright","isUnofficial","licenseInfo","linkLicense","short","copyrightStart","publishYear","additionalCopyrightHolders","isCCBY","noteIfDualLicense","isW3CSoftAndDocLicense","linkDocumentUse","renderOfficialCopyright","renderCopyright","cssClass","specTitleElem","specTitleElemClone","isCGFinal","sotd","isPreview","renderPreview","additionalContent","renderIsUnofficial","isTagFinding","isMO","renderIsNoTrack","status_at_publication","isSubmission","isMemberSubmission","teamComment","publishDate","getUTCFullYear","submissionCommentNumber","patentPolicyURL","noteForMemberSubmission","isTeamSubmission","renderPublicList","noteForTeamSubmission","noteForSubmission","sotdAfterWGinfo","overrideStatus","proposedChanges","revisionTypes","wgHTML","anOrA","notYetRec","linkToWorkingGroup","linkToCommunity","updateableRec","humanRevisedRecEnd","reviewTarget","renderIsRec","statusExplanation","updatePolicy","reviewPolicy","specStatus","pubMode","humanCREnd","isPR","humanPREnd","isPER","humanPEREnd","renderNotRec","isNote","isIGNote","multipleWGs","recNotExpected","wgPatentHTML","charterDisclosureURI","producers","renderDeliverer","addPatentNote","additionalSections","prUrl","prNumber","mailToWGPublicListWithSubject","mailToWGPublicListSubscription","wgPublicList","subjectPrefix","github","issueBase","W3CDate","status2maturity","LS","LD","FPWD","LC","FPLC","FPWD-NOTE","WD-NOTE","LC-NOTE","IG-NOTE","WG-NOTE","status2rdf","NOTE","WD","CR","CRD","PR","REC","PER","RSCND","status2text","CG-NOTE","Member-SUBM","Team-SUBM","MO","ED","unofficial","finding","draft-finding","CG-DRAFT","CG-FINAL","BG-DRAFT","BG-FINAL","status2long","maybeRecTrack","recTrackStatus","cgStatus","bgStatus","cgbgStatus","noTrackStatus","precededByAn","licenses","baseLogo","freeze","validateDateAndRecover","fallbackDate","Number","isFinite","formattedDate","collectSotdContent","sotdClone","hasChildNodes","license","licensesKeys","isCGBG","isBasic","isRegular","host","pathname","lastModified","isRecTrack","noRecTrack","memSubmissionLogo","teamSubmissionLogo","linkGroup","hasGitHubIssuesLink","maturity","publishSpace","skipLatestVersion","previousPublishDate","previousMaturity","pmat","prevRecShortname","peopCheck","orcidUrl","orcidId","lastDigit","lastDigitInt","reduce","acc","lastDigitShould","normalizeOrcid","uri","rdfStatus","showThisVersion","isCRDraft","publishISODate","shortISODate","urlParts","pos","cgbgHeadersTmpl","headersTmpl","wgPotentialArray","idx","pats","crEnd","prEnd","perEnd","unknownRevisionType","revisedRecEnd","contains","mailToWGPublicList","encodeURIComponent","cgbgSotdTmpl","sotdTmpl","populateSoTD","generatedSubtitle","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","hasNoHeading","offendingMembers","getOwnPropertyNames","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","highlightVars","addSectionLinks","filesInWPT","githubAPIBase","wptDirectory","testSuiteURL","searchParams","files","entry","getFilesInWPT","githubAPI","offendingTests","testables","tests","missingTests","privsecSectionRule","wptTestsExist","w3cLogo","w3cDefaults","wpt-tests-exist","doJsonLd","xref","toMDCode","validateStatusForGroup","insertStyle","noReSpecCSS","resourceHints","createResourceHints","createBaseStyle","delimiter","toKeyValuePairs","initial-scale","shrink-to-fit","createMetaViewport","styleFile","styleVersion","isNaN","selectStyleVersion","useExperimentalStyles","noToc","attachFixupScript","finalStyleURL","linkURL","styles","frag","nextLink","linkCSS","exportDoc","w3cStyle","resolveGithubPromise","rejectGithubPromise","file_a_bug","participate","commit_history","ghURL","tempURL","repoURL","org","repo","branch","newProps","githubToken","githubUser","atRiskBase","pullBase","otherLink","hostname","normalizedGHObj","apiBase","fullName","normalizedConfig","processResponse","rawData","el","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","includeId","default_title","h1Elem","isConnected","documentTitle","setDocumentTitle","isInteger","abstract","abs","abstractHeading","processDfnElement","abbr","fullForm","insertAdjacentHTML","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","allArgs","SyntaxError","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","openIdb","biblioDB","isAlias","resolveAlias","TypeError","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","promisesToAdd","flatMap","isInDB","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","addAll","resolveRef","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","defaultsReference","publisher","etAl","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","wireReference","rawRef","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","conformance","normativity","keywordInterpretation","terms","processConformance","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","plurals","size","userDefinedPlurals","uniquePlurals","cssPromise","makeTitle","num","report","number","examples","css","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","handleIssues","ins","ghIssues","getIssueNumber","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","makeIssueSectionSummary","issuesAndNotes","issueNumbers","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","list_of_figures","fig","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","decorateTableOfFigures","topLevelEntities","findDfn","defn","findNormalDfn","findOperationDfn","resolvedName","dfns","getDfns","alternativeDfns","decorateDfn","dfnElem","idlAst","lCaseParent","last","dfnFor","getDataType","local","exportable","addAlternativeNames","asQualifiedName","operationName","argsAst","operationNames","isOptional","requiredArgs","requiredOperation","optionalOps","generateMethodNamesWithArgs","getAlternativeNames","originalName","foundDfns","dfnForArray","closestDfnFor","idlStruct","copyButton","createButton","addCopyIDLButton","idlHeader","idlText","clipboard","writeText","idlPartials","Text","keyword","wrapped","idlLink","defineIdlName","getIdlDefinitionClassName","parentName","idlId","getNameAndId","getDfnType","unlinkedAnchor","nameResolverMap","getDefnName","getIdlId","resolvePartial","overload","qualifiedName","fullyQualifiedName","resolveOverload","resolveNameAndId","renderWebIDL","idlElement","highlights","write","closestCite","cites","addIDLHeader","idls","astArray","validations","validation","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","cleanup","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","STORE_NAME","VERSION_CHECK_WAIT","getIdbCache","resolveXrefCache","queries","cachedData","lastChecked","localStorage","getItem","setItem","API_URL","lastUpdated","shouldBustCache","clearXrefData","requiredKeySet","query","cursor","profiles","web-platform","getRequestEntry","getTermFromElement","specs","dataciteElem","closestSection","inlineRefs","higherPriority","uniqueSpecs","dedupeSpecContext","getSpecContext","types","getTypeContext","dataXrefForElem","getForContext","addDataCite","normative","closestNormative","closestInform","addToReferences","objectHash","buffer","TextEncoder","crypto","subtle","digest","bufferToHexString","Uint8Array","padStart","invalidProfileError","profile","normalizeConfig","bodyCite","externalDFNs","findExplicitExternalLinks","queryKeys","apiUrl","uniqueIds","uniqueQueryKeys","resultsFromCache","termsToLook","fetchedResults","Content-Type","fetchFromNetwork","cacheXrefData","getData","ambiguous","notFound","collector","getPrefilledFormURL","howToCiteURL","originalTerm","formUrl","specsString","showErrors","addDataCiteToTerms","idlIndexSec","idlIndex","headingExternal","headlingLocal","dfnOf","CODE_TYPES","getLocalTermType","getLocalTermParentContext","getLocalTermSuffix","appendSectionNumbers","secNum","getSectionNumber","collectExternalTerms","uniqueReferences","uniqueID","renderExternalTermEntry","typeSuffix","TYPE_TERMS","TYPED_TYPES","linkForText","getTermText","styleEl","localTermIndex","dataSortedByTerm","collectLocalTerms","renderItem","suffix","getLocalTermText","renderLocalTerm","createLocalTermIndex","externalTermIndex","dataSortedBySpec","specA","specB","createExternalTermIndex","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","BROWSERS","fetchStats","feature","versions","browsers","statusText","caniuse","DEFAULTS","caniuseConf","invalidBrowsers","browser","getNormalizedConf","caniuseCss","fetchPromise","featureURL","headDlElem","contentPromise","stats","definitionPair","outputDoc","BASE_JSON_PATH","MDN_BROWSERS","chrome","chrome_android","edge","edge_mobile","firefox","firefox_android","ie","opera","opera_android","safari","safari_ios","samsunginternet_android","webview_android","inAllEngines","inSomeEngines","insertMDNBox","targetAncestor","targetSibling","mdnBox","attachMDNDetail","mdnSpec","summary","support","engines","mdnSubPath","engineSupport","getEngineSupportIcons","getEngineSupport","createRow","browserId","yesNoUnknown","displayStatus","createRowFromBrowserData","versionData","version_removed","versionAdded","version_added","buildBrowserSupportTable","mdnKey","mdn","getMdnKey","mdnSpecJson","mdnConf","baseJsonPath","getMdnData","findElements","mdnSpecArray","mimeTypes","rsDocToDataURL","mimeType","validTypes","cloneDoc","insertions","metaViewport","metaCharset","metaGenerator","XMLSerializer","serializeToString","outerHTML","prettify","doctype","save_snapshot","downloadLinks","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","search_specref","form","resultList","toDefinitionPair","searchBox","refSearch","reverseLookup","startTime","jsonData","includeVersions","processResults","fetchedData","combinedResults","resultProcessor","timeTaken","round","mast","resultMap","wires","pair","renderResults","XREF_URL","xrefSearchUI","about_respec","getEntriesByType","duration","perfEntryToTR","firstParagraph","metaElem","addPerson","ed","foaf:mbox","worksFor","addRef","jsonld","creator","rawDate","publishedDate","isbn","canonicalURI","trLatestUri","@context","@vocab","@language","w3p","foaf","datePublished","@type","inLanguage","isBasedOn","copyrightHolder","discussionUrl","alternativeHeadline","addl","contributor","citationIds","citationContents","citation","addJSONLDInfo","workerPromise","workerScript","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","counter","gen","idGenerator","msgIdGenerator","ghCssPromise","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","ghCss","missing_test_suite_uri","toListItem","emojiList","testFile","testParts","testFileName","requiresConnectionEmoji","manualPerformEmoji","toTestURLs","handleDuplicates","testURLs","uniqueList","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","hlVarsPromise","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","activeClass","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","tooltipStylePromise","varMap","variables","currentSection","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors","HTMLElement","props","to","fetchCommits","commits","commit","commitURL","pr","finally","gh","CUSTOM_ELEMENTS","customElements","readyPromises","DISABLED_RULES","formatHintsAsMarkdown","a11y","violations","otherOptions","enabled","elementRef","resultTypes","reporter","axe","onload","onerror","importAxe","getViolations","violation","groupedBySummary","failureSummary","helpUrl","hints"],"mappings":"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AAOV,EAAU2B,cAAcjB,EAAK,GAAIA,EAAK,OAM/C,CACE,CAAC,MAAO,IACR,CAAC,SAAU,MACX,CAAC,gEAAiE,QAClE,CAAC,kCAAmC,OACpC,CAAC,QAAS,KACV,CAAC,uFAAwF,QACzF,CAAC,oBAAqB,QACtB,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC3f6BkC,GAAU,SAASC,GAAgB,IAAIzoB,EAAE,GAAG,IAAIA,EAAErG,QAAQA,QAAQ,MAAM8f,GAAGzZ,EAAErG,QAAQ,SAASqG,EAAEyZ,GAAG,IAAInY,EAAEmY,EAAE1T,eAAe2iB,EAAEjP,EA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"} \ No newline at end of file +{"version":3,"file":"respec-w3c.js","sources":["../profiles/w3c.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/webidl2/lib/error.js","../node_modules/webidl2/lib/productions/base.js","../node_modules/webidl2/lib/validators/helpers.js","../node_modules/webidl2/lib/productions/array-base.js","../node_modules/webidl2/lib/productions/token.js","../node_modules/webidl2/lib/productions/extended-attributes.js","../node_modules/webidl2/lib/productions/type.js","../node_modules/webidl2/lib/productions/default.js","../node_modules/webidl2/lib/productions/argument.js","../node_modules/webidl2/lib/productions/operation.js","../node_modules/webidl2/lib/productions/attribute.js","../node_modules/webidl2/lib/productions/helpers.js","../node_modules/webidl2/lib/tokeniser.js","../node_modules/webidl2/lib/productions/enum.js","../node_modules/webidl2/lib/productions/includes.js","../node_modules/webidl2/lib/productions/typedef.js","../node_modules/webidl2/lib/productions/callback.js","../node_modules/webidl2/lib/productions/container.js","../node_modules/webidl2/lib/productions/constant.js","../node_modules/webidl2/lib/productions/iterable.js","../node_modules/webidl2/lib/productions/constructor.js","../node_modules/webidl2/lib/productions/interface.js","../node_modules/webidl2/lib/validators/interface.js","../node_modules/webidl2/lib/productions/mixin.js","../node_modules/webidl2/lib/productions/field.js","../node_modules/webidl2/lib/productions/dictionary.js","../node_modules/webidl2/lib/productions/namespace.js","../node_modules/webidl2/lib/productions/callback-interface.js","../node_modules/webidl2/lib/webidl2.js","../node_modules/webidl2/lib/writer.js","../node_modules/webidl2/lib/validator.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/styles/ui.css.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/w3c/group.js","../src/core/templates/show-link.js","../src/core/templates/show-logo.js","../src/core/templates/show-people.js","../src/w3c/templates/headers.js","../src/w3c/templates/cgbg-headers.js","../src/w3c/templates/sotd.js","../src/w3c/templates/cgbg-sotd.js","../src/w3c/headers.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/core/linter-rules/wpt-tests-exist.js","../src/w3c/defaults.js","../src/styles/respec.css.js","../src/core/style.js","../src/w3c/style.js","../src/w3c/l10n.js","../src/core/github.js","../src/core/data-include.js","../src/core/title.js","../src/w3c/level.js","../src/w3c/abstract.js","../src/core/data-transform.js","../src/core/data-abbr.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/w3c/conformance.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/styles/examples.css.js","../src/core/examples.js","../src/styles/issues-notes.css.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/dfn-finder.js","../src/core/webidl-clipboard.js","../src/styles/webidl.css.js","../src/core/webidl.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/xref-db.js","../src/core/xref.js","../src/core/webidl-index.js","../src/styles/dfn-index.css.js","../src/core/dfn-index.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/styles/caniuse.css.js","../src/core/caniuse.js","../src/styles/mdn-annotation.css.js","../src/core/mdn-annotation.js","../src/core/exporter.js","../src/ui/save-html.js","../src/ui/search-specref.js","../src/ui/search-xref.js","../src/ui/about-respec.js","../src/core/seo.js","../src/w3c/seo.js","../src/styles/highlight.css.js","../src/core/text-loader.js","../src/core/worker.js","../src/core/highlight.js","../src/core/data-tests.js","../src/core/list-sorter.js","../src/styles/var.css.js","../src/core/highlight-vars.js","../src/styles/dfn-panel.css.js","../src/core/dfn-panel.js","../src/styles/datatype.css.js","../src/core/data-type.js","../src/styles/algorithms.css.js","../src/core/algorithms.js","../src/core/anchor-expander.js","../src/core/custom-elements/rs-changelog.js","../src/core/custom-elements/index.js","../src/core/a11y.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/w3c/group.js\"),\n import(\"../src/w3c/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/w3c/style.js\"),\n import(\"../src/w3c/l10n.js\"),\n import(\"../src/core/github.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/title.js\"),\n import(\"../src/w3c/level.js\"),\n import(\"../src/w3c/headers.js\"),\n import(\"../src/w3c/abstract.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/data-abbr.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/w3c/conformance.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/webidl.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/xref.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/webidl-index.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/dfn-index.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/core/caniuse.js\"),\n import(\"../src/core/mdn-annotation.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/search-specref.js\"),\n import(\"../src/ui/search-xref.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/w3c/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/webidl-clipboard.js\"),\n import(\"../src/core/data-tests.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/data-type.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n import(\"../src/core/custom-elements/index.js\"),\n /* Linters must be the last thing to run */\n import(\"../src/core/linter.js\"),\n import(\"../src/core/a11y.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * @param {string} text\n */\nfunction lastLine(text) {\n const splitted = text.split(\"\\n\");\n return splitted[splitted.length - 1];\n}\n\nfunction appendIfExist(base, target) {\n let result = base;\n if (target) {\n result += ` ${target}`;\n }\n return result;\n}\n\nfunction contextAsText(node) {\n const hierarchy = [node];\n while (node && node.parent) {\n const { parent } = node;\n hierarchy.unshift(parent);\n node = parent;\n }\n return hierarchy.map(n => appendIfExist(n.type, n.name)).join(\" -> \");\n}\n\n/**\n * @typedef {object} WebIDL2ErrorOptions\n * @property {\"error\" | \"warning\"} [level]\n * @property {Function} [autofix]\n *\n * @param {string} message error message\n * @param {\"Syntax\" | \"Validation\"} kind error type\n * @param {WebIDL2ErrorOptions} [options]\n */\nfunction error(source, position, current, message, kind, { level = \"error\", autofix, ruleName } = {}) {\n /**\n * @param {number} count\n */\n function sliceTokens(count) {\n return count > 0 ?\n source.slice(position, position + count) :\n source.slice(Math.max(position + count, 0), position);\n }\n\n function tokensToText(inputs, { precedes } = {}) {\n const text = inputs.map(t => t.trivia + t.value).join(\"\");\n const nextToken = source[position];\n if (nextToken.type === \"eof\") {\n return text;\n }\n if (precedes) {\n return text + nextToken.trivia;\n }\n return text.slice(nextToken.trivia.length);\n }\n\n const maxTokens = 5; // arbitrary but works well enough\n const line =\n source[position].type !== \"eof\" ? source[position].line :\n source.length > 1 ? source[position - 1].line :\n 1;\n\n const precedingLastLine = lastLine(\n tokensToText(sliceTokens(-maxTokens), { precedes: true })\n );\n\n const subsequentTokens = sliceTokens(maxTokens);\n const subsequentText = tokensToText(subsequentTokens);\n const subsequentFirstLine = subsequentText.split(\"\\n\")[0];\n\n const spaced = \" \".repeat(precedingLastLine.length) + \"^\";\n const sourceContext = precedingLastLine + subsequentFirstLine + \"\\n\" + spaced;\n\n const contextType = kind === \"Syntax\" ? \"since\" : \"inside\";\n const inSourceName = source.name ? ` in ${source.name}` : \"\";\n const grammaticalContext = (current && current.name) ? `, ${contextType} \\`${current.partial ? \"partial \" : \"\"}${contextAsText(current)}\\`` : \"\";\n const context = `${kind} error at line ${line}${inSourceName}${grammaticalContext}:\\n${sourceContext}`;\n return {\n message: `${context} ${message}`,\n bareMessage: message,\n context,\n line,\n sourceName: source.name,\n level,\n ruleName,\n autofix,\n input: subsequentText,\n tokens: subsequentTokens\n };\n}\n\n/**\n * @param {string} message error message\n */\nexport function syntaxError(source, position, current, message) {\n return error(source, position, current, message, \"Syntax\");\n}\n\n/**\n * @param {string} message error message\n * @param {WebIDL2ErrorOptions} [options]\n */\nexport function validationError(token, current, ruleName, message, options = {}) {\n options.ruleName = ruleName;\n return error(current.source, token.index, current, message, \"Validation\", options);\n}\n","// @ts-check\n\nexport class Base {\n /**\n * @param {object} initializer\n * @param {Base[\"source\"]} initializer.source\n * @param {Base[\"tokens\"]} initializer.tokens\n */\n constructor({ source, tokens }) {\n Object.defineProperties(this, {\n source: { value: source },\n tokens: { value: tokens, writable: true },\n parent: { value: null, writable: true },\n this: { value: this } // useful when escaping from proxy\n });\n }\n\n toJSON() {\n const json = { type: undefined, name: undefined, inheritance: undefined };\n let proto = this;\n while (proto !== Object.prototype) {\n const descMap = Object.getOwnPropertyDescriptors(proto);\n for (const [key, value] of Object.entries(descMap)) {\n if (value.enumerable || value.get) {\n // @ts-ignore - allow indexing here\n json[key] = this[key];\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n return json;\n }\n}\n","// @ts-check\n\n/**\n * @typedef {import(\"../productions/dictionary.js\").Dictionary} Dictionary\n *\n * @param {*} idlType\n * @param {import(\"../validator.js\").Definitions} defs\n * @param {object} [options]\n * @param {boolean} [options.useNullableInner] use when the input idlType is nullable and you want to use its inner type\n * @return {{ reference: *, dictionary: Dictionary }} the type reference that ultimately includes dictionary.\n */\nexport function idlTypeIncludesDictionary(idlType, defs, { useNullableInner } = {}) {\n if (!idlType.union) {\n const def = defs.unique.get(idlType.idlType);\n if (!def) {\n return;\n }\n if (def.type === \"typedef\") {\n const { typedefIncludesDictionary } = defs.cache;\n if (typedefIncludesDictionary.has(def)) {\n // Note that this also halts when it met indeterminate state\n // to prevent infinite recursion\n return typedefIncludesDictionary.get(def);\n }\n defs.cache.typedefIncludesDictionary.set(def, undefined); // indeterminate state\n const result = idlTypeIncludesDictionary(def.idlType, defs);\n defs.cache.typedefIncludesDictionary.set(def, result);\n if (result) {\n return {\n reference: idlType,\n dictionary: result.dictionary\n };\n }\n }\n if (def.type === \"dictionary\" && (useNullableInner || !idlType.nullable)) {\n return {\n reference: idlType,\n dictionary: def\n };\n }\n }\n for (const subtype of idlType.subtype) {\n const result = idlTypeIncludesDictionary(subtype, defs);\n if (result) {\n if (subtype.union) {\n return result;\n }\n return {\n reference: subtype,\n dictionary: result.dictionary\n };\n }\n }\n}\n\n/**\n * @param {*} dict dictionary type\n * @param {import(\"../validator.js\").Definitions} defs\n * @return {boolean}\n */\nexport function dictionaryIncludesRequiredField(dict, defs) {\n if (defs.cache.dictionaryIncludesRequiredField.has(dict)) {\n return defs.cache.dictionaryIncludesRequiredField.get(dict);\n }\n // Set cached result to indeterminate to short-circuit circular definitions.\n // The final result will be updated to true or false.\n defs.cache.dictionaryIncludesRequiredField.set(dict, undefined);\n let result = dict.members.some(field => field.required);\n if (!result && dict.inheritance) {\n const superdict = defs.unique.get(dict.inheritance);\n if (!superdict) {\n // Assume required members in the supertype if it is unknown.\n result = true;\n } else if (dictionaryIncludesRequiredField(superdict, defs)) {\n result = true;\n }\n }\n defs.cache.dictionaryIncludesRequiredField.set(dict, result);\n return result;\n}\n","// @ts-check\n\nexport class ArrayBase extends Array {\n constructor({ source, tokens }) {\n super();\n Object.defineProperties(this, {\n source: { value: source },\n tokens: { value: tokens },\n parent: { value: null, writable: true }\n });\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { unescape } from \"./helpers.js\";\n\nexport class Token extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} type\n */\n static parser(tokeniser, type) {\n return () => {\n const value = tokeniser.consume(type);\n if (value) {\n return new Token({ source: tokeniser.source, tokens: { value } });\n }\n };\n }\n\n get value() {\n return unescape(this.tokens.value.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { ArrayBase } from \"./array-base.js\";\nimport { Token } from \"./token.js\";\nimport { list, argument_list, autoParenter, unescape } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} tokenName\n */\nfunction tokens(tokeniser, tokenName) {\n return list(tokeniser, {\n parser: Token.parser(tokeniser, tokenName),\n listName: tokenName + \" list\"\n });\n}\n\nconst extAttrValueSyntax = [\"identifier\", \"decimal\", \"integer\", \"string\"];\n\nconst shouldBeLegacyPrefixed = [\n \"NoInterfaceObject\",\n \"LenientSetter\",\n \"LenientThis\",\n \"TreatNonObjectAsNull\",\n \"Unforgeable\",\n];\n\nconst renamedLegacies = new Map([\n ...shouldBeLegacyPrefixed.map(name => [name, `Legacy${name}`]),\n [\"NamedConstructor\", \"LegacyFactoryFunction\"],\n [\"OverrideBuiltins\", \"LegacyOverrideBuiltIns\"],\n [\"TreatNullAs\", \"LegacyNullToEmptyString\"],\n]);\n\n/**\n * This will allow a set of extended attribute values to be parsed.\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction extAttrListItems(tokeniser) {\n for (const syntax of extAttrValueSyntax) {\n const toks = tokens(tokeniser, syntax);\n if (toks.length) {\n return toks;\n }\n }\n tokeniser.error(`Expected identifiers, strings, decimals, or integers but none found`);\n}\n\n\nclass ExtendedAttributeParameters extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const tokens = { assign: tokeniser.consume(\"=\") };\n const ret = autoParenter(new ExtendedAttributeParameters({ source: tokeniser.source, tokens }));\n if (tokens.assign) {\n tokens.secondaryName = tokeniser.consume(...extAttrValueSyntax);\n }\n tokens.open = tokeniser.consume(\"(\");\n if (tokens.open) {\n ret.list = ret.rhsIsList ?\n // [Exposed=(Window,Worker)]\n extAttrListItems(tokeniser) :\n // [LegacyFactoryFunction=Audio(DOMString src)] or [Constructor(DOMString str)]\n argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unexpected token in extended attribute argument list\");\n } else if (ret.hasRhs && !tokens.secondaryName) {\n tokeniser.error(\"No right hand side to extended attribute assignment\");\n }\n return ret.this;\n }\n\n get rhsIsList() {\n return this.tokens.assign && !this.tokens.secondaryName;\n }\n\n get rhsType() {\n if (this.rhsIsList) {\n return this.list[0].tokens.value.type + \"-list\";\n }\n if (this.tokens.secondaryName) {\n return this.tokens.secondaryName.type;\n }\n return null;\n }\n}\n\nexport class SimpleExtendedAttribute extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const name = tokeniser.consume(\"identifier\");\n if (name) {\n return new SimpleExtendedAttribute({\n source: tokeniser.source,\n tokens: { name },\n params: ExtendedAttributeParameters.parse(tokeniser)\n });\n }\n }\n\n constructor({ source, tokens, params }) {\n super({ source, tokens });\n params.parent = this;\n Object.defineProperty(this, \"params\", { value: params });\n }\n\n get type() {\n return \"extended-attribute\";\n }\n get name() {\n return this.tokens.name.value;\n }\n get rhs() {\n const { rhsType: type, tokens, list } = this.params;\n if (!type) {\n return null;\n }\n const value = this.params.rhsIsList ? list : unescape(tokens.secondaryName.value);\n return { type, value };\n }\n get arguments() {\n const { rhsIsList, list } = this.params;\n if (!list || rhsIsList) {\n return [];\n }\n return list;\n }\n\n *validate(defs) {\n const { name } = this;\n if (name === \"LegacyNoInterfaceObject\") {\n const message = `\\`[LegacyNoInterfaceObject]\\` extended attribute is an \\\nundesirable feature that may be removed from Web IDL in the future. Refer to the \\\n[relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more \\\ninformation.`;\n yield validationError(this.tokens.name, this, \"no-nointerfaceobject\", message, { level: \"warning\" });\n } else if (renamedLegacies.has(name)) {\n const message = `\\`[${name}]\\` extended attribute is a legacy feature \\\nthat is now renamed to \\`[${renamedLegacies.get(name)}]\\`. Refer to the \\\n[relevant upstream PR](https://github.com/heycam/webidl/pull/870) for more \\\ninformation.`;\n yield validationError(this.tokens.name, this, \"renamed-legacy\", message, {\n level: \"warning\",\n autofix: renameLegacyExtendedAttribute(this)\n });\n }\n for (const arg of this.arguments) {\n yield* arg.validate(defs);\n }\n }\n}\n\n/**\n * @param {SimpleExtendedAttribute} extAttr\n */\nfunction renameLegacyExtendedAttribute(extAttr) {\n return () => {\n const { name } = extAttr;\n extAttr.tokens.name.value = renamedLegacies.get(name);\n if (name === \"TreatNullAs\") {\n extAttr.params.tokens = {};\n }\n };\n}\n\n// Note: we parse something simpler than the official syntax. It's all that ever\n// seems to be used\nexport class ExtendedAttributes extends ArrayBase {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const tokens = {};\n tokens.open = tokeniser.consume(\"[\");\n if (!tokens.open) return new ExtendedAttributes({});\n const ret = new ExtendedAttributes({ source: tokeniser.source, tokens });\n ret.push(...list(tokeniser, {\n parser: SimpleExtendedAttribute.parse,\n listName: \"extended attribute\"\n }));\n tokens.close = tokeniser.consume(\"]\") || tokeniser.error(\"Unexpected closing token of extended attribute\");\n if (!ret.length) {\n tokeniser.error(\"Found an empty extended attribute\");\n }\n if (tokeniser.probe(\"[\")) {\n tokeniser.error(\"Illegal double extended attribute lists, consider merging them\");\n }\n return ret;\n }\n\n *validate(defs) {\n for (const extAttr of this) {\n yield* extAttr.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { unescape, type_with_extended_attributes, return_type, primitive_type, autoParenter } from \"./helpers.js\";\nimport { stringTypes, typeNameKeywords } from \"../tokeniser.js\";\nimport { validationError } from \"../error.js\";\nimport { idlTypeIncludesDictionary } from \"../validators/helpers.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nfunction generic_type(tokeniser, typeName) {\n const base = tokeniser.consume(\"FrozenArray\", \"ObservableArray\", \"Promise\", \"sequence\", \"record\");\n if (!base) {\n return;\n }\n const ret = autoParenter(new Type({ source: tokeniser.source, tokens: { base } }));\n ret.tokens.open = tokeniser.consume(\"<\") || tokeniser.error(`No opening bracket after ${base.type}`);\n switch (base.type) {\n case \"Promise\": {\n if (tokeniser.probe(\"[\")) tokeniser.error(\"Promise type cannot have extended attribute\");\n const subtype = return_type(tokeniser, typeName) || tokeniser.error(\"Missing Promise subtype\");\n ret.subtype.push(subtype);\n break;\n }\n case \"sequence\":\n case \"FrozenArray\":\n case \"ObservableArray\": {\n const subtype = type_with_extended_attributes(tokeniser, typeName) || tokeniser.error(`Missing ${base.type} subtype`);\n ret.subtype.push(subtype);\n break;\n }\n case \"record\": {\n if (tokeniser.probe(\"[\")) tokeniser.error(\"Record key cannot have extended attribute\");\n const keyType = tokeniser.consume(...stringTypes) || tokeniser.error(`Record key must be one of: ${stringTypes.join(\", \")}`);\n const keyIdlType = new Type({ source: tokeniser.source, tokens: { base: keyType }});\n keyIdlType.tokens.separator = tokeniser.consume(\",\") || tokeniser.error(\"Missing comma after record key type\");\n keyIdlType.type = typeName;\n const valueType = type_with_extended_attributes(tokeniser, typeName) || tokeniser.error(\"Error parsing generic type record\");\n ret.subtype.push(keyIdlType, valueType);\n break;\n }\n }\n if (!ret.idlType) tokeniser.error(`Error parsing generic type ${base.type}`);\n ret.tokens.close = tokeniser.consume(\">\") || tokeniser.error(`Missing closing bracket after ${base.type}`);\n return ret.this;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction type_suffix(tokeniser, obj) {\n const nullable = tokeniser.consume(\"?\");\n if (nullable) {\n obj.tokens.nullable = nullable;\n }\n if (tokeniser.probe(\"?\")) tokeniser.error(\"Can't nullable more than once\");\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nfunction single_type(tokeniser, typeName) {\n let ret = generic_type(tokeniser, typeName) || primitive_type(tokeniser);\n if (!ret) {\n const base = tokeniser.consume(\"identifier\", ...stringTypes, ...typeNameKeywords);\n if (!base) {\n return;\n }\n ret = new Type({ source: tokeniser.source, tokens: { base } });\n if (tokeniser.probe(\"<\")) tokeniser.error(`Unsupported generic type ${base.value}`);\n }\n if (ret.generic === \"Promise\" && tokeniser.probe(\"?\")) {\n tokeniser.error(\"Promise type cannot be nullable\");\n }\n ret.type = typeName || null;\n type_suffix(tokeniser, ret);\n if (ret.nullable && ret.idlType === \"any\") tokeniser.error(\"Type `any` cannot be made nullable\");\n return ret;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} type\n */\nfunction union_type(tokeniser, type) {\n const tokens = {};\n tokens.open = tokeniser.consume(\"(\");\n if (!tokens.open) return;\n const ret = autoParenter(new Type({ source: tokeniser.source, tokens }));\n ret.type = type || null;\n while (true) {\n const typ = type_with_extended_attributes(tokeniser) || tokeniser.error(\"No type after open parenthesis or 'or' in union type\");\n if (typ.idlType === \"any\") tokeniser.error(\"Type `any` cannot be included in a union type\");\n if (typ.generic === \"Promise\") tokeniser.error(\"Type `Promise` cannot be included in a union type\");\n ret.subtype.push(typ);\n const or = tokeniser.consume(\"or\");\n if (or) {\n typ.tokens.separator = or;\n }\n else break;\n }\n if (ret.idlType.length < 2) {\n tokeniser.error(\"At least two types are expected in a union type but found less\");\n }\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated union type\");\n type_suffix(tokeniser, ret);\n return ret.this;\n}\n\nexport class Type extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\n static parse(tokeniser, typeName) {\n return single_type(tokeniser, typeName) || union_type(tokeniser, typeName);\n }\n\n constructor({ source, tokens }) {\n super({ source, tokens });\n Object.defineProperty(this, \"subtype\", { value: [], writable: true });\n this.extAttrs = new ExtendedAttributes({});\n }\n\n get generic() {\n if (this.subtype.length && this.tokens.base) {\n return this.tokens.base.value;\n }\n return \"\";\n }\n get nullable() {\n return Boolean(this.tokens.nullable);\n }\n get union() {\n return Boolean(this.subtype.length) && !this.tokens.base;\n }\n get idlType() {\n if (this.subtype.length) {\n return this.subtype;\n }\n // Adding prefixes/postfixes for \"unrestricted float\", etc.\n const name = [\n this.tokens.prefix,\n this.tokens.base,\n this.tokens.postfix\n ].filter(t => t).map(t => t.value).join(\" \");\n return unescape(name);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n\n if (this.idlType === \"void\") {\n const message = `\\`void\\` is now replaced by \\`undefined\\`. Refer to the \\\n[relevant GitHub issue](https://github.com/heycam/webidl/issues/60) \\\nfor more information.`;\n yield validationError(this.tokens.base, this, \"replace-void\", message, {\n autofix: replaceVoid(this)\n });\n }\n\n /*\n * If a union is nullable, its subunions cannot include a dictionary\n * If not, subunions may include dictionaries if each union is not nullable\n */\n const typedef = !this.union && defs.unique.get(this.idlType);\n const target =\n this.union ? this :\n (typedef && typedef.type === \"typedef\") ? typedef.idlType :\n undefined;\n if (target && this.nullable) {\n // do not allow any dictionary\n const { reference } = idlTypeIncludesDictionary(target, defs) || {};\n if (reference) {\n const targetToken = (this.union ? reference : this).tokens.base;\n const message = \"Nullable union cannot include a dictionary type.\";\n yield validationError(targetToken, this, \"no-nullable-union-dict\", message);\n }\n } else {\n // allow some dictionary\n for (const subtype of this.subtype) {\n yield* subtype.validate(defs);\n }\n }\n }\n}\n\n/**\n * @param {Type} type\n */\nfunction replaceVoid(type) {\n return () => {\n type.tokens.base.value = \"undefined\";\n };\n}\n","import { Base } from \"./base.js\";\nimport { const_data, const_value } from \"./helpers.js\";\n\nexport class Default extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const assign = tokeniser.consume(\"=\");\n if (!assign) {\n return null;\n }\n const def = const_value(tokeniser) || tokeniser.consume(\"string\", \"null\", \"[\", \"{\") || tokeniser.error(\"No value for default\");\n const expression = [def];\n if (def.type === \"[\") {\n const close = tokeniser.consume(\"]\") || tokeniser.error(\"Default sequence value must be empty\");\n expression.push(close);\n } else if (def.type === \"{\") {\n const close = tokeniser.consume(\"}\") || tokeniser.error(\"Default dictionary value must be empty\");\n expression.push(close);\n }\n return new Default({ source: tokeniser.source, tokens: { assign }, expression });\n }\n\n constructor({ source, tokens, expression }) {\n super({ source, tokens });\n expression.parent = this;\n Object.defineProperty(this, \"expression\", { value: expression });\n }\n\n get type() {\n return const_data(this.expression[0]).type;\n }\n get value() {\n return const_data(this.expression[0]).value;\n }\n get negative() {\n return const_data(this.expression[0]).negative;\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { Default } from \"./default.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { unescape, type_with_extended_attributes, autoParenter, getFirstToken } from \"./helpers.js\";\nimport { argumentNameKeywords, Tokeniser } from \"../tokeniser.js\";\nimport { validationError } from \"../error.js\";\nimport { idlTypeIncludesDictionary, dictionaryIncludesRequiredField } from \"../validators/helpers.js\";\n\nexport class Argument extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const start_position = tokeniser.position;\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Argument({ source: tokeniser.source, tokens }));\n ret.extAttrs = ExtendedAttributes.parse(tokeniser);\n tokens.optional = tokeniser.consume(\"optional\");\n ret.idlType = type_with_extended_attributes(tokeniser, \"argument-type\");\n if (!ret.idlType) {\n return tokeniser.unconsume(start_position);\n }\n if (!tokens.optional) {\n tokens.variadic = tokeniser.consume(\"...\");\n }\n tokens.name = tokeniser.consume(\"identifier\", ...argumentNameKeywords);\n if (!tokens.name) {\n return tokeniser.unconsume(start_position);\n }\n ret.default = tokens.optional ? Default.parse(tokeniser) : null;\n return ret.this;\n }\n\n get type() {\n return \"argument\";\n }\n get optional() {\n return !!this.tokens.optional;\n }\n get variadic() {\n return !!this.tokens.variadic;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n /**\n * @param {import(\"../validator.js\").Definitions} defs\n */\n *validate(defs) {\n yield* this.idlType.validate(defs);\n const result = idlTypeIncludesDictionary(this.idlType, defs, { useNullableInner: true });\n if (result) {\n if (this.idlType.nullable) {\n const message = `Dictionary arguments cannot be nullable.`;\n yield validationError(this.tokens.name, this, \"no-nullable-dict-arg\", message);\n } else if (!this.optional) {\n if (this.parent && !dictionaryIncludesRequiredField(result.dictionary, defs) && isLastRequiredArgument(this)) {\n const message = `Dictionary argument must be optional if it has no required fields`;\n yield validationError(this.tokens.name, this, \"dict-arg-optional\", message, {\n autofix: autofixDictionaryArgumentOptionality(this)\n });\n }\n } else if (!this.default) {\n const message = `Optional dictionary arguments must have a default value of \\`{}\\`.`;\n yield validationError(this.tokens.name, this, \"dict-arg-default\", message, {\n autofix: autofixOptionalDictionaryDefaultValue(this)\n });\n }\n }\n }\n}\n\n/**\n * @param {Argument} arg\n */\nfunction isLastRequiredArgument(arg) {\n const list = arg.parent.arguments || arg.parent.list;\n const index = list.indexOf(arg);\n const requiredExists = list.slice(index + 1).some(a => !a.optional);\n return !requiredExists;\n}\n\n/**\n * @param {Argument} arg\n */\nfunction autofixDictionaryArgumentOptionality(arg) {\n return () => {\n const firstToken = getFirstToken(arg.idlType);\n arg.tokens.optional = { type: \"optional\", value: \"optional\", trivia: firstToken.trivia };\n firstToken.trivia = \" \";\n autofixOptionalDictionaryDefaultValue(arg)();\n };\n}\n\n/**\n * @param {Argument} arg\n */\nfunction autofixOptionalDictionaryDefaultValue(arg) {\n return () => {\n arg.default = Default.parse(new Tokeniser(\" = {}\"));\n };\n}\n","import { Base } from \"./base.js\";\nimport { return_type, argument_list, unescape, autoParenter } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\n\nexport class Operation extends Base {\n /**\n * @typedef {import(\"../tokeniser.js\").Token} Token\n *\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {Token} [options.special]\n * @param {Token} [options.regular]\n */\n static parse(tokeniser, { special, regular } = {}) {\n const tokens = { special };\n const ret = autoParenter(new Operation({ source: tokeniser.source, tokens }));\n if (special && special.value === \"stringifier\") {\n tokens.termination = tokeniser.consume(\";\");\n if (tokens.termination) {\n ret.arguments = [];\n return ret;\n }\n }\n if (!special && !regular) {\n tokens.special = tokeniser.consume(\"getter\", \"setter\", \"deleter\");\n }\n ret.idlType = return_type(tokeniser) || tokeniser.error(\"Missing return type\");\n tokens.name = tokeniser.consume(\"identifier\", \"includes\");\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"Invalid operation\");\n ret.arguments = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated operation\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated operation, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"operation\";\n }\n get name() {\n const { name } = this.tokens;\n if (!name) {\n return \"\";\n }\n return unescape(name.value);\n }\n get special() {\n if (!this.tokens.special) {\n return \"\";\n }\n return this.tokens.special.value;\n }\n\n *validate(defs) {\n if (!this.name && [\"\", \"static\"].includes(this.special)) {\n const message = `Regular or static operations must have both a return type and an identifier.`;\n yield validationError(this.tokens.open, this, \"incomplete-op\", message);\n }\n if (this.idlType) {\n yield* this.idlType.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, unescape, autoParenter } from \"./helpers.js\";\n\nexport class Attribute extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser, { special, noInherit = false, readonly = false } = {}) {\n const start_position = tokeniser.position;\n const tokens = { special };\n const ret = autoParenter(new Attribute({ source: tokeniser.source, tokens }));\n if (!special && !noInherit) {\n tokens.special = tokeniser.consume(\"inherit\");\n }\n if (ret.special === \"inherit\" && tokeniser.probe(\"readonly\")) {\n tokeniser.error(\"Inherited attributes cannot be read-only\");\n }\n tokens.readonly = tokeniser.consume(\"readonly\");\n if (readonly && !tokens.readonly && tokeniser.probe(\"attribute\")) {\n tokeniser.error(\"Attributes must be readonly in this context\");\n }\n tokens.base = tokeniser.consume(\"attribute\");\n if (!tokens.base) {\n tokeniser.unconsume(start_position);\n return;\n }\n ret.idlType = type_with_extended_attributes(tokeniser, \"attribute-type\") || tokeniser.error(\"Attribute lacks a type\");\n switch (ret.idlType.generic) {\n case \"sequence\":\n case \"record\": tokeniser.error(`Attributes cannot accept ${ret.idlType.generic} types`);\n }\n tokens.name = tokeniser.consume(\"identifier\", \"async\", \"required\") || tokeniser.error(\"Attribute lacks a name\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated attribute, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"attribute\";\n }\n get special() {\n if (!this.tokens.special) {\n return \"\";\n }\n return this.tokens.special.value;\n }\n get readonly() {\n return !!this.tokens.readonly;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n yield* this.idlType.validate(defs);\n }\n}\n","import { Type } from \"./type.js\";\nimport { Argument } from \"./argument.js\";\nimport { ExtendedAttributes, SimpleExtendedAttribute } from \"./extended-attributes.js\";\nimport { Operation } from \"./operation.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Tokeniser } from \"../tokeniser.js\";\n\n/**\n * @param {string} identifier\n */\nexport function unescape(identifier) {\n return identifier.startsWith('_') ? identifier.slice(1) : identifier;\n}\n\n/**\n * Parses comma-separated list\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} args\n * @param {Function} args.parser parser function for each item\n * @param {boolean} [args.allowDangler] whether to allow dangling comma\n * @param {string} [args.listName] the name to be shown on error messages\n */\nexport function list(tokeniser, { parser, allowDangler, listName = \"list\" }) {\n const first = parser(tokeniser);\n if (!first) {\n return [];\n }\n first.tokens.separator = tokeniser.consume(\",\");\n const items = [first];\n while (first.tokens.separator) {\n const item = parser(tokeniser);\n if (!item) {\n if (!allowDangler) {\n tokeniser.error(`Trailing comma in ${listName}`);\n }\n break;\n }\n item.tokens.separator = tokeniser.consume(\",\");\n items.push(item);\n if (!item.tokens.separator) break;\n }\n return items;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function const_value(tokeniser) {\n return tokeniser.consume(\"true\", \"false\", \"Infinity\", \"-Infinity\", \"NaN\", \"decimal\", \"integer\");\n}\n\n/**\n * @param {object} token\n * @param {string} token.type\n * @param {string} token.value\n */\nexport function const_data({ type, value }) {\n switch (type) {\n case \"true\":\n case \"false\":\n return { type: \"boolean\", value: type === \"true\" };\n case \"Infinity\":\n case \"-Infinity\":\n return { type: \"Infinity\", negative: type.startsWith(\"-\") };\n case \"[\":\n return { type: \"sequence\", value: [] };\n case \"{\":\n return { type: \"dictionary\" };\n case \"decimal\":\n case \"integer\":\n return { type: \"number\", value };\n case \"string\":\n return { type: \"string\", value: value.slice(1, -1) };\n default:\n return { type };\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function primitive_type(tokeniser) {\n function integer_type() {\n const prefix = tokeniser.consume(\"unsigned\");\n const base = tokeniser.consume(\"short\", \"long\");\n if (base) {\n const postfix = tokeniser.consume(\"long\");\n return new Type({ source, tokens: { prefix, base, postfix } });\n }\n if (prefix) tokeniser.error(\"Failed to parse integer type\");\n }\n\n function decimal_type() {\n const prefix = tokeniser.consume(\"unrestricted\");\n const base = tokeniser.consume(\"float\", \"double\");\n if (base) {\n return new Type({ source, tokens: { prefix, base } });\n }\n if (prefix) tokeniser.error(\"Failed to parse float type\");\n }\n\n const { source } = tokeniser;\n const num_type = integer_type(tokeniser) || decimal_type(tokeniser);\n if (num_type) return num_type;\n const base = tokeniser.consume(\"bigint\", \"boolean\", \"byte\", \"octet\", \"undefined\");\n if (base) {\n return new Type({ source, tokens: { base } });\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function argument_list(tokeniser) {\n return list(tokeniser, { parser: Argument.parse, listName: \"arguments list\" });\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nexport function type_with_extended_attributes(tokeniser, typeName) {\n const extAttrs = ExtendedAttributes.parse(tokeniser);\n const ret = Type.parse(tokeniser, typeName);\n if (ret) autoParenter(ret).extAttrs = extAttrs;\n return ret;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nexport function return_type(tokeniser, typeName) {\n const typ = Type.parse(tokeniser, typeName || \"return-type\");\n if (typ) {\n return typ;\n }\n const voidToken = tokeniser.consume(\"void\");\n if (voidToken) {\n const ret = new Type({ source: tokeniser.source, tokens: { base: voidToken } });\n ret.type = \"return-type\";\n return ret;\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function stringifier(tokeniser) {\n const special = tokeniser.consume(\"stringifier\");\n if (!special) return;\n const member = Attribute.parse(tokeniser, { special }) ||\n Operation.parse(tokeniser, { special }) ||\n tokeniser.error(\"Unterminated stringifier\");\n return member;\n}\n\n/**\n * @param {string} str\n */\nexport function getLastIndentation(str) {\n const lines = str.split(\"\\n\");\n // the first line visually binds to the preceding token\n if (lines.length) {\n const match = lines[lines.length - 1].match(/^\\s+/);\n if (match) {\n return match[0];\n }\n }\n return \"\";\n}\n\n/**\n * @param {string} parentTrivia\n */\nexport function getMemberIndentation(parentTrivia) {\n const indentation = getLastIndentation(parentTrivia);\n const indentCh = indentation.includes(\"\\t\") ? \"\\t\" : \" \";\n return indentation + indentCh;\n}\n\n/**\n * @param {object} def\n * @param {import(\"./extended-attributes.js\").ExtendedAttributes} def.extAttrs\n */\nexport function autofixAddExposedWindow(def) {\n return () => {\n if (def.extAttrs.length){\n const tokeniser = new Tokeniser(\"Exposed=Window,\");\n const exposed = SimpleExtendedAttribute.parse(tokeniser);\n exposed.tokens.separator = tokeniser.consume(\",\");\n const existing = def.extAttrs[0];\n if (!/^\\s/.test(existing.tokens.name.trivia)) {\n existing.tokens.name.trivia = ` ${existing.tokens.name.trivia}`;\n }\n def.extAttrs.unshift(exposed);\n } else {\n autoParenter(def).extAttrs = ExtendedAttributes.parse(new Tokeniser(\"[Exposed=Window]\"));\n const trivia = def.tokens.base.trivia;\n def.extAttrs.tokens.open.trivia = trivia;\n def.tokens.base.trivia = `\\n${getLastIndentation(trivia)}`;\n }\n };\n}\n\n/**\n * Get the first syntax token for the given IDL object.\n * @param {*} data\n */\nexport function getFirstToken(data) {\n if (data.extAttrs.length) {\n return data.extAttrs.tokens.open;\n }\n if (data.type === \"operation\" && !data.special) {\n return getFirstToken(data.idlType);\n }\n const tokens = Object.values(data.tokens).sort((x, y) => x.index - y.index);\n return tokens[0];\n}\n\n/**\n * @template T\n * @param {T[]} array\n * @param {(item: T) => boolean} predicate\n */\nexport function findLastIndex(array, predicate) {\n const index = array.slice().reverse().findIndex(predicate);\n if (index === -1) {\n return index;\n }\n return array.length - index - 1;\n}\n\n/**\n * Returns a proxy that auto-assign `parent` field.\n * @template T\n * @param {T} data\n * @param {*} [parent] The object that will be assigned to `parent`.\n * If absent, it will be `data` by default.\n * @return {T}\n */\nexport function autoParenter(data, parent) {\n if (!parent) {\n // Defaults to `data` unless specified otherwise.\n parent = data;\n }\n if (!data) {\n // This allows `autoParenter(undefined)` which again allows\n // `autoParenter(parse())` where the function may return nothing.\n return data;\n }\n return new Proxy(data, {\n get(target, p) {\n const value = target[p];\n if (Array.isArray(value)) {\n // Wraps the array so that any added items will also automatically\n // get their `parent` values.\n return autoParenter(value, target);\n }\n return value;\n },\n set(target, p, value) {\n target[p] = value;\n if (!value) {\n return true;\n } else if (Array.isArray(value)) {\n // Assigning an array will add `parent` to its items.\n for (const item of value) {\n if (typeof item.parent !== \"undefined\") {\n item.parent = parent;\n }\n }\n } else if (typeof value.parent !== \"undefined\") {\n value.parent = parent;\n }\n return true;\n }\n });\n}\n","import { syntaxError } from \"./error.js\";\nimport { unescape } from \"./productions/helpers.js\";\n\n// These regular expressions use the sticky flag so they will only match at\n// the current location (ie. the offset of lastIndex).\nconst tokenRe = {\n // This expression uses a lookahead assertion to catch false matches\n // against integers early.\n \"decimal\": /-?(?=[0-9]*\\.|[0-9]+[eE])(([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/y,\n \"integer\": /-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/y,\n \"identifier\": /[_-]?[A-Za-z][0-9A-Z_a-z-]*/y,\n \"string\": /\"[^\"]*\"/y,\n \"whitespace\": /[\\t\\n\\r ]+/y,\n \"comment\": /((\\/(\\/.*|\\*([^*]|\\*[^/])*\\*\\/)[\\t\\n\\r ]*)+)/y,\n \"other\": /[^\\t\\n\\r 0-9A-Za-z]/y\n};\n\nexport const typeNameKeywords = [\n \"ArrayBuffer\",\n \"DataView\",\n \"Int8Array\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint8Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"Uint8ClampedArray\",\n \"Float32Array\",\n \"Float64Array\",\n \"any\",\n \"object\",\n \"symbol\"\n];\n\nexport const stringTypes = [\n \"ByteString\",\n \"DOMString\",\n \"USVString\"\n];\n\nexport const argumentNameKeywords = [\n \"async\",\n \"attribute\",\n \"callback\",\n \"const\",\n \"constructor\",\n \"deleter\",\n \"dictionary\",\n \"enum\",\n \"getter\",\n \"includes\",\n \"inherit\",\n \"interface\",\n \"iterable\",\n \"maplike\",\n \"namespace\",\n \"partial\",\n \"required\",\n \"setlike\",\n \"setter\",\n \"static\",\n \"stringifier\",\n \"typedef\",\n \"unrestricted\"\n];\n\nconst nonRegexTerminals = [\n \"-Infinity\",\n \"FrozenArray\",\n \"Infinity\",\n \"NaN\",\n \"ObservableArray\",\n \"Promise\",\n \"bigint\",\n \"boolean\",\n \"byte\",\n \"double\",\n \"false\",\n \"float\",\n \"long\",\n \"mixin\",\n \"null\",\n \"octet\",\n \"optional\",\n \"or\",\n \"readonly\",\n \"record\",\n \"sequence\",\n \"short\",\n \"true\",\n \"undefined\",\n \"unsigned\",\n \"void\"\n].concat(argumentNameKeywords, stringTypes, typeNameKeywords);\n\nconst punctuations = [\n \"(\",\n \")\",\n \",\",\n \"...\",\n \":\",\n \";\",\n \"<\",\n \"=\",\n \">\",\n \"?\",\n \"[\",\n \"]\",\n \"{\",\n \"}\"\n];\n\nconst reserved = [\n // \"constructor\" is now a keyword\n \"_constructor\",\n \"toString\",\n \"_toString\",\n];\n\n/**\n * @typedef {ArrayItemType<ReturnType<typeof tokenise>>} Token\n * @param {string} str\n */\nfunction tokenise(str) {\n const tokens = [];\n let lastCharIndex = 0;\n let trivia = \"\";\n let line = 1;\n let index = 0;\n while (lastCharIndex < str.length) {\n const nextChar = str.charAt(lastCharIndex);\n let result = -1;\n\n if (/[\\t\\n\\r ]/.test(nextChar)) {\n result = attemptTokenMatch(\"whitespace\", { noFlushTrivia: true });\n } else if (nextChar === '/') {\n result = attemptTokenMatch(\"comment\", { noFlushTrivia: true });\n }\n\n if (result !== -1) {\n const currentTrivia = tokens.pop().value;\n line += (currentTrivia.match(/\\n/g) || []).length;\n trivia += currentTrivia;\n index -= 1;\n } else if (/[-0-9.A-Z_a-z]/.test(nextChar)) {\n result = attemptTokenMatch(\"decimal\");\n if (result === -1) {\n result = attemptTokenMatch(\"integer\");\n }\n if (result === -1) {\n result = attemptTokenMatch(\"identifier\");\n const lastIndex = tokens.length - 1;\n const token = tokens[lastIndex];\n if (result !== -1) {\n if (reserved.includes(token.value)) {\n const message = `${unescape(token.value)} is a reserved identifier and must not be used.`;\n throw new WebIDLParseError(syntaxError(tokens, lastIndex, null, message));\n } else if (nonRegexTerminals.includes(token.value)) {\n token.type = token.value;\n }\n }\n }\n } else if (nextChar === '\"') {\n result = attemptTokenMatch(\"string\");\n }\n\n for (const punctuation of punctuations) {\n if (str.startsWith(punctuation, lastCharIndex)) {\n tokens.push({ type: punctuation, value: punctuation, trivia, line, index });\n trivia = \"\";\n lastCharIndex += punctuation.length;\n result = lastCharIndex;\n break;\n }\n }\n\n // other as the last try\n if (result === -1) {\n result = attemptTokenMatch(\"other\");\n }\n if (result === -1) {\n throw new Error(\"Token stream not progressing\");\n }\n lastCharIndex = result;\n index += 1;\n }\n\n // remaining trivia as eof\n tokens.push({\n type: \"eof\",\n value: \"\",\n trivia\n });\n\n return tokens;\n\n /**\n * @param {keyof typeof tokenRe} type\n * @param {object} options\n * @param {boolean} [options.noFlushTrivia]\n */\n function attemptTokenMatch(type, { noFlushTrivia } = {}) {\n const re = tokenRe[type];\n re.lastIndex = lastCharIndex;\n const result = re.exec(str);\n if (result) {\n tokens.push({ type, value: result[0], trivia, line, index });\n if (!noFlushTrivia) {\n trivia = \"\";\n }\n return re.lastIndex;\n }\n return -1;\n }\n}\n\nexport class Tokeniser {\n /**\n * @param {string} idl\n */\n constructor(idl) {\n this.source = tokenise(idl);\n this.position = 0;\n }\n\n /**\n * @param {string} message\n * @return {never}\n */\n error(message) {\n throw new WebIDLParseError(syntaxError(this.source, this.position, this.current, message));\n }\n\n /**\n * @param {string} type\n */\n probe(type) {\n return this.source.length > this.position && this.source[this.position].type === type;\n }\n\n /**\n * @param {...string} candidates\n */\n consume(...candidates) {\n for (const type of candidates) {\n if (!this.probe(type)) continue;\n const token = this.source[this.position];\n this.position++;\n return token;\n }\n }\n\n /**\n * @param {number} position\n */\n unconsume(position) {\n this.position = position;\n }\n}\n\nexport class WebIDLParseError extends Error {\n /**\n * @param {object} options\n * @param {string} options.message\n * @param {string} options.bareMessage\n * @param {string} options.context\n * @param {number} options.line\n * @param {*} options.sourceName\n * @param {string} options.input\n * @param {*[]} options.tokens\n */\n constructor({ message, bareMessage, context, line, sourceName, input, tokens }) {\n super(message);\n\n this.name = \"WebIDLParseError\"; // not to be mangled\n this.bareMessage = bareMessage;\n this.context = context;\n this.line = line;\n this.sourceName = sourceName;\n this.input = input;\n this.tokens = tokens;\n }\n}\n","import { list, unescape, autoParenter } from \"./helpers.js\";\nimport { Token } from \"./token.js\";\nimport { Base } from \"./base.js\";\n\nclass EnumValue extends Token {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const value = tokeniser.consume(\"string\");\n if (value) {\n return new EnumValue({ source: tokeniser.source, tokens: { value } });\n }\n }\n\n get type() {\n return \"enum-value\";\n }\n get value() {\n return super.value.slice(1, -1);\n }\n}\n\nexport class Enum extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n tokens.base = tokeniser.consume(\"enum\");\n if (!tokens.base) {\n return;\n }\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"No name for enum\");\n const ret = autoParenter(new Enum({ source: tokeniser.source, tokens }));\n tokeniser.current = ret.this;\n tokens.open = tokeniser.consume(\"{\") || tokeniser.error(\"Bodyless enum\");\n ret.values = list(tokeniser, {\n parser: EnumValue.parse,\n allowDangler: true,\n listName: \"enumeration\"\n });\n if (tokeniser.probe(\"string\")) {\n tokeniser.error(\"No comma between enum values\");\n }\n tokens.close = tokeniser.consume(\"}\") || tokeniser.error(\"Unexpected value in enum\");\n if (!ret.values.length) {\n tokeniser.error(\"No value in enum\");\n }\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No semicolon after enum\");\n return ret.this;\n }\n\n get type() {\n return \"enum\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { unescape } from \"./helpers.js\";\n\nexport class Includes extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const target = tokeniser.consume(\"identifier\");\n if (!target) {\n return;\n }\n const tokens = { target };\n tokens.includes = tokeniser.consume(\"includes\");\n if (!tokens.includes) {\n tokeniser.unconsume(target.index);\n return;\n }\n tokens.mixin = tokeniser.consume(\"identifier\") || tokeniser.error(\"Incomplete includes statement\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No terminating ; for includes statement\");\n return new Includes({ source: tokeniser.source, tokens });\n }\n\n get type() {\n return \"includes\";\n }\n get target() {\n return unescape(this.tokens.target.value);\n }\n get includes() {\n return unescape(this.tokens.mixin.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, unescape, autoParenter } from \"./helpers.js\";\n\nexport class Typedef extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Typedef({ source: tokeniser.source, tokens }));\n tokens.base = tokeniser.consume(\"typedef\");\n if (!tokens.base) {\n return;\n }\n ret.idlType = type_with_extended_attributes(tokeniser, \"typedef-type\") || tokeniser.error(\"Typedef lacks a type\");\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Typedef lacks a name\");\n tokeniser.current = ret.this;\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated typedef, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"typedef\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.idlType.validate(defs);\n }\n}\n","import { Base } from \"./base.js\";\nimport { return_type, argument_list, unescape, autoParenter } from \"./helpers.js\";\n\nexport class CallbackFunction extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser, base) {\n const tokens = { base };\n const ret = autoParenter(new CallbackFunction({ source: tokeniser.source, tokens }));\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Callback lacks a name\");\n tokeniser.current = ret.this;\n tokens.assign = tokeniser.consume(\"=\") || tokeniser.error(\"Callback lacks an assignment\");\n ret.idlType = return_type(tokeniser) || tokeniser.error(\"Callback lacks a return type\");\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"Callback lacks parentheses for arguments\");\n ret.arguments = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated callback\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated callback, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"callback\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n yield* this.idlType.validate(defs);\n }\n}\n","import { Base } from \"./base.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { unescape, autoParenter } from \"./helpers.js\";\n\n/**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\nfunction inheritance(tokeniser) {\n const colon = tokeniser.consume(\":\");\n if (!colon) {\n return {};\n }\n const inheritance = tokeniser.consume(\"identifier\") || tokeniser.error(\"Inheritance lacks a type\");\n return { colon, inheritance };\n}\n\nexport class Container extends Base {\n /**\n * @template T\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {T} instance\n * @param {*} args\n */\n static parse(tokeniser, instance, { type, inheritable, allowedMembers }) {\n const { tokens } = instance;\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(`Missing name in ${instance.type}`);\n tokeniser.current = instance;\n instance = autoParenter(instance);\n if (inheritable) {\n Object.assign(tokens, inheritance(tokeniser));\n }\n tokens.open = tokeniser.consume(\"{\") || tokeniser.error(`Bodyless ${type}`);\n instance.members = [];\n while (true) {\n tokens.close = tokeniser.consume(\"}\");\n if (tokens.close) {\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(`Missing semicolon after ${type}`);\n return instance.this;\n }\n const ea = ExtendedAttributes.parse(tokeniser);\n let mem;\n for (const [parser, ...args] of allowedMembers) {\n mem = autoParenter(parser(tokeniser, ...args));\n if (mem) {\n break;\n }\n }\n if (!mem) {\n tokeniser.error(\"Unknown member\");\n }\n mem.extAttrs = ea;\n instance.members.push(mem.this);\n }\n }\n\n get partial() {\n return !!this.tokens.partial;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get inheritance() {\n if (!this.tokens.inheritance) {\n return null;\n }\n return unescape(this.tokens.inheritance.value);\n }\n\n *validate(defs) {\n for (const member of this.members) {\n if (member.validate) {\n yield* member.validate(defs);\n }\n }\n }\n }\n","import { Base } from \"./base.js\";\nimport { Type } from \"./type.js\";\nimport { const_data, const_value, primitive_type, autoParenter, unescape } from \"./helpers.js\";\n\nexport class Constant extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n tokens.base = tokeniser.consume(\"const\");\n if (!tokens.base) {\n return;\n }\n let idlType = primitive_type(tokeniser);\n if (!idlType) {\n const base = tokeniser.consume(\"identifier\") || tokeniser.error(\"Const lacks a type\");\n idlType = new Type({ source: tokeniser.source, tokens: { base } });\n }\n if (tokeniser.probe(\"?\")) {\n tokeniser.error(\"Unexpected nullable constant type\");\n }\n idlType.type = \"const-type\";\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Const lacks a name\");\n tokens.assign = tokeniser.consume(\"=\") || tokeniser.error(\"Const lacks value assignment\");\n tokens.value = const_value(tokeniser) || tokeniser.error(\"Const lacks a value\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated const, expected `;`\");\n const ret = new Constant({ source: tokeniser.source, tokens });\n autoParenter(ret).idlType = idlType;\n return ret;\n }\n\n get type() {\n return \"const\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get value() {\n return const_data(this.tokens.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, autoParenter, argument_list } from \"./helpers.js\";\n\nexport class IterableLike extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const start_position = tokeniser.position;\n const tokens = {};\n const ret = autoParenter(new IterableLike({ source: tokeniser.source, tokens }));\n tokens.readonly = tokeniser.consume(\"readonly\");\n if (!tokens.readonly) {\n tokens.async = tokeniser.consume(\"async\");\n }\n tokens.base =\n tokens.readonly ? tokeniser.consume(\"maplike\", \"setlike\") :\n tokens.async ? tokeniser.consume(\"iterable\") :\n tokeniser.consume(\"iterable\", \"maplike\", \"setlike\");\n if (!tokens.base) {\n tokeniser.unconsume(start_position);\n return;\n }\n\n const { type } = ret;\n const secondTypeRequired = type === \"maplike\";\n const secondTypeAllowed = secondTypeRequired || type === \"iterable\";\n const argumentAllowed = ret.async && type === \"iterable\";\n\n tokens.open = tokeniser.consume(\"<\") || tokeniser.error(`Missing less-than sign \\`<\\` in ${type} declaration`);\n const first = type_with_extended_attributes(tokeniser) || tokeniser.error(`Missing a type argument in ${type} declaration`);\n ret.idlType = [first];\n ret.arguments = [];\n\n if (secondTypeAllowed) {\n first.tokens.separator = tokeniser.consume(\",\");\n if (first.tokens.separator) {\n ret.idlType.push(type_with_extended_attributes(tokeniser));\n }\n else if (secondTypeRequired) {\n tokeniser.error(`Missing second type argument in ${type} declaration`);\n }\n }\n\n tokens.close = tokeniser.consume(\">\") || tokeniser.error(`Missing greater-than sign \\`>\\` in ${type} declaration`);\n\n if (tokeniser.probe(\"(\")) {\n if (argumentAllowed) {\n tokens.argsOpen = tokeniser.consume(\"(\");\n ret.arguments.push(...argument_list(tokeniser));\n tokens.argsClose = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated async iterable argument list\");\n } else {\n tokeniser.error(`Arguments are only allowed for \\`async iterable\\``);\n }\n }\n\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(`Missing semicolon after ${type} declaration`);\n\n return ret.this;\n }\n\n get type() {\n return this.tokens.base.value;\n }\n get readonly() {\n return !!this.tokens.readonly;\n }\n get async() {\n return !!this.tokens.async;\n }\n\n *validate(defs) {\n for (const type of this.idlType) {\n yield* type.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { argument_list, autoParenter } from \"./helpers.js\";\n\nexport class Constructor extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const base = tokeniser.consume(\"constructor\");\n if (!base) {\n return;\n }\n /** @type {Base[\"tokens\"]} */\n const tokens = { base };\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"No argument list in constructor\");\n const args = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated constructor\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No semicolon after constructor\");\n const ret = new Constructor({ source: tokeniser.source, tokens });\n autoParenter(ret).arguments = args;\n return ret;\n }\n\n get type() {\n return \"constructor\";\n }\n\n *validate(defs) {\n if (this.idlType) {\n yield* this.idlType.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Container } from \"./container.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { Constant } from \"./constant.js\";\nimport { IterableLike } from \"./iterable.js\";\nimport { stringifier, autofixAddExposedWindow, getMemberIndentation, getLastIndentation, getFirstToken, findLastIndex, autoParenter } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\nimport { checkInterfaceMemberDuplication } from \"../validators/interface.js\";\nimport { Constructor } from \"./constructor.js\";\nimport { Tokeniser } from \"../tokeniser.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction static_member(tokeniser) {\n const special = tokeniser.consume(\"static\");\n if (!special) return;\n const member = Attribute.parse(tokeniser, { special }) ||\n Operation.parse(tokeniser, { special }) ||\n tokeniser.error(\"No body in static member\");\n return member;\n}\n\nexport class Interface extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser, base, { partial = null } = {}) {\n const tokens = { partial, base };\n return Container.parse(tokeniser, new Interface({ source: tokeniser.source, tokens }), {\n type: \"interface\",\n inheritable: !partial,\n allowedMembers: [\n [Constant.parse],\n [Constructor.parse],\n [static_member],\n [stringifier],\n [IterableLike.parse],\n [Attribute.parse],\n [Operation.parse]\n ]\n });\n }\n\n get type() {\n return \"interface\";\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n if (\n !this.partial &&\n this.extAttrs.every(extAttr => extAttr.name !== \"Exposed\")\n ) {\n const message = `Interfaces must have \\`[Exposed]\\` extended attribute. \\\nTo fix, add, for example, \\`[Exposed=Window]\\`. Please also consider carefully \\\nif your interface should also be exposed in a Worker scope. Refer to the \\\n[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \\\nfor more information.`;\n yield validationError(this.tokens.name, this, \"require-exposed\", message, {\n autofix: autofixAddExposedWindow(this)\n });\n }\n const oldConstructors = this.extAttrs.filter(extAttr => extAttr.name === \"Constructor\");\n for (const constructor of oldConstructors) {\n const message = `Constructors should now be represented as a \\`constructor()\\` operation on the interface \\\ninstead of \\`[Constructor]\\` extended attribute. Refer to the \\\n[WebIDL spec section on constructor operations](https://heycam.github.io/webidl/#idl-constructors) \\\nfor more information.`;\n yield validationError(constructor.tokens.name, this, \"constructor-member\", message, {\n autofix: autofixConstructor(this, constructor)\n });\n }\n\n const isGlobal = this.extAttrs.some(extAttr => extAttr.name === \"Global\");\n if (isGlobal) {\n const factoryFunctions = this.extAttrs.filter(extAttr => extAttr.name === \"LegacyFactoryFunction\");\n for (const named of factoryFunctions) {\n const message = `Interfaces marked as \\`[Global]\\` cannot have factory functions.`;\n yield validationError(named.tokens.name, this, \"no-constructible-global\", message);\n }\n\n const constructors = this.members.filter(member => member.type === \"constructor\");\n for (const named of constructors) {\n const message = `Interfaces marked as \\`[Global]\\` cannot have constructors.`;\n yield validationError(named.tokens.base, this, \"no-constructible-global\", message);\n }\n }\n\n yield* super.validate(defs);\n if (!this.partial) {\n yield* checkInterfaceMemberDuplication(defs, this);\n }\n }\n}\n\nfunction autofixConstructor(interfaceDef, constructorExtAttr) {\n interfaceDef = autoParenter(interfaceDef);\n return () => {\n const indentation = getLastIndentation(interfaceDef.extAttrs.tokens.open.trivia);\n const memberIndent = interfaceDef.members.length ?\n getLastIndentation(getFirstToken(interfaceDef.members[0]).trivia) :\n getMemberIndentation(indentation);\n const constructorOp = Constructor.parse(new Tokeniser(`\\n${memberIndent}constructor();`));\n constructorOp.extAttrs = new ExtendedAttributes({});\n autoParenter(constructorOp).arguments = constructorExtAttr.arguments;\n\n const existingIndex = findLastIndex(interfaceDef.members, m => m.type === \"constructor\");\n interfaceDef.members.splice(existingIndex + 1, 0, constructorOp);\n\n const { close } = interfaceDef.tokens;\n if (!close.trivia.includes(\"\\n\")) {\n close.trivia += `\\n${indentation}`;\n }\n\n const { extAttrs } = interfaceDef;\n const index = extAttrs.indexOf(constructorExtAttr);\n const removed = extAttrs.splice(index, 1);\n if (!extAttrs.length) {\n extAttrs.tokens.open = extAttrs.tokens.close = undefined;\n } else if (extAttrs.length === index) {\n extAttrs[index - 1].tokens.separator = undefined;\n } else if (!extAttrs[index].tokens.name.trivia.trim()) {\n extAttrs[index].tokens.name.trivia = removed[0].tokens.name.trivia;\n }\n };\n}\n","// @ts-check\n\nimport { validationError } from \"../error.js\";\n\nexport function* checkInterfaceMemberDuplication(defs, i) {\n const opNames = new Set(getOperations(i).map(op => op.name));\n const partials = defs.partials.get(i.name) || [];\n const mixins = defs.mixinMap.get(i.name) || [];\n for (const ext of [...partials, ...mixins]) {\n const additions = getOperations(ext);\n yield* forEachExtension(additions, opNames, ext, i);\n for (const addition of additions) {\n opNames.add(addition.name);\n }\n }\n\n function* forEachExtension(additions, existings, ext, base) {\n for (const addition of additions) {\n const { name } = addition;\n if (name && existings.has(name)) {\n const message = `The operation \"${name}\" has already been defined for the base interface \"${base.name}\" either in itself or in a mixin`;\n yield validationError(addition.tokens.name, ext, \"no-cross-overload\", message);\n }\n }\n }\n\n function getOperations(i) {\n return i.members\n .filter(({type}) => type === \"operation\");\n }\n}\n","import { Container } from \"./container.js\";\nimport { Constant } from \"./constant.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { stringifier } from \"./helpers.js\";\n\nexport class Mixin extends Container {\n /**\n * @typedef {import(\"../tokeniser.js\").Token} Token\n *\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {Token} base\n * @param {object} [options]\n * @param {Token} [options.partial]\n */\n static parse(tokeniser, base, { partial } = {}) {\n const tokens = { partial, base };\n tokens.mixin = tokeniser.consume(\"mixin\");\n if (!tokens.mixin) {\n return;\n }\n return Container.parse(tokeniser, new Mixin({ source: tokeniser.source, tokens }), {\n type: \"interface mixin\",\n allowedMembers: [\n [Constant.parse],\n [stringifier],\n [Attribute.parse, { noInherit: true }],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"interface mixin\";\n }\n}\n","import { Base } from \"./base.js\";\nimport { unescape, type_with_extended_attributes, autoParenter } from \"./helpers.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { Default } from \"./default.js\";\n\nexport class Field extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Field({ source: tokeniser.source, tokens }));\n ret.extAttrs = ExtendedAttributes.parse(tokeniser);\n tokens.required = tokeniser.consume(\"required\");\n ret.idlType = type_with_extended_attributes(tokeniser, \"dictionary-type\") || tokeniser.error(\"Dictionary member lacks a type\");\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Dictionary member lacks a name\");\n ret.default = Default.parse(tokeniser);\n if (tokens.required && ret.default) tokeniser.error(\"Required member must not have a default\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated dictionary member, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"field\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get required() {\n return !!this.tokens.required;\n }\n\n *validate(defs) {\n yield* this.idlType.validate(defs);\n }\n}\n","// @ts-check\n\nimport { Container } from \"./container.js\";\nimport { Field } from \"./field.js\";\n\nexport class Dictionary extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {import(\"../tokeniser.js\").Token} [options.partial]\n */\n static parse(tokeniser, { partial } = {}) {\n const tokens = { partial };\n tokens.base = tokeniser.consume(\"dictionary\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new Dictionary({ source: tokeniser.source, tokens }), {\n type: \"dictionary\",\n inheritable: !partial,\n allowedMembers: [\n [Field.parse],\n ]\n });\n }\n\n get type() {\n return \"dictionary\";\n }\n}\n","import { Container } from \"./container.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { validationError } from \"../error.js\";\nimport { autofixAddExposedWindow } from \"./helpers.js\";\n\nexport class Namespace extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {import(\"../tokeniser.js\").Token} [options.partial]\n */\n static parse(tokeniser, { partial } = {}) {\n const tokens = { partial };\n tokens.base = tokeniser.consume(\"namespace\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new Namespace({ source: tokeniser.source, tokens }), {\n type: \"namespace\",\n allowedMembers: [\n [Attribute.parse, { noInherit: true, readonly: true }],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"namespace\";\n }\n\n *validate(defs) {\n if (!this.partial && this.extAttrs.every(extAttr => extAttr.name !== \"Exposed\")) {\n const message = `Namespaces must have [Exposed] extended attribute. \\\nTo fix, add, for example, [Exposed=Window]. Please also consider carefully \\\nif your namespace should also be exposed in a Worker scope. Refer to the \\\n[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \\\nfor more information.`;\n yield validationError(this.tokens.name, this, \"require-exposed\", message, {\n autofix: autofixAddExposedWindow(this)\n });\n }\n yield* super.validate(defs);\n }\n}\n","// @ts-check\n\nimport { Container } from \"./container.js\";\nimport { Operation } from \"./operation.js\";\nimport { Constant } from \"./constant.js\";\n\nexport class CallbackInterface extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser, callback, { partial = null } = {}) {\n const tokens = { callback };\n tokens.base = tokeniser.consume(\"interface\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new CallbackInterface({ source: tokeniser.source, tokens }), {\n type: \"callback interface\",\n inheritable: !partial,\n allowedMembers: [\n [Constant.parse],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"callback interface\";\n }\n}\n","\"use strict\";\n\nimport { Tokeniser } from \"./tokeniser.js\";\nimport { Enum } from \"./productions/enum.js\";\nimport { Includes } from \"./productions/includes.js\";\nimport { ExtendedAttributes } from \"./productions/extended-attributes.js\";\nimport { Typedef } from \"./productions/typedef.js\";\nimport { CallbackFunction } from \"./productions/callback.js\";\nimport { Interface } from \"./productions/interface.js\";\nimport { Mixin } from \"./productions/mixin.js\";\nimport { Dictionary } from \"./productions/dictionary.js\";\nimport { Namespace } from \"./productions/namespace.js\";\nimport { CallbackInterface } from \"./productions/callback-interface.js\";\nimport { autoParenter } from \"./productions/helpers.js\";\n\n/**\n * @param {Tokeniser} tokeniser\n * @param {object} options\n * @param {boolean} [options.concrete]\n */\nfunction parseByTokens(tokeniser, options) {\n const source = tokeniser.source;\n\n function error(str) {\n tokeniser.error(str);\n }\n\n function consume(...candidates) {\n return tokeniser.consume(...candidates);\n }\n\n function callback() {\n const callback = consume(\"callback\");\n if (!callback) return;\n if (tokeniser.probe(\"interface\")) {\n return CallbackInterface.parse(tokeniser, callback);\n }\n return CallbackFunction.parse(tokeniser, callback);\n }\n\n function interface_(opts) {\n const base = consume(\"interface\");\n if (!base) return;\n const ret = Mixin.parse(tokeniser, base, opts) ||\n Interface.parse(tokeniser, base, opts) ||\n error(\"Interface has no proper body\");\n return ret;\n }\n\n function partial() {\n const partial = consume(\"partial\");\n if (!partial) return;\n return Dictionary.parse(tokeniser, { partial }) ||\n interface_({ partial }) ||\n Namespace.parse(tokeniser, { partial }) ||\n error(\"Partial doesn't apply to anything\");\n }\n\n function definition() {\n return callback() ||\n interface_() ||\n partial() ||\n Dictionary.parse(tokeniser) ||\n Enum.parse(tokeniser) ||\n Typedef.parse(tokeniser) ||\n Includes.parse(tokeniser) ||\n Namespace.parse(tokeniser);\n }\n\n function definitions() {\n if (!source.length) return [];\n const defs = [];\n while (true) {\n const ea = ExtendedAttributes.parse(tokeniser);\n const def = definition();\n if (!def) {\n if (ea.length) error(\"Stray extended attributes\");\n break;\n }\n autoParenter(def).extAttrs = ea;\n defs.push(def);\n }\n const eof = consume(\"eof\");\n if (options.concrete) {\n defs.push(eof);\n }\n return defs;\n }\n const res = definitions();\n if (tokeniser.position < source.length) error(\"Unrecognised tokens\");\n return res;\n}\n\n/**\n * @param {string} str\n * @param {object} [options]\n * @param {*} [options.sourceName]\n * @param {boolean} [options.concrete]\n */\nexport function parse(str, options = {}) {\n const tokeniser = new Tokeniser(str);\n if (typeof options.sourceName !== \"undefined\") {\n tokeniser.source.name = options.sourceName;\n }\n return parseByTokens(tokeniser, options);\n}\n","\"use strict\";\n\nfunction noop(arg) {\n return arg;\n}\n\nconst templates = {\n wrap: items => items.join(\"\"),\n trivia: noop,\n name: noop,\n reference: noop,\n type: noop,\n generic: noop,\n nameless: noop,\n inheritance: noop,\n definition: noop,\n extendedAttribute: noop,\n extendedAttributeReference: noop\n};\n\nexport function write(ast, { templates: ts = templates } = {}) {\n ts = Object.assign({}, templates, ts);\n\n function reference(raw, { unescaped, context }) {\n if (!unescaped) {\n unescaped = raw.startsWith(\"_\") ? raw.slice(1) : raw;\n }\n return ts.reference(raw, unescaped, context);\n }\n\n function token(t, wrapper = noop, ...args) {\n if (!t) {\n return \"\";\n }\n const value = wrapper(t.value, ...args);\n return ts.wrap([ts.trivia(t.trivia), value]);\n }\n\n function reference_token(t, context) {\n return token(t, reference, { context });\n }\n\n function name_token(t, arg) {\n return token(t, ts.name, arg);\n }\n\n function type_body(it) {\n if (it.union || it.generic) {\n return ts.wrap([\n token(it.tokens.base, ts.generic),\n token(it.tokens.open),\n ...it.subtype.map(type),\n token(it.tokens.close)\n ]);\n }\n const firstToken = it.tokens.prefix || it.tokens.base;\n const prefix = it.tokens.prefix ? [\n it.tokens.prefix.value,\n ts.trivia(it.tokens.base.trivia)\n ] : [];\n const ref = reference(ts.wrap([\n ...prefix,\n it.tokens.base.value,\n token(it.tokens.postfix)\n ]), { unescaped: it.idlType, context: it });\n return ts.wrap([ts.trivia(firstToken.trivia), ref]);\n }\n function type(it) {\n return ts.wrap([\n extended_attributes(it.extAttrs),\n type_body(it),\n token(it.tokens.nullable),\n token(it.tokens.separator)\n ]);\n }\n function default_(def) {\n if (!def) {\n return \"\";\n }\n return ts.wrap([\n token(def.tokens.assign),\n ...def.expression.map(t => token(t))\n ]);\n }\n function argument(arg) {\n return ts.wrap([\n extended_attributes(arg.extAttrs),\n token(arg.tokens.optional),\n ts.type(type(arg.idlType)),\n token(arg.tokens.variadic),\n name_token(arg.tokens.name, { data: arg }),\n default_(arg.default),\n token(arg.tokens.separator)\n ]);\n }\n function extended_attribute_listitem(str) {\n return ts.wrap([\n token(str.tokens.value),\n token(str.tokens.separator)\n ]);\n }\n function identifier(id, context) {\n return ts.wrap([\n reference_token(id.tokens.value, context),\n token(id.tokens.separator)\n ]);\n }\n function make_ext_at(it) {\n const { rhsType } = it.params;\n return ts.wrap([\n ts.trivia(it.tokens.name.trivia),\n ts.extendedAttribute(ts.wrap([\n ts.extendedAttributeReference(it.name),\n token(it.params.tokens.assign),\n reference_token(it.params.tokens.secondaryName, it),\n token(it.params.tokens.open),\n ...!it.params.list ? [] :\n it.params.list.map(\n rhsType === \"identifier-list\" ? id => identifier(id, it) :\n rhsType && rhsType.endsWith(\"-list\") ? extended_attribute_listitem :\n argument\n ),\n token(it.params.tokens.close)\n ])),\n token(it.tokens.separator)\n ]);\n }\n function extended_attributes(eats) {\n if (!eats.length) return \"\";\n return ts.wrap([\n token(eats.tokens.open),\n ...eats.map(make_ext_at),\n token(eats.tokens.close)\n ]);\n }\n\n function operation(it, parent) {\n const body = it.idlType ? [\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.open),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.close),\n ] : [];\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n it.tokens.name ? token(it.tokens.special) : token(it.tokens.special, ts.nameless, { data: it, parent }),\n ...body,\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function attribute(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.special),\n token(it.tokens.readonly),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function constructor(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base, ts.nameless, { data: it, parent }),\n token(it.tokens.open),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function inheritance(inh) {\n if (!inh.tokens.inheritance) {\n return \"\";\n }\n return ts.wrap([\n token(inh.tokens.colon),\n ts.trivia(inh.tokens.inheritance.trivia),\n ts.inheritance(reference(inh.tokens.inheritance.value, { context: inh }))\n ]);\n }\n\n function container(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.callback),\n token(it.tokens.partial),\n token(it.tokens.base),\n token(it.tokens.mixin),\n name_token(it.tokens.name, { data: it }),\n inheritance(it),\n token(it.tokens.open),\n iterate(it.members, it),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it });\n }\n\n function field(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.required),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n default_(it.default),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function const_(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.assign),\n token(it.tokens.value),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function typedef(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function includes(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n reference_token(it.tokens.target, it),\n token(it.tokens.includes),\n reference_token(it.tokens.mixin, it),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function callback(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.assign),\n ts.type(type(it.idlType)),\n token(it.tokens.open),\n ...it.arguments.map(argument),\n token(it.tokens.close),\n token(it.tokens.termination),\n ]), { data: it });\n }\n function enum_(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.open),\n iterate(it.values, it),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function enum_value(v, parent) {\n return ts.wrap([\n ts.trivia(v.tokens.value.trivia),\n ts.definition(\n ts.wrap(['\"', ts.name(v.value, { data: v, parent }), '\"']),\n { data: v, parent }\n ),\n token(v.tokens.separator)\n ]);\n }\n function iterable_like(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.readonly),\n token(it.tokens.async),\n token(it.tokens.base, ts.generic),\n token(it.tokens.open),\n ts.wrap(it.idlType.map(type)),\n token(it.tokens.close),\n token(it.tokens.argsOpen),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.argsClose),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function eof(it) {\n return ts.trivia(it.trivia);\n }\n\n const table = {\n interface: container,\n \"interface mixin\": container,\n namespace: container,\n operation,\n attribute,\n constructor,\n dictionary: container,\n field,\n const: const_,\n typedef,\n includes,\n callback,\n enum: enum_,\n \"enum-value\": enum_value,\n iterable: iterable_like,\n maplike: iterable_like,\n setlike: iterable_like,\n \"callback interface\": container,\n eof\n };\n function dispatch(it, parent) {\n const dispatcher = table[it.type];\n if (!dispatcher) {\n throw new Error(`Type \"${it.type}\" is unsupported`);\n }\n return table[it.type](it, parent);\n }\n function iterate(things, parent) {\n if (!things) return;\n const results = things.map(thing => dispatch(thing, parent));\n return ts.wrap(results);\n }\n return iterate(ast);\n}\n","\"use strict\";\n\nimport { validationError as error } from \"./error.js\";\n\nfunction getMixinMap(all, unique) {\n const map = new Map();\n const includes = all.filter(def => def.type === \"includes\");\n for (const include of includes) {\n const mixin = unique.get(include.includes);\n if (!mixin) {\n continue;\n }\n const array = map.get(include.target);\n if (array) {\n array.push(mixin);\n } else {\n map.set(include.target, [mixin]);\n }\n }\n return map;\n}\n\n/**\n * @typedef {ReturnType<typeof groupDefinitions>} Definitions\n */\nfunction groupDefinitions(all) {\n const unique = new Map();\n const duplicates = new Set();\n const partials = new Map();\n for (const def of all) {\n if (def.partial) {\n const array = partials.get(def.name);\n if (array) {\n array.push(def);\n } else {\n partials.set(def.name, [def]);\n }\n continue;\n }\n if (!def.name) {\n continue;\n }\n if (!unique.has(def.name)) {\n unique.set(def.name, def);\n } else {\n duplicates.add(def);\n }\n }\n return {\n all,\n unique,\n partials,\n duplicates,\n mixinMap: getMixinMap(all, unique),\n cache: {\n typedefIncludesDictionary: new WeakMap(),\n dictionaryIncludesRequiredField: new WeakMap()\n },\n };\n}\n\nfunction* checkDuplicatedNames({ unique, duplicates }) {\n for (const dup of duplicates) {\n const { name } = dup;\n const message = `The name \"${name}\" of type \"${unique.get(name).type}\" was already seen`;\n yield error(dup.tokens.name, dup, \"no-duplicate\", message);\n }\n}\n\nfunction* validateIterable(ast) {\n const defs = groupDefinitions(ast);\n for (const def of defs.all) {\n if (def.validate) {\n yield* def.validate(defs);\n }\n }\n yield* checkDuplicatedNames(defs);\n}\n\n// Remove this once all of our support targets expose `.flat()` by default\nfunction flatten(array) {\n if (array.flat) {\n return array.flat();\n }\n return [].concat(...array);\n}\n\n/**\n * @param {*} ast AST or array of ASTs\n */\nexport function validate(ast) {\n return [...validateIterable(flatten(ast))];\n}\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/* global define */\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.respec-modal .close-button {\n position: absolute;\n z-index: inherit;\n padding: 0.2em;\n font-weight: bold;\n cursor: pointer;\n margin-left: 5px;\n border: none;\n background: transparent;\n}\n\n#respec-ui {\n position: fixed;\n display: flex;\n flex-direction: row-reverse;\n top: 20px;\n right: 20px;\n width: 202px;\n text-align: right;\n z-index: 9000;\n}\n\n#respec-pill,\n.respec-info-button {\n background: #fff;\n height: 2.5em;\n color: rgb(120, 120, 120);\n border: 1px solid #ccc;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n}\n\n.respec-info-button {\n border: none;\n opacity: 0.75;\n border-radius: 2em;\n margin-right: 1em;\n min-width: 3.5em;\n}\n\n.respec-info-button:focus,\n.respec-info-button:hover {\n opacity: 1;\n transition: opacity 0.2s;\n}\n\n#respec-pill:disabled {\n font-size: 2.8px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(40, 40, 40, 0.2);\n border-right: 1.1em solid rgba(40, 40, 40, 0.2);\n border-bottom: 1.1em solid rgba(40, 40, 40, 0.2);\n border-left: 1.1em solid #ffffff;\n transform: translateZ(0);\n animation: respec-spin 0.5s infinite linear;\n box-shadow: none;\n}\n\n#respec-pill:disabled,\n#respec-pill:disabled:after {\n border-radius: 50%;\n width: 10em;\n height: 10em;\n}\n\n@keyframes respec-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.respec-hidden {\n visibility: hidden;\n opacity: 0;\n transition: visibility 0s 0.2s, opacity 0.2s linear;\n}\n\n.respec-visible {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.2s linear;\n}\n\n#respec-pill:hover,\n#respec-pill:focus {\n color: rgb(0, 0, 0);\n background-color: rgb(245, 245, 245);\n transition: color 0.2s;\n}\n\n#respec-menu {\n position: absolute;\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n background: #fff;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n width: 200px;\n display: none;\n text-align: left;\n margin-top: 32px;\n font-size: 0.8em;\n}\n\n#respec-menu:not([hidden]) {\n display: block;\n}\n\n#respec-menu li {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n.respec-save-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(47%, 2fr));\n grid-gap: 0.5cm;\n padding: 0.5cm;\n}\n\n.respec-save-button:link {\n padding-top: 16px;\n color: rgb(240, 240, 240);\n background: rgb(42, 90, 168);\n justify-self: stretch;\n height: 1cm;\n text-decoration: none;\n text-align: center;\n font-size: inherit;\n border: none;\n border-radius: 0.2cm;\n}\n\n.respec-save-button:link:hover {\n color: white;\n background: rgb(42, 90, 168);\n padding: 0;\n margin: 0;\n border: 0;\n padding-top: 16px;\n}\n\n.respec-save-button:link:focus {\n background: #193766;\n}\n\n#respec-ui button:focus,\n#respec-pill:focus,\n.respec-option:focus {\n outline: 0;\n outline-style: none;\n}\n\n#respec-pill-error {\n background-color: red;\n color: white;\n}\n\n#respec-pill-warning {\n background-color: orange;\n color: white;\n}\n\n.respec-warning-list,\n.respec-error-list {\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: sans-serif;\n background-color: rgb(255, 251, 230);\n font-size: 0.85em;\n}\n\n.respec-warning-list > li,\n.respec-error-list > li {\n padding: 0.4em 0.7em;\n}\n\n.respec-warning-list > li::before {\n content: \"⚠️\";\n padding-right: 0.5em;\n}\n.respec-warning-list p,\n.respec-error-list p {\n padding: 0;\n margin: 0;\n}\n\n.respec-warning-list li {\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 245, 194);\n}\n\n.respec-error-list,\n.respec-error-list li {\n background-color: rgb(255, 240, 240);\n}\n\n.respec-error-list li::before {\n content: \"💥\";\n padding-right: 0.5em;\n}\n\n.respec-error-list li {\n padding: 0.4em 0.7em;\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 215, 215);\n}\n\n.respec-error-list li > p {\n margin: 0;\n padding: 0;\n display: inline-block;\n}\n\n.respec-error-list li > p:first-child,\n.respec-warning-list li > p:first-child {\n display: inline;\n}\n\n.respec-warning-list > li li,\n.respec-error-list > li li {\n margin: 0;\n list-style: disc;\n}\n\n#respec-overlay {\n display: block;\n position: fixed;\n z-index: 10000;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n background: #000;\n}\n\n.respec-show-overlay {\n transition: opacity 0.2s linear;\n opacity: 0.5;\n}\n\n.respec-hide-overlay {\n transition: opacity 0.2s linear;\n opacity: 0;\n}\n\n.respec-modal {\n display: block;\n position: fixed;\n z-index: 11000;\n margin: auto;\n top: 10%;\n background: #fff;\n border: 5px solid #666;\n min-width: 20%;\n width: 79%;\n padding: 0;\n max-height: 80%;\n overflow-y: auto;\n margin: 0 -0.5cm;\n}\n\n@media screen and (min-width: 78em) {\n .respec-modal {\n width: 62%;\n }\n}\n\n.respec-modal h3 {\n margin: 0;\n padding: 0.2em;\n text-align: center;\n color: black;\n background: linear-gradient(\n to bottom,\n rgba(238, 238, 238, 1) 0%,\n rgba(238, 238, 238, 1) 50%,\n rgba(204, 204, 204, 1) 100%\n );\n font-size: 1em;\n}\n\n.respec-modal .inside div p {\n padding-left: 1cm;\n}\n\n#respec-menu button.respec-option {\n background: white;\n padding: 0 0.2cm;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n padding: 1.2em 1.2em;\n}\n\n#respec-menu button.respec-option:hover,\n#respec-menu button:focus {\n background-color: #eeeeee;\n}\n\n.respec-cmd-icon {\n padding-right: 0.5em;\n}\n\n#respec-ui button.respec-option:last-child {\n border: none;\n border-radius: inherit;\n}\n\n.respec-button-copy-paste {\n position: absolute;\n height: 28px;\n width: 40px;\n cursor: pointer;\n background-image: linear-gradient(#fcfcfc, #eee);\n border: 1px solid rgb(144, 184, 222);\n border-left: 0;\n border-radius: 0px 0px 3px 0;\n -webkit-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n top: 0;\n left: 127px;\n}\n\n@media print {\n #respec-ui {\n display: none;\n }\n}\n\n.respec-iframe {\n width: 100%;\n min-height: 550px;\n height: 100%;\n overflow: hidden;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n.respec-iframe:not(.ready) {\n background: url(\"https://respec.org/xref/loader.gif\") no-repeat center;\n}\n\n.respec-iframe + a[href] {\n font-size: 0.9rem;\n float: right;\n margin: 0 0.5em 0.5em;\n border-bottom-width: 1px;\n}\n`;\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport css from \"../styles/ui.css.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @module w3c/group\n *\n * `group` is a shorthand configuration option for specifying `wg`, `wgId`,\n * `wgURI`, and `wgPatentURI` options.\n */\n\nimport {\n fetchAndCache,\n joinAnd,\n showError,\n showWarning,\n} from \"../core/utils.js\";\n\nexport const name = \"w3c/group\";\n\nconst W3C_GROUPS_API = \"https://respec.org/w3c/groups/\";\nconst LEGACY_OPTIONS = [\"wg\", \"wgURI\", \"wgId\", \"wgPatentURI\", \"wgPatentPolicy\"];\n\nexport async function run(conf) {\n const usedLegacyOptions = LEGACY_OPTIONS.filter(opt => conf[opt]);\n\n if (!conf.group) {\n if (usedLegacyOptions.length) {\n const outdatedOptionsStr = joinAnd(LEGACY_OPTIONS, s => `\\`${s}\\``);\n const msg = `Configuration options ${outdatedOptionsStr} are deprecated.`;\n const hint = `Please use the [\\`group\\`](https://respec.org/docs/#group) option instead.`;\n showWarning(msg, name, { hint });\n }\n return;\n }\n\n if (usedLegacyOptions.length) {\n const outdatedOptionsStr = joinAnd(usedLegacyOptions, s => `\\`${s}\\``);\n const msg = `Configuration options ${outdatedOptionsStr} are superseded by \\`group\\` and will be overridden by ReSpec.`;\n const hint = \"Please remove them from `respecConfig`.\";\n showWarning(msg, name, { hint });\n }\n\n const { group } = conf;\n const groupDetails = Array.isArray(group)\n ? await getMultipleGroupDetails(group)\n : await getGroupDetails(group);\n Object.assign(conf, groupDetails);\n}\n\n/** @param {string[]} groups */\nasync function getMultipleGroupDetails(groups) {\n const details = await Promise.all(groups.map(getGroupDetails));\n /** @type {{ [key in keyof GroupDetails]: GroupDetails[key][] }} */\n const result = {\n wg: [],\n wgId: [],\n wgURI: [],\n wgPatentURI: [],\n wgPatentPolicy: [],\n groupType: [],\n };\n for (const groupDetails of details.filter(o => o)) {\n for (const key of Object.keys(result)) {\n result[key].push(groupDetails[key]);\n }\n }\n return result;\n}\n\n/**\n * @param {string} group\n * @typedef {{ wgId: number, wg: string, wgURI: string, wgPatentURI: string, wgPatentPolicy: string, groupType: W3CGroupType }} GroupDetails\n * @returns {Promise<GroupDetails|undefined>}\n */\nasync function getGroupDetails(group) {\n let type = \"\";\n let shortname = group;\n if (group.includes(\"/\")) {\n [type, shortname] = group.split(\"/\", 2);\n }\n const url = new URL(`${shortname}/${type}`, W3C_GROUPS_API);\n const res = await fetchAndCache(url.href);\n if (res.ok) {\n const json = await res.json();\n const {\n id: wgId,\n name: wg,\n URI: wgURI,\n patentURI: wgPatentURI,\n patentPolicy: wgPatentPolicy,\n type: groupType,\n } = json;\n return { wg, wgId, wgURI, wgPatentURI, wgPatentPolicy, groupType };\n }\n\n const text = await res.text();\n const message = `Failed to fetch group details (HTTP: ${res.status}). ${text}`;\n const hint =\n res.status === 404\n ? \"See [supported group names](https://respec.org/w3c/groups/) to use with the \" +\n \"[`group`](https://respec.org/docs/#group) configuration option.\"\n : undefined;\n showError(message, name, { hint });\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-link\";\n\n/**\n * @param {object} link\n * @param {string} link.key\n * @param {string} [link.class]\n * @param {LinkData[]} [link.data]\n */\nexport default function showLink(link) {\n if (!link.key) {\n const msg =\n \"Found a link without `key` attribute in the configuration. See dev console.\";\n showWarning(msg, name);\n console.warn(msg, link);\n return;\n }\n return html`\n <dt class=\"${link.class ? link.class : null}\">${link.key}</dt>\n ${link.data ? link.data.map(showLinkData) : showLinkData(link)}\n `;\n}\n\n/**\n * @typedef {object} LinkData\n * @property {string} [LinkData.class]\n * @property {string} [LinkData.href]\n * @property {string} [LinkData.value]\n * @param {LinkData} data\n */\nfunction showLinkData(data) {\n return html`<dd class=\"${data.class ? data.class : null}\">\n ${data.href\n ? html`<a href=\"${data.href}\">${data.value || data.href}</a>`\n : data.value}\n </dd>`;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-logo\";\n\n/**\n * @param {object} logo\n * @param {string} logo.src\n * @param {string} logo.url\n * @param {string} logo.alt\n * @param {string} [logo.id]\n * @param {number} [logo.width]\n * @param {number} [logo.height]\n */\nexport default function showLogo(logo) {\n /** @type {HTMLAnchorElement} */\n const a = html`<a href=\"${logo.url || \"\"}\" class=\"logo\"></a>`;\n if (!logo.alt) {\n const msg = \"Found spec logo without an `alt` attribute.\";\n showWarning(msg, name, { elements: [a] });\n }\n /** @type {HTMLImageElement} */\n const img = html`<img\n id=\"${logo.id}\"\n alt=\"${logo.alt}\"\n width=\"${logo.width}\"\n height=\"${logo.height}\"\n />`;\n // avoid triggering 404 requests from dynamically generated\n // hyperHTML attribute values\n img.src = logo.src;\n a.append(img);\n return a;\n}\n","// @ts-check\nimport { humanDate, showError, toShortIsoDate } from \"../../core/utils.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst name = \"core/templates/show-people\";\n\nconst localizationStrings = {\n en: {\n until(date) {\n return html` Until ${date} `;\n },\n },\n es: {\n until(date) {\n return html` Hasta ${date} `;\n },\n },\n ko: {\n until(date) {\n return html` ${date} 이전 `;\n },\n },\n ja: {\n until(date) {\n return html` ${date} 以前 `;\n },\n },\n de: {\n until(date) {\n return html` bis ${date} `;\n },\n },\n zh: {\n until(date) {\n return html` 直到 ${date} `;\n },\n },\n};\n\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nconst orcidIcon = html`<svg\n width=\"16\"\n height=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n>\n <style>\n .st1 {\n fill: #fff;\n }\n </style>\n <path\n d=\"M256 128c0 70.7-57.3 128-128 128S0 198.7 0 128 57.3 0 128 0s128 57.3 128 128z\"\n fill=\"#a6ce39\"\n />\n <path\n class=\"st1\"\n d=\"M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z\"\n />\n</svg>`;\n\n/**\n * @typedef {object} Person\n * @property {string} [Person.name]\n * @property {string} [Person.company]\n * @property {string|number} [Person.w3cid]\n * @property {string} [Person.mailto]\n * @property {string} [Person.url]\n * @property {string} [Person.orcid]\n * @property {string} [Person.company]\n * @property {string} [Person.companyURL]\n * @property {string} [Person.note]\n * @property {string} [Person.retiredDate]\n * @property {PersonExtras} [Person.extras]\n *\n * @typedef {object} PersonExtras\n * @property {string} PersonExtras.name\n * @property {string} [PersonExtras.class]\n * @property {string} [PersonExtras.href]\n *\n * @param {Person[]} persons\n */\nexport default function showPeople(persons = []) {\n const l10n = localizationStrings[lang];\n return persons.map(getItem);\n\n function getItem(p) {\n const personName = [p.name]; // treated as opt-in HTML by hyperHTML\n const company = [p.company];\n const editorid = p.w3cid ? parseInt(p.w3cid, 10) : null;\n /** @type {HTMLElement} */\n const dd = html`<dd\n class=\"p-author h-card vcard\"\n data-editor-id=\"${editorid}\"\n ></dd>`;\n const span = document.createDocumentFragment();\n const contents = [];\n if (p.mailto) {\n contents.push(html`<a\n class=\"ed_mailto u-email email p-name\"\n href=\"${`mailto:${p.mailto}`}\"\n >${personName}</a\n >`);\n } else if (p.url) {\n contents.push(\n html`<a class=\"u-url url p-name fn\" href=\"${p.url}\">${personName}</a>`\n );\n } else {\n contents.push(html`<span class=\"p-name fn\">${personName}</span>`);\n }\n if (p.orcid) {\n contents.push(\n html`<a class=\"p-name orcid\" href=\"${p.orcid}\"\n >${orcidIcon.cloneNode(true)}\n </a>`\n );\n }\n if (p.company) {\n if (p.companyURL) {\n contents.push(\n html`\n (<a class=\"p-org org h-org h-card\" href=\"${p.companyURL}\"\n >${company}</a\n >)\n `\n );\n } else {\n contents.push(html` (${company}) `);\n }\n }\n if (p.note) contents.push(document.createTextNode(` (${p.note})`));\n if (p.extras) {\n const results = p.extras\n // Remove empty names\n .filter(extra => extra.name && extra.name.trim())\n // Convert to HTML\n .map(getExtra);\n for (const result of results) {\n contents.push(document.createTextNode(\", \"), result);\n }\n }\n if (p.retiredDate) {\n const retiredDate = new Date(p.retiredDate);\n const isValidDate = retiredDate.toString() !== \"Invalid Date\";\n const timeElem = document.createElement(\"time\");\n timeElem.textContent = isValidDate\n ? humanDate(retiredDate)\n : \"Invalid Date\"; // todo: Localise invalid date\n if (!isValidDate) {\n const msg = \"The date is invalid. The expected format is YYYY-MM-DD.\";\n const title = \"Invalid date\";\n showError(msg, name, { title, elements: [timeElem] });\n }\n timeElem.dateTime = toShortIsoDate(retiredDate);\n contents.push(html` - ${l10n.until(timeElem)} `);\n }\n\n // @ts-ignore: hyperhtml types only support Element but we use a DocumentFragment here\n html.bind(span)`${contents}`;\n dd.appendChild(span);\n return dd;\n }\n\n function getExtra(extra) {\n const span = html`<span class=\"${extra.class || null}\"></span>`;\n let textContainer = span;\n if (extra.href) {\n textContainer = html`<a href=\"${extra.href}\"></a>`;\n span.appendChild(textContainer);\n }\n textContainer.textContent = extra.name;\n return span;\n }\n}\n","// @ts-check\nimport { getIntlData, humanDate, showWarning } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nconst name = \"w3c/templates/headers\";\n\nconst ccLicense = \"https://creativecommons.org/licenses/by/4.0/legalcode\";\nconst w3cLicense = \"https://www.w3.org/Consortium/Legal/copyright-documents\";\nconst legalDisclaimer =\n \"https://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer\";\nconst w3cTrademark =\n \"https://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks\";\n\nconst localizationStrings = {\n en: {\n author: \"Author:\",\n authors: \"Authors:\",\n editor: \"Editor:\",\n editors: \"Editors:\",\n former_editor: \"Former editor:\",\n former_editors: \"Former editors:\",\n latest_editors_draft: \"Latest editor's draft:\",\n latest_published_version: \"Latest published version:\",\n edited_in_place: \"edited in place\",\n this_version: \"This version:\",\n test_suite: \"Test suite:\",\n implementation_report: \"Implementation report:\",\n prev_editor_draft: \"Previous editor's draft:\",\n prev_version: \"Previous version:\",\n prev_recommendation: \"Previous Recommendation:\",\n latest_recommendation: \"Latest Recommendation:\",\n },\n ko: {\n author: \"저자:\",\n authors: \"저자:\",\n editor: \"편집자:\",\n editors: \"편집자:\",\n former_editor: \"이전 편집자:\",\n former_editors: \"이전 편집자:\",\n latest_editors_draft: \"최신 편집 초안:\",\n latest_published_version: \"최신 버전:\",\n this_version: \"현재 버전:\",\n },\n zh: {\n author: \"作者:\",\n authors: \"作者:\",\n editor: \"编辑:\",\n editors: \"编辑:\",\n former_editor: \"原编辑:\",\n former_editors: \"原编辑:\",\n latest_editors_draft: \"最新编辑草稿:\",\n latest_published_version: \"最新发布版本:\",\n this_version: \"本版本:\",\n test_suite: \"测试套件:\",\n implementation_report: \"实现报告:\",\n prev_editor_draft: \"上一版编辑草稿:\",\n prev_version: \"上一版:\",\n prev_recommendation: \"上一版正式推荐标准:\",\n latest_recommendation: \"最新发布的正式推荐标准:\",\n },\n ja: {\n author: \"著者:\",\n authors: \"著者:\",\n editor: \"編者:\",\n editors: \"編者:\",\n former_editor: \"以前の版の編者:\",\n former_editors: \"以前の版の編者:\",\n latest_editors_draft: \"最新の編集用草案:\",\n latest_published_version: \"最新バージョン:\",\n this_version: \"このバージョン:\",\n test_suite: \"テストスイート:\",\n implementation_report: \"実装レポート:\",\n },\n nl: {\n author: \"Auteur:\",\n authors: \"Auteurs:\",\n editor: \"Redacteur:\",\n editors: \"Redacteurs:\",\n latest_editors_draft: \"Laatste werkversie:\",\n latest_published_version: \"Laatst gepubliceerde versie:\",\n this_version: \"Deze versie:\",\n },\n es: {\n author: \"Autor:\",\n authors: \"Autores:\",\n editor: \"Editor:\",\n editors: \"Editores:\",\n latest_editors_draft: \"Borrador de editor mas reciente:\",\n latest_published_version: \"Versión publicada mas reciente:\",\n this_version: \"Ésta versión:\",\n },\n de: {\n author: \"Autor/in:\",\n authors: \"Autor/innen:\",\n editor: \"Redaktion:\",\n editors: \"Redaktion:\",\n former_editor: \"Frühere Mitwirkende:\",\n former_editors: \"Frühere Mitwirkende:\",\n latest_editors_draft: \"Letzter Entwurf:\",\n latest_published_version: \"Letzte publizierte Fassung:\",\n this_version: \"Diese Fassung:\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nfunction getSpecSubTitleElem(conf) {\n let specSubTitleElem = document.querySelector(\"h2#subtitle\");\n\n if (specSubTitleElem && specSubTitleElem.parentElement) {\n specSubTitleElem.remove();\n conf.subtitle = specSubTitleElem.textContent.trim();\n } else if (conf.subtitle) {\n specSubTitleElem = document.createElement(\"h2\");\n specSubTitleElem.textContent = conf.subtitle;\n specSubTitleElem.id = \"subtitle\";\n }\n if (specSubTitleElem) {\n specSubTitleElem.classList.add(\"subtitle\");\n }\n return specSubTitleElem;\n}\n\nexport default (conf, options) => {\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${document.querySelector(\"h1#title\")}\n ${getSpecSubTitleElem(conf)}\n <h2>\n ${conf.prependW3C ? \"W3C \" : \"\"}${conf.isCR\n ? `${conf.longStatus}`\n : `${conf.textStatus}`}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >${conf.modificationDate\n ? html`, ${l10n.edited_in_place}${\" \"}\n ${inPlaceModificationDate(conf.modificationDate)}`\n : \"\"}\n </h2>\n <dl>\n ${!conf.isNoTrack\n ? html`\n <dt>${l10n.this_version}</dt>\n <dd>\n <a class=\"u-url\" href=\"${conf.thisVersion}\"\n >${conf.thisVersion}</a\n >\n </dd>\n <dt>${l10n.latest_published_version}</dt>\n <dd>\n ${conf.latestVersion\n ? html`<a href=\"${conf.latestVersion}\"\n >${conf.latestVersion}</a\n >`\n : \"none\"}\n </dd>\n `\n : \"\"}\n ${conf.edDraftURI\n ? html`\n <dt>${l10n.latest_editors_draft}</dt>\n <dd><a href=\"${conf.edDraftURI}\">${conf.edDraftURI}</a></dd>\n `\n : \"\"}\n ${conf.testSuiteURI\n ? html`\n <dt>${l10n.test_suite}</dt>\n <dd><a href=\"${conf.testSuiteURI}\">${conf.testSuiteURI}</a></dd>\n `\n : \"\"}\n ${conf.implementationReportURI\n ? html`\n <dt>${l10n.implementation_report}</dt>\n <dd>\n <a href=\"${conf.implementationReportURI}\"\n >${conf.implementationReportURI}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.isED && conf.prevED\n ? html`\n <dt>${l10n.prev_editor_draft}</dt>\n <dd><a href=\"${conf.prevED}\">${conf.prevED}</a></dd>\n `\n : \"\"}\n ${conf.showPreviousVersion\n ? html`\n <dt>${l10n.prev_version}</dt>\n <dd><a href=\"${conf.prevVersion}\">${conf.prevVersion}</a></dd>\n `\n : \"\"}\n ${!conf.prevRecURI\n ? \"\"\n : conf.isRec\n ? html`\n <dt>${l10n.prev_recommendation}</dt>\n <dd><a href=\"${conf.prevRecURI}\">${conf.prevRecURI}</a></dd>\n `\n : html`\n <dt>${l10n.latest_recommendation}</dt>\n <dd><a href=\"${conf.prevRecURI}\">${conf.prevRecURI}</a></dd>\n `}\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${conf.errata\n ? html`<p>\n Please check the\n <a href=\"${conf.errata}\"><strong>errata</strong></a> for any errors or\n issues reported since publication.\n </p>`\n : \"\"}\n ${conf.isRec\n ? html`<p>\n See also\n <a\n href=\"${`http://www.w3.org/2003/03/Translations/byTechnology?technology=${conf.shortName}`}\"\n >\n <strong>translations</strong></a\n >.\n </p>`\n : \"\"}\n ${conf.alternateFormats\n ? html`<p>\n ${options.multipleAlternates\n ? \"This document is also available in these non-normative formats:\"\n : \"This document is also available in this non-normative format:\"}\n ${options.alternatesHTML}\n </p>`\n : \"\"}\n ${renderCopyright(conf)}\n <hr title=\"Separator for header\" />\n </div>`;\n};\n\n/**\n * @param {string} date document in-place edit date as YYYY-MM-DD\n * @returns {HTMLTimeElement}\n */\nfunction inPlaceModificationDate(date) {\n const modificationHumanDate = humanDate(new Date(date));\n return html`<time class=\"dt-modified\" datetime=\"${date}\"\n >${modificationHumanDate}</time\n >`;\n}\n\n/**\n * @param {string} text\n * @param {string} url\n * @param {string=} cssClass\n */\nfunction linkLicense(text, url, cssClass) {\n return html`<a rel=\"license\" href=\"${url}\" class=\"${cssClass}\">${text}</a>`;\n}\n\nfunction renderCopyright(conf) {\n // If there is already a copyright, let's relocate it.\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n return existingCopyright;\n }\n if (conf.hasOwnProperty(\"overrideCopyright\")) {\n const msg = \"The `overrideCopyright` configuration option is deprecated.\";\n const hint =\n 'Please add a `<p class=\"copyright\">` element directly to your document instead';\n showWarning(msg, name, { hint });\n return html`${[conf.overrideCopyright]}`;\n }\n if (conf.isUnofficial && conf.licenseInfo) {\n return html`<p class=\"copyright\">\n This document is licensed under a\n ${linkLicense(conf.licenseInfo.name, conf.licenseInfo.url, \"subfoot\")}\n (${conf.licenseInfo.short}).\n </p>`;\n }\n return renderOfficialCopyright(conf);\n}\n\nfunction renderOfficialCopyright(conf) {\n return html`<p class=\"copyright\">\n <a href=\"https://www.w3.org/Consortium/Legal/ipr-notice#Copyright\"\n >Copyright</a\n >\n ©\n ${conf.copyrightStart ? `${conf.copyrightStart}-` : \"\"}${conf.publishYear}\n ${conf.additionalCopyrightHolders\n ? html` ${[conf.additionalCopyrightHolders]} & `\n : \"\"}\n <a href=\"https://www.w3.org/\"\n ><abbr title=\"World Wide Web Consortium\">W3C</abbr></a\n ><sup>®</sup> (<a href=\"https://www.csail.mit.edu/\"\n ><abbr title=\"Massachusetts Institute of Technology\">MIT</abbr></a\n >,\n <a href=\"https://www.ercim.eu/\"\n ><abbr\n title=\"European Research Consortium for Informatics and Mathematics\"\n >ERCIM</abbr\n ></a\n >, <a href=\"https://www.keio.ac.jp/\">Keio</a>,\n <a href=\"https://ev.buaa.edu.cn/\">Beihang</a>). ${noteIfDualLicense(conf)}\n W3C <a href=\"${legalDisclaimer}\">liability</a>,\n <a href=\"${w3cTrademark}\">trademark</a> and ${linkDocumentUse(conf)} rules\n apply.\n </p>`;\n}\n\nfunction noteIfDualLicense(conf) {\n if (!conf.isCCBY) {\n return;\n }\n return html`\n Some Rights Reserved: this document is dual-licensed,\n ${linkLicense(\"CC-BY\", ccLicense)} and\n ${linkLicense(\"W3C Document License\", w3cLicense)}.\n `;\n}\n\nfunction linkDocumentUse(conf) {\n if (conf.isCCBY) {\n return linkLicense(\n \"document use\",\n \"https://www.w3.org/Consortium/Legal/2013/copyright-documents-dual.html\"\n );\n }\n if (conf.isW3CSoftAndDocLicense) {\n return linkLicense(\n \"permissive document license\",\n \"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\"\n );\n }\n return linkLicense(\"document use\", w3cLicense);\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { l10n } from \"./headers.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nexport default (conf, options) => {\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n }\n\n const specTitleElem = document.querySelector(\"h1#title\");\n const specTitleElemClone = specTitleElem.cloneNode(true);\n\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${specTitleElem}\n ${conf.subtitle ? html`<h2 id=\"subtitle\">${conf.subtitle}</h2>` : \"\"}\n <h2>\n ${conf.longStatus}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >\n </h2>\n <dl>\n ${conf.thisVersion\n ? html`\n <dt>${l10n.this_version}</dt>\n <dd>\n <a class=\"u-url\" href=\"${conf.thisVersion}\"\n >${conf.thisVersion}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.latestVersion\n ? html`\n <dt>${l10n.latest_published_version}</dt>\n <dd>\n <a href=\"${conf.latestVersion}\">${conf.latestVersion}</a>\n </dd>\n `\n : \"\"}\n ${conf.edDraftURI\n ? html`\n <dt>${l10n.latest_editors_draft}</dt>\n <dd><a href=\"${conf.edDraftURI}\">${conf.edDraftURI}</a></dd>\n `\n : \"\"}\n ${conf.testSuiteURI\n ? html`\n <dt>Test suite:</dt>\n <dd><a href=\"${conf.testSuiteURI}\">${conf.testSuiteURI}</a></dd>\n `\n : \"\"}\n ${conf.implementationReportURI\n ? html`\n <dt>Implementation report:</dt>\n <dd>\n <a href=\"${conf.implementationReportURI}\"\n >${conf.implementationReportURI}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.prevVersion\n ? html`\n <dt>Previous version:</dt>\n <dd><a href=\"${conf.prevVersion}\">${conf.prevVersion}</a></dd>\n `\n : \"\"}\n ${!conf.isCGFinal\n ? html`\n ${conf.prevED\n ? html`\n <dt>Previous editor's draft:</dt>\n <dd><a href=\"${conf.prevED}\">${conf.prevED}</a></dd>\n `\n : \"\"}\n `\n : \"\"}\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${conf.alternateFormats\n ? html`<p>\n ${options.multipleAlternates\n ? \"This document is also available in these non-normative formats:\"\n : \"This document is also available in this non-normative format:\"}\n ${options.alternatesHTML}\n </p>`\n : \"\"}\n ${existingCopyright\n ? existingCopyright\n : html`<p class=\"copyright\">\n <a href=\"https://www.w3.org/Consortium/Legal/ipr-notice#Copyright\"\n >Copyright</a\n >\n ©\n ${conf.copyrightStart\n ? `${conf.copyrightStart}-`\n : \"\"}${conf.publishYear}\n ${conf.additionalCopyrightHolders\n ? html` ${[conf.additionalCopyrightHolders]} & `\n : \"\"}\n the Contributors to the ${specTitleElemClone.childNodes}\n Specification, published by the\n <a href=\"${conf.wgURI}\">${conf.wg}</a> under the\n ${conf.isCGFinal\n ? html`\n <a href=\"https://www.w3.org/community/about/agreements/fsa/\"\n >W3C Community Final Specification Agreement (FSA)</a\n >. A human-readable\n <a\n href=\"https://www.w3.org/community/about/agreements/fsa-deed/\"\n >summary</a\n >\n is available.\n `\n : html`\n <a href=\"https://www.w3.org/community/about/agreements/cla/\"\n >W3C Community Contributor License Agreement (CLA)</a\n >. A human-readable\n <a\n href=\"https://www.w3.org/community/about/agreements/cla-deed/\"\n >summary</a\n >\n is available.\n `}\n </p>`}\n <hr title=\"Separator for header\" />\n </div>`;\n};\n","// @ts-check\nimport { getIntlData } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst localizationStrings = {\n en: {\n sotd: \"Status of This Document\",\n },\n ko: {\n sotd: \"현재 문서의 상태\",\n },\n zh: {\n sotd: \"关于本文档\",\n },\n ja: {\n sotd: \"この文書の位置付け\",\n },\n nl: {\n sotd: \"Status van dit document\",\n },\n es: {\n sotd: \"Estado de este Document\",\n },\n de: {\n sotd: \"Status dieses Dokuments\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nexport default (conf, opts) => {\n return html`\n <h2>${l10n.sotd}</h2>\n ${conf.isPreview ? renderPreview(conf) : \"\"}\n ${conf.isUnofficial\n ? renderIsUnofficial(opts)\n : conf.isTagFinding\n ? opts.additionalContent\n : conf.isNoTrack\n ? renderIsNoTrack(conf, opts)\n : html`\n <p><em>${conf.l10n.status_at_publication}</em></p>\n ${conf.isSubmission\n ? noteForSubmission(conf, opts)\n : html`\n ${!conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${!conf.overrideStatus\n ? html`\n ${linkToWorkingGroup(conf)} ${linkToCommunity(conf, opts)}\n `\n : \"\"}\n ${conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${conf.isRec ? renderIsRec(conf) : renderNotRec(conf)}\n ${renderDeliverer(conf)}\n <p>\n This document is governed by the\n <a\n id=\"w3c_process_revision\"\n href=\"https://www.w3.org/2020/Process-20200915/\"\n >15 September 2020 W3C Process Document</a\n >.\n </p>\n ${conf.addPatentNote\n ? html`<p>${[conf.addPatentNote]}</p>`\n : \"\"}\n `}\n `}\n ${opts.additionalSections}\n `;\n};\n\nexport function renderPreview(conf) {\n const { prUrl, prNumber, edDraftURI } = conf;\n return html`<details class=\"annoying-warning\" open=\"\">\n <summary>\n This is a\n preview${prUrl && prNumber\n ? html`\n of pull request\n <a href=\"${prUrl}\">#${prNumber}</a>\n `\n : \"\"}\n </summary>\n <p>\n Do not attempt to implement this version of the specification. Do not\n reference this version as authoritative in any way.\n ${edDraftURI\n ? html`\n Instead, see\n <a href=\"${edDraftURI}\">${edDraftURI}</a> for the Editor's draft.\n `\n : \"\"}\n </p>\n </details>`;\n}\n\nfunction renderIsUnofficial(opts) {\n const { additionalContent } = opts;\n return html`\n <p>\n This document is a draft of a potential specification. It has no official\n standing of any kind and does not represent the support or consensus of\n any standards organization.\n </p>\n ${additionalContent}\n `;\n}\n\nfunction renderIsNoTrack(conf, opts) {\n const { isMO } = conf;\n const { additionalContent } = opts;\n return html`\n <p>\n This document is merely a W3C-internal\n ${isMO ? \"member-confidential\" : \"\"} document. It has no official standing\n of any kind and does not represent consensus of the W3C Membership.\n </p>\n ${additionalContent}\n `;\n}\n\nfunction renderNotRec(conf) {\n let statusExplanation = \"\";\n let updatePolicy = html`This is a draft document and may be updated, replaced\n or obsoleted by other documents at any time. It is inappropriate to cite this\n document as other than work in progress.\n ${conf.updateableRec\n ? html`Future updates to this specification may incorporate\n <a href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}`;\n let reviewPolicy = \"\";\n if (conf.specStatus === \"CRD\") {\n statusExplanation =\n \"A Candidate Recommendation Draft integrates changes from the previous Candidate Recommendation that the Working Group intends to include in a subsequent Candidate Recommendation Snapshot.\";\n if (conf.pubMode === \"LS\") {\n updatePolicy =\n \"This document is maintained and updated at any time. Some parts of this document are work in progress. \";\n }\n } else if (conf.specStatus === \"CR\") {\n statusExplanation = html`A Candidate Recommendation Snapshot has received\n <a href=\"https://www.w3.org/2020/Process-20200915/#dfn-wide-review\"\n >wide review</a\n >\n and is intended to gather\n <a href=\"${conf.implementationReportURI}\">implementation experience</a>.`;\n updatePolicy = html`${conf.updateableRec\n ? html`Future updates to this specification may incorporate\n <a href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}`;\n if (conf.pubMode === \"LS\") {\n reviewPolicy = `Comments are welcome at any time but most especially before ${conf.humanCREnd}.`;\n } else {\n reviewPolicy = `This Candidate Recommendation is not expected to advance to Proposed Recommendation any earlier than ${conf.humanCREnd}.`;\n }\n } else if (conf.isPR) {\n reviewPolicy = html` The W3C Membership and other interested parties are\n invited to review the document and send comments through\n ${conf.humanPREnd}. Advisory Committee Representatives should consult\n their\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >. Note that substantive technical comments were expected during the\n Candidate Recommendation review period that ended ${conf.humanCREnd}.`;\n } else if (conf.isPER) {\n reviewPolicy = html` W3C Advisory Committee Members are invited to send\n formal review comments on this Proposed Edited Recommendation to the W3C\n Team until ${conf.humanPEREnd}. Members of the Advisory Committee will\n find the appropriate review form for this document by consulting their\n list of current\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >.`;\n }\n return html`<p>\n Publication as ${conf.anOrA} ${conf.textStatus} does not imply endorsement\n by the W3C Membership. ${statusExplanation}\n </p>\n ${updatePolicy ? html`<p>${updatePolicy}</p>` : \"\"}\n <p>${reviewPolicy}</p>`;\n}\n\nfunction renderIsRec({\n updateableRec,\n revisionTypes = [],\n humanRevisedRecEnd,\n}) {\n let reviewTarget = \"\";\n if (revisionTypes.includes(\"addition\")) {\n reviewTarget = \"additions\";\n }\n if (revisionTypes.includes(\"correction\") && !reviewTarget) {\n reviewTarget = \"corrections\";\n }\n return html`<p>\n A W3C Recommendation is a specification that, after extensive\n consensus-building, has received the endorsement of the W3C and its\n Members. W3C recommends the wide deployment of this specification as a\n standard for the Web.\n ${updateableRec\n ? html`Future updates to this Recommendation may incorporate\n <a\n href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}\n </p>\n ${revisionTypes.includes(\"addition\")\n ? html`<p class=\"addition\">\n Proposed additions are marked in the document.\n </p>`\n : \"\"}\n ${revisionTypes.includes(\"correction\")\n ? html`<p class=\"correction\">\n Proposed corrections are marked in the document.\n </p>`\n : \"\"}\n ${reviewTarget\n ? html`<p>\n The W3C Membership and other interested parties are invited to review\n the proposed ${reviewTarget} and send comments through\n ${humanRevisedRecEnd}. Advisory Committee Representatives should\n consult their\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >.\n </p>`\n : \"\"} `;\n}\n\nfunction renderDeliverer(conf) {\n const {\n isNote,\n wgId,\n isIGNote,\n multipleWGs,\n recNotExpected,\n wgPatentHTML,\n wgPatentURI,\n charterDisclosureURI,\n wgPatentPolicy,\n } = conf;\n\n const patentPolicyURL =\n wgPatentPolicy === \"PP2017\"\n ? \"https://www.w3.org/Consortium/Patent-Policy-20170801/\"\n : \"https://www.w3.org/Consortium/Patent-Policy/\";\n\n const producers = !isIGNote\n ? html`\n This document was produced by ${multipleWGs ? \"groups\" : \"a group\"}\n operating under the\n <a href=\"${patentPolicyURL}\"\n >${wgPatentPolicy === \"PP2017\" ? \"1 August 2017 \" : \"\"}W3C Patent\n Policy</a\n >.\n `\n : \"\";\n const wontBeRec = recNotExpected\n ? \"The group does not expect this document to become a W3C Recommendation.\"\n : \"\";\n return html`<p data-deliverer=\"${isNote || isIGNote ? wgId : null}\">\n ${producers} ${wontBeRec}\n ${!isNote && !isIGNote\n ? html`\n ${multipleWGs\n ? html` W3C maintains ${wgPatentHTML} `\n : html`\n W3C maintains a\n <a href=\"${[wgPatentURI]}\" rel=\"disclosure\"\n >public list of any patent disclosures</a\n >\n `}\n made in connection with the deliverables of\n ${multipleWGs\n ? \"each group; these pages also include\"\n : \"the group; that page also includes\"}\n instructions for disclosing a patent. An individual who has actual\n knowledge of a patent which the individual believes contains\n <a href=\"${patentPolicyURL}#def-essential\">Essential Claim(s)</a>\n must disclose the information in accordance with\n <a href=\"${patentPolicyURL}#sec-Disclosure\"\n >section 6 of the W3C Patent Policy</a\n >.\n `\n : \"\"}\n ${isIGNote\n ? html`\n The disclosure obligations of the Participants of this group are\n described in the\n <a href=\"${charterDisclosureURI}\">charter</a>.\n `\n : \"\"}\n </p>`;\n}\n\nfunction noteForSubmission(conf, opts) {\n return html`\n ${opts.additionalContent}\n ${conf.isMemberSubmission\n ? noteForMemberSubmission(conf)\n : conf.isTeamSubmission\n ? noteForTeamSubmission(conf, opts)\n : \"\"}\n `;\n}\n\nfunction noteForMemberSubmission(conf) {\n const teamComment = `https://www.w3.org/Submission/${conf.publishDate.getUTCFullYear()}/${\n conf.submissionCommentNumber\n }/Comment/`;\n\n const patentPolicyURL =\n conf.wgPatentPolicy === \"PP2017\"\n ? \"https://www.w3.org/Consortium/Patent-Policy-20170801/\"\n : \"https://www.w3.org/Consortium/Patent-Policy/\";\n\n return html`<p>\n By publishing this document, W3C acknowledges that the\n <a href=\"${conf.thisVersion}\">Submitting Members</a> have made a formal\n Submission request to W3C for discussion. Publication of this document by\n W3C indicates no endorsement of its content by W3C, nor that W3C has, is, or\n will be allocating any resources to the issues addressed by it. This\n document is not the product of a chartered W3C group, but is published as\n potential input to the\n <a href=\"https://www.w3.org/Consortium/Process\">W3C Process</a>. A\n <a href=\"${teamComment}\">W3C Team Comment</a> has been published in\n conjunction with this Member Submission. Publication of acknowledged Member\n Submissions at the W3C site is one of the benefits of\n <a href=\"https://www.w3.org/Consortium/Prospectus/Joining\">\n W3C Membership</a\n >. Please consult the requirements associated with Member Submissions of\n <a href=\"${patentPolicyURL}#sec-submissions\"\n >section 3.3 of the W3C Patent Policy</a\n >. Please consult the complete\n <a href=\"https://www.w3.org/Submission\"\n >list of acknowledged W3C Member Submissions</a\n >.\n </p>`;\n}\n\nfunction noteForTeamSubmission(conf, opts) {\n return html`\n ${renderPublicList(conf, opts)}\n <p>\n Please consult the complete\n <a href=\"https://www.w3.org/TeamSubmission/\">list of Team Submissions</a>.\n </p>\n `;\n}\n\nexport function renderPublicList(conf, opts) {\n const {\n mailToWGPublicListWithSubject,\n mailToWGPublicListSubscription,\n } = opts;\n const { wgPublicList, subjectPrefix } = conf;\n const archivesURL = `https://lists.w3.org/Archives/Public/${wgPublicList}/`;\n return html`<p>\n If you wish to make comments regarding this document, please send them to\n <a href=\"${mailToWGPublicListWithSubject}\">${wgPublicList}@w3.org</a>\n (<a href=\"${mailToWGPublicListSubscription}\">subscribe</a>,\n <a href=\"${archivesURL}\">archives</a>)${subjectPrefix\n ? html` with <code>${subjectPrefix}</code> at the start of your email's\n subject`\n : \"\"}.\n </p>`;\n}\n\nfunction linkToWorkingGroup(conf) {\n if (!conf.wg) {\n return;\n }\n let proposedChanges = null;\n if (conf.isRec && conf.revisionTypes && conf.revisionTypes.length) {\n if (conf.revisionTypes.includes(\"addition\")) {\n if (conf.revisionTypes.includes(\"correction\")) {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-changes\"\n >proposed changes</a\n >, introducing substantive changes and new features since the previous\n Recommentation.`;\n } else {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-addition\"\n >proposed additions</a\n >, introducing new features since the previous Recommentation.`;\n }\n } else if (conf.revisionTypes.includes(\"correction\")) {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-correction\"\n >proposed corrections</a\n >.`;\n }\n }\n return html`<p>\n This document was published by ${conf.wgHTML} as ${conf.anOrA}\n ${conf.longStatus}. ${proposedChanges}\n ${conf.notYetRec\n ? \"This document is intended to become a W3C Recommendation.\"\n : \"\"}\n </p>`;\n}\n\nexport function linkToCommunity(conf, opts) {\n if (!conf.github && !conf.wgPublicList) {\n return;\n }\n return html`<p>\n ${conf.github\n ? html`\n <a href=\"${conf.issueBase}\">GitHub Issues</a> are preferred for\n discussion of this specification.\n `\n : \"\"}\n ${conf.wgPublicList\n ? html`\n ${conf.github && conf.wgPublicList\n ? \"Alternatively, you can send comments to our mailing list.\"\n : \"Comments regarding this document are welcome.\"}\n Please send them to\n <a href=\"${opts.mailToWGPublicListWithSubject}\"\n >${conf.wgPublicList}@w3.org</a\n >\n (<a href=\"${opts.mailToWGPublicListSubscription}\">subscribe</a>,\n <a\n href=\"${`https://lists.w3.org/Archives/Public/${conf.wgPublicList}/`}\"\n >archives</a\n >)${conf.subjectPrefix\n ? html` with <code>${conf.subjectPrefix}</code> at the start of your\n email's subject`\n : \"\"}.\n `\n : \"\"}\n </p>`;\n}\n","// @ts-check\nimport {\n l10n,\n linkToCommunity,\n renderPreview,\n renderPublicList,\n} from \"./sotd.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nexport default (conf, opts) => {\n return html`\n <h2>${l10n.sotd}</h2>\n ${conf.isPreview ? renderPreview(conf) : \"\"}\n <p>\n This specification was published by the\n <a href=\"${conf.wgURI}\">${conf.wg}</a>. It is not a W3C Standard nor is it\n on the W3C Standards Track.\n ${conf.isCGFinal\n ? html`\n Please note that under the\n <a href=\"https://www.w3.org/community/about/agreements/final/\"\n >W3C Community Final Specification Agreement (FSA)</a\n >\n other conditions apply.\n `\n : html`\n Please note that under the\n <a href=\"https://www.w3.org/community/about/agreements/cla/\"\n >W3C Community Contributor License Agreement (CLA)</a\n >\n there is a limited opt-out and other conditions apply.\n `}\n Learn more about\n <a href=\"https://www.w3.org/community/\"\n >W3C Community and Business Groups</a\n >.\n </p>\n ${!conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${!conf.github && conf.wgPublicList ? renderPublicList(conf, opts) : \"\"}\n ${conf.github ? linkToCommunity(conf, opts) : \"\"}\n ${conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${opts.additionalSections}\n `;\n};\n","// @ts-check\n// Module w3c/headers\n// Generate the headers material based on the provided configuration.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n// - shortName: the small name that is used after /TR/ in published reports (required)\n// - editors: an array of people editing the document (at least one is required). People\n// are defined using:\n// - name: the person's name (required)\n// - url: URI for the person's home page\n// - company: the person's company\n// - companyURL: the URI for the person's company\n// - mailto: the person's email\n// - note: a note on the person (e.g. former editor)\n// - authors: an array of people who are contributing authors of the document.\n// - formerEditors: an array of people that had earlier edited the document but no longer edit.\n// - subtitle: a subtitle for the specification\n// - publishDate: the date to use for the publication, default to document.lastModified, and\n// failing that to now. The format is YYYY-MM-DD or a Date object.\n// - previousPublishDate: the date on which the previous version was published.\n// - previousMaturity: the specStatus of the previous version\n// - errata: the URI of the errata document, if any\n// - alternateFormats: a list of alternate formats for the document, each of which being\n// defined by:\n// - uri: the URI to the alternate\n// - label: a label for the alternate\n// - lang: optional language\n// - type: optional MIME type\n// - logos: a list of logos to use instead of the W3C logo, each of which being defined by:\n// - src: the URI to the logo (target of <img src=>)\n// - alt: alternate text for the image (<img alt=>), defaults to \"Logo\" or \"Logo 1\", \"Logo 2\", ...\n// if src is not specified, this is the text of the \"logo\"\n// - height: optional height of the logo (<img height=>)\n// - width: optional width of the logo (<img width=>)\n// - url: the URI to the organization represented by the logo (target of <a href=>)\n// - id: optional id for the logo, permits custom CSS (wraps logo in <span id=>)\n// - each logo element must specify either src or alt\n// - testSuiteURI: the URI to the test suite, if any\n// - implementationReportURI: the URI to the implementation report, if any\n// - noRecTrack: set to true if this document is not intended to be on the Recommendation track\n// - edDraftURI: the URI of the Editor's Draft for this document, if any. Required if\n// specStatus is set to \"ED\".\n// - additionalCopyrightHolders: a copyright owner in addition to W3C (or the only one if specStatus\n// is unofficial)\n// - overrideCopyright: provides markup to completely override the copyright\n// - copyrightStart: the year from which the copyright starts running\n// - prevED: the URI of the previous Editor's Draft if it has moved\n// - prevRecShortname: the short name of the previous Recommendation, if the name has changed\n// - prevRecURI: the URI of the previous Recommendation if not directly generated from\n// prevRecShortname.\n// - wg: the name of the WG in charge of the document. This may be an array in which case wgURI\n// and wgPatentURI need to be arrays as well, of the same length and in the same order\n// - wgURI: the URI to the group's page, or an array of such\n// - wgPatentURI: the URI to the group's patent information page, or an array of such. NOTE: this\n// is VERY IMPORTANT information to provide and get right, do not just paste this without checking\n// that you're doing it right\n// - wgPublicList: the name of the mailing list where discussion takes place. Note that this cannot\n// be an array as it is assumed that there is a single list to discuss the document, even if it\n// is handled by multiple groups\n// - charterDisclosureURI: used for IGs (when publishing IG-NOTEs) to provide a link to the IPR commitment\n// defined in their charter.\n// - addPatentNote: used to add patent-related information to the SotD, for instance if there's an open\n// PAG on the document.\n// - thisVersion: the URI to the dated current version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - latestVersion: the URI to the latest (undated) version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - prevVersion: the URI to the previous (dated) version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - subjectPrefix: the string that is expected to be used as a subject prefix when posting to the mailing\n// list of the group.\n// - otherLinks: an array of other links that you might want in the header (e.g., link github, twitter, etc).\n// Example of usage: [{key: \"foo\", href:\"https://b\"}, {key: \"bar\", href:\"https://\"}].\n// Allowed values are:\n// - key: the key for the <dt> (e.g., \"Bug Tracker\"). Required.\n// - value: The value that will appear in the <dd> (e.g., \"GitHub\"). Optional.\n// - href: a URL for the value (e.g., \"https://foo.com/issues\"). Optional.\n// - class: a string representing CSS classes. Optional.\n// - license: can be one of the following\n// - \"cc-by\", which is experimentally available in some groups (but likely to be phased out).\n// Note that this is a dual licensing regime.\n// - \"cc0\", an extremely permissive license. It is only recommended if you are working on a document that is\n// intended to be pushed to the WHATWG.\n// - \"w3c-software\", a permissive and attributions license (but GPL-compatible).\n// - \"w3c-software-doc\", (default) the W3C Software and Document License\n// https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\nimport {\n ISODate,\n concatDate,\n docLink,\n htmlJoinAnd,\n showError,\n showWarning,\n} from \"../core/utils.js\";\nimport cgbgHeadersTmpl from \"./templates/cgbg-headers.js\";\nimport cgbgSotdTmpl from \"./templates/cgbg-sotd.js\";\nimport headersTmpl from \"./templates/headers.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { pub } from \"../core/pubsubhub.js\";\nimport sotdTmpl from \"./templates/sotd.js\";\n\nexport const name = \"w3c/headers\";\n\nconst W3CDate = new Intl.DateTimeFormat([\"en-AU\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n});\n\nconst status2maturity = {\n LS: \"WD\",\n LD: \"WD\",\n FPWD: \"WD\",\n LC: \"WD\",\n FPLC: \"WD\",\n \"FPWD-NOTE\": \"NOTE\",\n \"WD-NOTE\": \"WD\",\n \"LC-NOTE\": \"LC\",\n \"IG-NOTE\": \"NOTE\",\n \"WG-NOTE\": \"NOTE\",\n};\n\nconst status2rdf = {\n NOTE: \"w3p:NOTE\",\n WD: \"w3p:WD\",\n LC: \"w3p:LastCall\",\n CR: \"w3p:CR\",\n CRD: \"w3p:CRD\",\n PR: \"w3p:PR\",\n REC: \"w3p:REC\",\n PER: \"w3p:PER\",\n RSCND: \"w3p:RSCND\",\n};\nconst status2text = {\n NOTE: \"Working Group Note\",\n \"WG-NOTE\": \"Working Group Note\",\n \"CG-NOTE\": \"Co-ordination Group Note\",\n \"IG-NOTE\": \"Interest Group Note\",\n \"Member-SUBM\": \"Member Submission\",\n \"Team-SUBM\": \"Team Submission\",\n MO: \"Member-Only Document\",\n ED: \"Editor's Draft\",\n LS: \"Living Standard\",\n LD: \"Living Document\",\n FPWD: \"First Public Working Draft\",\n WD: \"Working Draft\",\n \"FPWD-NOTE\": \"Working Group Note\",\n \"WD-NOTE\": \"Working Draft\",\n \"LC-NOTE\": \"Working Draft\",\n FPLC: \"First Public and Last Call Working Draft\",\n LC: \"Last Call Working Draft\",\n CR: \"Candidate Recommendation\",\n CRD: \"Candidate Recommendation\",\n PR: \"Proposed Recommendation\",\n PER: \"Proposed Edited Recommendation\",\n REC: \"Recommendation\",\n RSCND: \"Rescinded Recommendation\",\n unofficial: \"Unofficial Draft\",\n base: \"Document\",\n finding: \"TAG Finding\",\n \"draft-finding\": \"Draft TAG Finding\",\n \"CG-DRAFT\": \"Draft Community Group Report\",\n \"CG-FINAL\": \"Final Community Group Report\",\n \"BG-DRAFT\": \"Draft Business Group Report\",\n \"BG-FINAL\": \"Final Business Group Report\",\n};\nconst status2long = {\n ...status2text,\n CR: \"Candidate Recommendation Snapshot\",\n CRD: \"Candidate Recommendation Draft\",\n \"FPWD-NOTE\": \"First Public Working Group Note\",\n \"LC-NOTE\": \"Last Call Working Draft\",\n};\nconst maybeRecTrack = [\"FPWD\", \"WD\"];\nconst recTrackStatus = [\"FPLC\", \"LC\", \"CR\", \"CRD\", \"PR\", \"PER\", \"REC\"];\nexport const cgStatus = [\"CG-DRAFT\", \"CG-FINAL\"];\nexport const bgStatus = [\"BG-DRAFT\", \"BG-FINAL\"];\nexport const cgbgStatus = [...cgStatus, ...bgStatus];\nconst noTrackStatus = [\n \"base\",\n ...cgStatus,\n ...bgStatus,\n \"draft-finding\",\n \"finding\",\n \"MO\",\n \"unofficial\",\n];\nconst precededByAn = [\"ED\", \"IG-NOTE\"];\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"w3c-software\",\n {\n name: \"W3C Software Notice and License\",\n short: \"W3C Software\",\n url:\n \"https://www.w3.org/Consortium/Legal/2002/copyright-software-20021231\",\n },\n ],\n [\n \"w3c-software-doc\",\n {\n name: \"W3C Software and Document Notice and License\",\n short: \"W3C Software and Document\",\n url:\n \"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n]);\n\nconst patentPolicies = [\"PP2017\", \"PP2020\"];\n\nconst baseLogo = Object.freeze({\n id: \"\",\n alt: \"\",\n href: \"\",\n src: \"\",\n height: \"48\",\n width: \"72\",\n});\n\n/**\n * @param {*} conf\n * @param {string} prop\n * @param {string | number | Date} fallbackDate\n */\nfunction validateDateAndRecover(conf, prop, fallbackDate = new Date()) {\n const date = conf[prop] ? new Date(conf[prop]) : new Date(fallbackDate);\n // if date is valid\n if (Number.isFinite(date.valueOf())) {\n const formattedDate = ISODate.format(date);\n return new Date(formattedDate);\n }\n const msg =\n `[\\`${prop}\\`](https://github.com/w3c/respec/wiki/${prop}) ` +\n `is not a valid date: \"${conf[prop]}\". Expected format 'YYYY-MM-DD'.`;\n showError(msg, name);\n return new Date(ISODate.format(new Date()));\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = `Missing required configuration: ${docLink(\"specStatus\")}.`;\n const hint = `Please select an appropriate status from ${docLink(\n \"specStatus\"\n )} based on your W3C group. If in doubt, use \\`\"unofficial\"\\`.`;\n showError(msg, name, { hint });\n }\n conf.isUnofficial = conf.specStatus === \"unofficial\";\n if (conf.isUnofficial && !Array.isArray(conf.logos)) {\n conf.logos = [];\n }\n if (conf.isUnofficial) {\n if (conf.license && !licenses.has(conf.license)) {\n const msg = `The ${docLink(\n \"license\"\n )} configuration option has an invalid value: \"\\`${\n conf.license\n }\\`\". Defaulting to \"cc-by\".`;\n const licensesKeys = [...licenses.keys()]\n .map(key => `\\`\"${key}\"\\``)\n .join(\", \");\n const hint = `Please explicitly set ${docLink(\n \"license\"\n )} to one of: ${licensesKeys}.`;\n showError(msg, name, { hint });\n conf.license = \"cc-by\";\n }\n // default it to cc-by\n if (conf.license === undefined) {\n conf.license = \"cc-by\";\n }\n }\n\n conf.isCCBY = conf.license === \"cc-by\";\n conf.isW3CSoftAndDocLicense = conf.license === \"w3c-software-doc\";\n if (!conf.isUnofficial && [\"cc-by\"].includes(conf.license)) {\n const msg = `You cannot use license \"\\`${conf.license}\\`\" with W3C Specs.`;\n const hint = `Please set ${docLink(\n \"license\"\n )} to \"w3c-software-doc\" instead.`;\n showError(msg, name, { hint });\n }\n conf.licenseInfo = licenses.get(conf.license);\n conf.isCGBG = cgbgStatus.includes(conf.specStatus);\n conf.isCGFinal = conf.isCGBG && conf.specStatus.endsWith(\"G-FINAL\");\n conf.isBasic = conf.specStatus === \"base\";\n conf.isRegular = !conf.isCGBG && !conf.isBasic;\n\n if (conf.isRegular && !conf.shortName) {\n const msg = \"Missing required configuration: `shortName`\";\n showError(msg, name);\n }\n if (conf.testSuiteURI) {\n const url = new URL(conf.testSuiteURI, location.href);\n const { host, pathname } = url;\n if (\n host === \"github.com\" &&\n pathname.startsWith(\"/w3c/web-platform-tests/\")\n ) {\n const msg =\n \"Web Platform Tests have moved to a new Github Organization at https://github.com/web-platform-tests. \";\n const hint =\n `Please update your ${docLink(\"testSuiteURI\")} to point to the ` +\n `new tests repository (e.g., https://github.com/web-platform-tests/wpt/tree/master/${conf.shortName} ).`;\n showWarning(msg, name, { hint });\n }\n }\n if (!conf.subtitle) conf.subtitle = \"\";\n conf.publishDate = validateDateAndRecover(\n conf,\n \"publishDate\",\n document.lastModified\n );\n conf.publishYear = conf.publishDate.getUTCFullYear();\n conf.publishHumanDate = W3CDate.format(conf.publishDate);\n conf.isNoTrack = noTrackStatus.includes(conf.specStatus);\n conf.isRecTrack = conf.noRecTrack\n ? false\n : recTrackStatus.concat(maybeRecTrack).includes(conf.specStatus);\n conf.isMemberSubmission = conf.specStatus === \"Member-SUBM\";\n if (conf.isMemberSubmission) {\n const memSubmissionLogo = {\n alt: \"W3C Member Submission\",\n href: \"https://www.w3.org/Submission/\",\n src: \"https://www.w3.org/Icons/member_subm-v.svg\",\n width: \"211\",\n };\n conf.logos.push({ ...baseLogo, ...memSubmissionLogo });\n }\n conf.isTeamSubmission = conf.specStatus === \"Team-SUBM\";\n if (conf.isTeamSubmission) {\n const teamSubmissionLogo = {\n alt: \"W3C Team Submission\",\n href: \"https://www.w3.org/TeamSubmission/\",\n src: \"https://www.w3.org/Icons/team_subm-v.svg\",\n width: \"211\",\n };\n conf.logos.push({ ...baseLogo, ...teamSubmissionLogo });\n }\n conf.isSubmission = conf.isMemberSubmission || conf.isTeamSubmission;\n conf.anOrA = precededByAn.includes(conf.specStatus) ? \"an\" : \"a\";\n conf.isTagFinding =\n conf.specStatus === \"finding\" || conf.specStatus === \"draft-finding\";\n\n if (conf.isRecTrack && !hasGitHubIssuesLink(conf)) {\n const msg = `Rec-track documents must link to Github issues from their head.`;\n const hint = `Please use the [\\`github\\`](https://respec.org/docs/#github) configuration option.`;\n showError(msg, name, { hint });\n }\n if (!conf.edDraftURI) {\n conf.edDraftURI = \"\";\n if (conf.specStatus === \"ED\") {\n const msg = \"Editor's Drafts should set edDraftURI.\";\n showWarning(msg, name);\n }\n }\n conf.maturity = status2maturity[conf.specStatus]\n ? status2maturity[conf.specStatus]\n : conf.specStatus;\n let publishSpace = \"TR\";\n if (conf.specStatus === \"Member-SUBM\") publishSpace = \"Submission\";\n else if (conf.specStatus === \"Team-SUBM\") publishSpace = \"TeamSubmission\";\n if (conf.isRegular)\n conf.thisVersion = `https://www.w3.org/${publishSpace}/${conf.publishDate.getUTCFullYear()}/${\n conf.maturity\n }-${conf.shortName}-${concatDate(conf.publishDate)}/`;\n if (conf.specStatus === \"ED\") conf.thisVersion = conf.edDraftURI;\n const skipLatestVersion =\n conf.specStatus === \"ED\" && conf.latestVersion === null;\n if (conf.isRegular && !skipLatestVersion)\n conf.latestVersion = `https://www.w3.org/${publishSpace}/${conf.shortName}/`;\n if (conf.isTagFinding) {\n conf.latestVersion = `https://www.w3.org/2001/tag/doc/${conf.shortName}`;\n conf.thisVersion = `${conf.latestVersion}-${ISODate.format(\n conf.publishDate\n )}`;\n }\n if (conf.previousPublishDate) {\n if (!conf.previousMaturity && !conf.isTagFinding) {\n const msg = \"`previousPublishDate` is set, but not `previousMaturity`.\";\n showError(msg, name);\n }\n\n conf.previousPublishDate = validateDateAndRecover(\n conf,\n \"previousPublishDate\"\n );\n\n const pmat = status2maturity[conf.previousMaturity]\n ? status2maturity[conf.previousMaturity]\n : conf.previousMaturity;\n if (conf.isTagFinding) {\n conf.prevVersion = `${conf.latestVersion}-${ISODate.format(\n conf.previousPublishDate\n )}`;\n } else if (conf.isCGBG) {\n conf.prevVersion = conf.prevVersion || \"\";\n } else if (conf.isBasic) {\n conf.prevVersion = \"\";\n } else {\n conf.prevVersion = `https://www.w3.org/TR/${conf.previousPublishDate.getUTCFullYear()}/${pmat}-${\n conf.shortName\n }-${concatDate(conf.previousPublishDate)}/`;\n }\n } else {\n if (\n !conf.specStatus.endsWith(\"NOTE\") &&\n conf.specStatus !== \"FPWD\" &&\n conf.specStatus !== \"FPLC\" &&\n conf.specStatus !== \"ED\" &&\n !conf.noRecTrack &&\n !conf.isNoTrack &&\n !conf.isSubmission\n ) {\n const msg = \"Document on track but no previous version.\";\n const hint =\n \"Add [`previousMaturity`](https://respec.org/docs/#previousMaturity) \" +\n \"and [`previousPublishDate`](https://respec.org/docs/#previousPublishDate) to ReSpec's config.\";\n showError(msg, name, { hint });\n }\n if (!conf.prevVersion) conf.prevVersion = \"\";\n }\n if (conf.prevRecShortname && !conf.prevRecURI)\n conf.prevRecURI = `https://www.w3.org/TR/${conf.prevRecShortname}`;\n const peopCheck = function (it) {\n if (!it.name) {\n const msg = \"All authors and editors must have a `name` property.\";\n const hint =\n \"See [Person](https://respec.org/docs/#person) configuration for available options.\";\n\n showError(msg, name, { hint });\n }\n if (it.orcid) {\n try {\n it.orcid = normalizeOrcid(it.orcid);\n } catch (e) {\n const msg = `\"${it.orcid}\" is not an ORCID. ${e.message}`;\n showError(msg, name);\n // A failed orcid link could link to something outside of orcid,\n // which would be misleading.\n delete it.orcid;\n }\n }\n };\n if (!conf.formerEditors) conf.formerEditors = [];\n if (conf.editors) {\n conf.editors.forEach(peopCheck);\n // Move any editors with retiredDate to formerEditors.\n for (let i = 0; i < conf.editors.length; i++) {\n const editor = conf.editors[i];\n if (\"retiredDate\" in editor) {\n conf.formerEditors.push(editor);\n conf.editors.splice(i--, 1);\n }\n }\n }\n if (!conf.editors || conf.editors.length === 0) {\n const msg = \"At least one editor is required\";\n showError(msg, name);\n }\n if (conf.formerEditors.length) {\n conf.formerEditors.forEach(peopCheck);\n }\n if (conf.authors) {\n conf.authors.forEach(peopCheck);\n }\n conf.multipleEditors = conf.editors && conf.editors.length > 1;\n conf.multipleFormerEditors = conf.formerEditors.length > 1;\n conf.multipleAuthors = conf.authors && conf.authors.length > 1;\n (conf.alternateFormats || []).forEach(it => {\n if (!it.uri || !it.label) {\n const msg = \"All alternate formats must have a uri and a label.\";\n showError(msg, name);\n }\n });\n if (conf.copyrightStart && conf.copyrightStart == conf.publishYear)\n conf.copyrightStart = \"\";\n conf.longStatus = status2long[conf.specStatus];\n conf.textStatus = status2text[conf.specStatus];\n if (status2rdf[conf.specStatus]) {\n conf.rdfStatus = status2rdf[conf.specStatus];\n }\n conf.showThisVersion = !conf.isNoTrack || conf.isTagFinding;\n conf.showPreviousVersion =\n conf.specStatus !== \"FPWD\" &&\n conf.specStatus !== \"FPLC\" &&\n conf.specStatus !== \"ED\" &&\n !conf.isNoTrack &&\n !conf.isSubmission;\n if (conf.specStatus.endsWith(\"NOTE\") && !conf.prevVersion)\n conf.showPreviousVersion = false;\n if (conf.isTagFinding)\n conf.showPreviousVersion = conf.previousPublishDate ? true : false;\n conf.notYetRec = conf.isRecTrack && conf.specStatus !== \"REC\";\n conf.isRec = conf.isRecTrack && conf.specStatus === \"REC\";\n if (conf.isRec && !conf.errata) {\n const msg = \"Recommendations must have an errata link.\";\n const hint =\n \"Add an [`errata`](https://respec.org/docs/#errata) URL to your respecConfig.\";\n showError(msg, name, { hint });\n }\n conf.prependW3C = !conf.isUnofficial;\n conf.isED = conf.specStatus === \"ED\";\n conf.isCR = conf.specStatus === \"CR\" || conf.specStatus === \"CRD\";\n conf.isCRDraft = conf.specStatus === \"CRD\";\n conf.isPR = conf.specStatus === \"PR\";\n conf.isPER = conf.specStatus === \"PER\";\n conf.isMO = conf.specStatus === \"MO\";\n conf.isNote = [\"FPWD-NOTE\", \"WG-NOTE\"].includes(conf.specStatus);\n conf.isIGNote = conf.specStatus === \"IG-NOTE\";\n conf.dashDate = ISODate.format(conf.publishDate);\n conf.publishISODate = conf.publishDate.toISOString();\n conf.shortISODate = ISODate.format(conf.publishDate);\n validatePatentPolicies(conf);\n\n if (conf.hasOwnProperty(\"wgPatentURI\") && !Array.isArray(conf.wgPatentURI)) {\n Object.defineProperty(conf, \"wgId\", {\n get() {\n // it's always at \"pp-impl\" + 1\n const urlParts = this.wgPatentURI.split(\"/\");\n const pos = urlParts.findIndex(item => item === \"pp-impl\") + 1;\n return urlParts[pos] || \"\";\n },\n });\n } else {\n conf.wgId = conf.wgId ? conf.wgId : \"\";\n }\n // configuration done - yay!\n\n const options = {\n get multipleAlternates() {\n return conf.alternateFormats && conf.alternateFormats.length > 1;\n },\n get alternatesHTML() {\n return (\n conf.alternateFormats &&\n htmlJoinAnd(conf.alternateFormats, alt => {\n const lang = alt.hasOwnProperty(\"lang\") && alt.lang ? alt.lang : null;\n const type = alt.hasOwnProperty(\"type\") && alt.type ? alt.type : null;\n return html`<a\n rel=\"alternate\"\n href=\"${alt.uri}\"\n hreflang=\"${lang}\"\n type=\"${type}\"\n >${alt.label}</a\n >`;\n })\n );\n },\n };\n\n // insert into document\n const header = (conf.isCGBG ? cgbgHeadersTmpl : headersTmpl)(conf, options);\n document.body.prepend(header);\n document.body.classList.add(\"h-entry\");\n\n // handle SotD\n const sotd =\n document.getElementById(\"sotd\") || document.createElement(\"section\");\n if ((conf.isCGBG || !conf.isNoTrack || conf.isTagFinding) && !sotd.id) {\n const msg =\n \"A custom SotD paragraph is required for your type of document.\";\n showError(msg, name);\n }\n sotd.id = sotd.id || \"sotd\";\n sotd.classList.add(\"introductory\");\n // NOTE:\n // When arrays, wg and wgURI have to be the same length (and in the same order).\n // Technically wgURI could be longer but the rest is ignored.\n // However wgPatentURI can be shorter. This covers the case where multiple groups\n // publish together but some aren't used for patent policy purposes (typically this\n // happens when one is foolish enough to do joint work with the TAG). In such cases,\n // the groups whose patent policy applies need to be listed first, and wgPatentURI\n // can be shorter — but it still needs to be an array.\n const wgPotentialArray = [conf.wg, conf.wgURI, conf.wgPatentURI];\n if (\n wgPotentialArray.some(item => Array.isArray(item)) &&\n !wgPotentialArray.every(item => Array.isArray(item))\n ) {\n const msg =\n \"If one of '`wg`', '`wgURI`', or '`wgPatentURI`' is an array, they all have to be.\";\n showError(msg, name);\n }\n if (conf.isCGBG && !conf.wg) {\n const msg =\n \"[`wg`](https://github.com/w3c/respec/wiki/wg)\" +\n \" configuration option is required for this kind of document.\";\n showError(msg, name);\n }\n if (Array.isArray(conf.wg)) {\n conf.multipleWGs = conf.wg.length > 1;\n conf.wgHTML = htmlJoinAnd(conf.wg, (wg, idx) => {\n return html`the <a href=\"${conf.wgURI[idx]}\">${wg}</a>`;\n });\n const pats = [];\n for (let i = 0, n = conf.wg.length; i < n; i++) {\n pats.push(\n html`a\n <a href=\"${conf.wgPatentURI[i]}\" rel=\"disclosure\"\n >public list of any patent disclosures (${conf.wg[i]})</a\n >`\n );\n }\n conf.wgPatentHTML = htmlJoinAnd(pats);\n } else {\n conf.multipleWGs = false;\n if (conf.wg) {\n conf.wgHTML = html`the <a href=\"${conf.wgURI}\">${conf.wg}</a>`;\n }\n }\n if (conf.specStatus === \"PR\" && !conf.crEnd) {\n const msg =\n '`specStatus` is \"PR\" but no `crEnd` is specified (needed to indicate end of previous CR).';\n showError(msg, name);\n }\n\n if (conf.specStatus === \"CR\" && !conf.crEnd) {\n const msg =\n '`specStatus` is \"CR\", but no `crEnd` is specified in Respec config.';\n showError(msg, name);\n }\n conf.crEnd = validateDateAndRecover(conf, \"crEnd\");\n conf.humanCREnd = W3CDate.format(conf.crEnd);\n\n if (conf.specStatus === \"PR\" && !conf.prEnd) {\n const msg = `\\`specStatus\\` is \"PR\" but no \\`prEnd\\` is specified.`;\n showError(msg, name);\n }\n conf.prEnd = validateDateAndRecover(conf, \"prEnd\");\n conf.humanPREnd = W3CDate.format(conf.prEnd);\n\n if (conf.specStatus === \"PER\" && !conf.perEnd) {\n const msg = \"Status is PER but no perEnd is specified\";\n showError(msg, name);\n }\n conf.perEnd = validateDateAndRecover(conf, \"perEnd\");\n conf.humanPEREnd = W3CDate.format(conf.perEnd);\n\n const revisionTypes = [\"addition\", \"correction\"];\n if (\n conf.specStatus === \"REC\" &&\n conf.revisionTypes &&\n conf.revisionTypes.length > 0\n ) {\n const unknownRevisionType = conf.revisionTypes.find(\n x => !revisionTypes.includes(x)\n );\n if (unknownRevisionType) {\n const msg = `\\`specStatus\\` is \"REC\" with unknown revision type '${unknownRevisionType}'`;\n showError(msg, name);\n }\n if (conf.revisionTypes.includes(\"addition\") && !conf.updateableRec) {\n const msg = `\\`specStatus\\` is \"REC\" with proposed additions but the Rec is not marked as a allowing new features.`;\n showError(msg, name);\n }\n }\n\n if (\n conf.specStatus === \"REC\" &&\n conf.updateableRec &&\n conf.revisionTypes &&\n conf.revisionTypes.length > 0 &&\n !conf.revisedRecEnd\n ) {\n const msg = `\\`specStatus\\` is \"REC\" with proposed corrections or additions but no \\`revisedRecEnd\\` is specified.`;\n showError(msg, name);\n }\n conf.revisedRecEnd = validateDateAndRecover(conf, \"revisedRecEnd\");\n conf.humanRevisedRecEnd = W3CDate.format(conf.revisedRecEnd);\n\n conf.recNotExpected =\n conf.noRecTrack || conf.recNotExpected\n ? true\n : !conf.isRecTrack &&\n conf.maturity == \"WD\" &&\n conf.specStatus !== \"FPWD-NOTE\";\n if (conf.noRecTrack && recTrackStatus.includes(conf.specStatus)) {\n const msg = `Document configured as [\\`noRecTrack\\`](https://github.com/w3c/respec/wiki/noRecTrack), but its status (\"${conf.specStatus}\") puts it on the W3C Rec Track.`;\n const hint = `Status cannot be any of: ${recTrackStatus.join(\", \")}.`;\n showError(msg, name, { hint });\n }\n if (conf.isIGNote && !conf.charterDisclosureURI) {\n const msg =\n \"IG-NOTEs must link to charter's disclosure section using `charterDisclosureURI`.\";\n showError(msg, name);\n }\n if (!sotd.classList.contains(\"override\")) {\n html.bind(sotd)`${populateSoTD(conf, sotd)}`;\n }\n\n if (!conf.implementationReportURI && conf.isCR) {\n const msg =\n \"CR documents must have an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).\";\n showError(msg, name);\n }\n if (!conf.implementationReportURI && conf.isPR) {\n const msg =\n \"PR documents should include an \" +\n \" [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).\";\n showWarning(msg, name);\n }\n\n // Requested by https://github.com/w3c/respec/issues/504\n // Makes a record of a few auto-generated things.\n pub(\"amend-user-config\", {\n publishISODate: conf.publishISODate,\n generatedSubtitle: `${conf.longStatus} ${conf.publishHumanDate}`,\n });\n}\n\nfunction validatePatentPolicies(conf) {\n if (!conf.hasOwnProperty(\"wgPatentPolicy\")) return;\n\n const policies = new Set([].concat(conf.wgPatentPolicy));\n if (\n policies.size &&\n ![...policies].every(policy => patentPolicies.includes(policy))\n ) {\n const msg = `Invalid [\\`wgPatentPolicy\\`](https://respec.org/docs#wgPatentPolicy) value: \"${conf.wgPatentPolicy}\".`;\n const hint = `Please use one of: ${patentPolicies\n .map(p => `\\`${p}\\``)\n .join(\", \")} .`;\n showError(msg, name, { hint });\n }\n if (policies.size !== 1) {\n const msg =\n \"When collaborating across multiple groups, they must use the same patent policy.\";\n const hint = `Please check the patent policies of each group. The patent policies were: ${[\n ...policies,\n ].join(\", \")}.`;\n showError(msg, name, { hint });\n }\n // We take the first policy\n conf.wgPatentPolicy = [...policies][0];\n}\n\n/**\n * @param {*} conf\n * @param {HTMLElement} sotd\n */\nfunction populateSoTD(conf, sotd) {\n const options = {\n ...collectSotdContent(sotd, conf),\n\n get mailToWGPublicList() {\n return `mailto:${conf.wgPublicList}@w3.org`;\n },\n get mailToWGPublicListWithSubject() {\n const fragment = conf.subjectPrefix\n ? `?subject=${encodeURIComponent(conf.subjectPrefix)}`\n : \"\";\n return this.mailToWGPublicList + fragment;\n },\n get mailToWGPublicListSubscription() {\n return `mailto:${conf.wgPublicList}-request@w3.org?subject=subscribe`;\n },\n };\n const template = conf.isCGBG ? cgbgSotdTmpl : sotdTmpl;\n return template(conf, options);\n}\n\n/**\n * @param {HTMLElement} sotd\n */\nfunction collectSotdContent(sotd, { isTagFinding = false }) {\n const sotdClone = sotd.cloneNode(true);\n const additionalContent = document.createDocumentFragment();\n // we collect everything until we hit a section,\n // that becomes the custom content.\n while (sotdClone.hasChildNodes()) {\n if (\n isElement(sotdClone.firstChild) &&\n sotdClone.firstChild.localName === \"section\"\n ) {\n break;\n }\n additionalContent.appendChild(sotdClone.firstChild);\n }\n if (isTagFinding && !additionalContent.hasChildNodes()) {\n const msg = `ReSpec does not support automated SotD generation for TAG findings.`;\n const hint = `Please add the prerequisite content in the 'sotd' section.`;\n showWarning(msg, name, { hint });\n }\n return {\n additionalContent,\n // Whatever sections are left, we throw at the end.\n additionalSections: sotdClone.childNodes,\n };\n}\n\n/**\n * @param {string} orcid Either an ORCID URL or just the 16-digit ID which comes after the /\n * @return {string} the full ORCID URL. Throws an error if the ID is invalid.\n */\nfunction normalizeOrcid(orcid) {\n const orcidUrl = new URL(orcid, \"https://orcid.org/\");\n if (orcidUrl.origin !== \"https://orcid.org\") {\n throw new Error(\n `The origin should be \"https://orcid.org\", not \"${orcidUrl.origin}\".`\n );\n }\n\n // trailing slash would mess up checksum\n const orcidId = orcidUrl.pathname.slice(1).replace(/\\/$/, \"\");\n if (!/^\\d{4}-\\d{4}-\\d{4}-\\d{3}(\\d|X)$/.test(orcidId)) {\n throw new Error(\n `ORCIDs have the format \"1234-1234-1234-1234\", not \"${orcidId}\"`\n );\n }\n\n // calculate checksum as per https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier\n const lastDigit = orcidId[orcidId.length - 1];\n const remainder = orcidId\n .split(\"\")\n .slice(0, -1)\n .filter(c => /\\d/.test(c))\n .map(Number)\n .reduce((acc, c) => (acc + c) * 2, 0);\n const lastDigitInt = (12 - (remainder % 11)) % 11;\n const lastDigitShould = lastDigitInt === 10 ? \"X\" : String(lastDigitInt);\n if (lastDigit !== lastDigitShould) {\n throw new Error(`\"${orcidId}\" has an invalid checksum.`);\n }\n\n return orcidUrl.href;\n}\n\n/**\n * @param {Node} node\n * @return {node is Element}\n */\nfunction isElement(node) {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\nfunction hasGitHubIssuesLink(conf) {\n return (\n conf.github ||\n (conf.otherLinks &&\n conf.otherLinks.find(linkGroup =>\n linkGroup.data.find(\n l =>\n l.href &&\n l.href.toString().match(/^https:\\/\\/github\\.com\\/.*\\/issues/)\n )\n ))\n );\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Linter rule \"wpt-tests-exist\".\n * Warns about nonexistent web platform tests.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { showWarning } from \"../utils.js\";\n\nconst name = \"wpt-tests-exist\";\n\nconst meta = {\n en: {\n description: \"Non-existent Web Platform Tests\",\n howToFix: \"Please fix the tests mentioned.\",\n help: \"See developer console.\",\n },\n};\n\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {Promise<import(\"../LinterRule\").LinterResult>}\n */\nasync function linterFunction(conf, doc) {\n const filesInWPT = await getFilesInWPT(conf.testSuiteURI, conf.githubAPI);\n if (!filesInWPT) {\n return;\n }\n\n const offendingElements = [];\n const offendingTests = new Set();\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = doc.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n for (const elem of testables) {\n const tests = elem.dataset.tests\n .split(/,/gm)\n .map(test => test.trim().split(\"#\")[0])\n .filter(test => test);\n\n const missingTests = tests.filter(test => !filesInWPT.has(test));\n if (missingTests.length) {\n offendingElements.push(elem);\n missingTests.forEach(test => offendingTests.add(test));\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n\n const missingTests = [...offendingTests].map(test => `\\`${test}\\``);\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n description: `${meta[lang].description}: ${missingTests.join(\", \")}.`,\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\n/**\n * @param {string} testSuiteURI\n * @param {string} githubAPIBase\n */\nasync function getFilesInWPT(testSuiteURI, githubAPIBase) {\n let wptDirectory;\n try {\n const testSuiteURL = new URL(testSuiteURI);\n if (\n testSuiteURL.pathname.startsWith(\"/web-platform-tests/wpt/tree/master/\")\n ) {\n const re = /web-platform-tests\\/wpt\\/tree\\/master\\/(.+)/;\n wptDirectory = testSuiteURL.pathname.match(re)[1].replace(/\\//g, \"\");\n } else {\n wptDirectory = testSuiteURL.pathname.replace(/\\//g, \"\");\n }\n } catch (error) {\n const msg = \"Failed to parse WPT directory from testSuiteURI\";\n showWarning(msg, `linter/${name}`);\n console.error(error);\n return null;\n }\n\n const url = new URL(\"web-platform-tests/wpt/files\", `${githubAPIBase}/`);\n url.searchParams.set(\"path\", wptDirectory);\n\n const response = await fetch(url);\n if (!response.ok) {\n const error = await response.text();\n const msg =\n \"Failed to fetch files from WPT repository. \" +\n `Request failed with error: ${error} (${response.status})`;\n showWarning(msg, `linter/${name}`);\n return null;\n }\n /** @type {{ entries: string[] }} */\n const { entries } = await response.json();\n const files = entries.filter(entry => !entry.endsWith(\"/\"));\n return new Set(files);\n}\n","// @ts-check\n/**\n * Sets the defaults for W3C specs\n */\nexport const name = \"w3c/defaults\";\nimport { bgStatus, cgStatus, cgbgStatus } from \"./headers.js\";\nimport { docLink, showError } from \"../core/utils.js\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\nimport { rule as wptTestsExist } from \"../core/linter-rules/wpt-tests-exist.js\";\n\nlinter.register(privsecSectionRule, wptTestsExist);\n\nconst w3cLogo = {\n src: \"https://www.w3.org/StyleSheets/TR/2016/logos/W3C\",\n alt: \"W3C\",\n height: 48,\n width: 72,\n url: \"https://www.w3.org/\",\n};\n\nconst w3cDefaults = {\n lint: {\n \"privsec-section\": true,\n \"wpt-tests-exist\": false,\n },\n doJsonLd: false,\n logos: [],\n xref: true,\n};\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...w3cDefaults.lint,\n ...conf.lint,\n };\n\n if (conf.specStatus && conf.specStatus.toLowerCase() !== \"unofficial\") {\n w3cDefaults.logos.push(w3cLogo);\n if (!conf.hasOwnProperty(\"license\")) {\n w3cDefaults.license = \"w3c-software-doc\";\n }\n }\n\n Object.assign(conf, {\n ...coreDefaults,\n ...w3cDefaults,\n ...conf,\n lint,\n });\n\n if (conf.groupType && conf.specStatus) {\n validateStatusForGroup(conf);\n }\n}\n\nfunction validateStatusForGroup(conf) {\n const { specStatus, groupType } = conf;\n switch (groupType) {\n case \"cg\": {\n if (![...cgbgStatus, \"unofficial\"].includes(specStatus)) {\n const msg = `W3C Community Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please use one of: ${toMDCode(\n cgStatus\n )}. Automatically falling back to \\`\"CG-DRAFT\"\\`.`;\n showError(msg, name, { hint });\n conf.specStatus = \"CG-DRAFT\";\n }\n break;\n }\n case \"bg\": {\n if (![...bgStatus, \"unofficial\"].includes(specStatus)) {\n const msg = `W3C Business Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please use one of: ${toMDCode(\n bgStatus\n )}. Automatically falling back to \\`\"BG-DRAFT\"\\`.`;\n showError(msg, name, { hint });\n conf.specStatus = \"BG-DRAFT\";\n }\n break;\n }\n case \"wg\": {\n if (cgbgStatus.includes(specStatus)) {\n const msg = `W3C Working Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please see ${docLink(\n \"specStatus\"\n )} for appropriate values for this type of group.`;\n showError(msg, name, { hint });\n }\n break;\n }\n }\n}\n\nfunction toMDCode(list) {\n return list.map(item => `\\`\"${item}\"\\``).join(\", \");\n}\n","/* ReSpec specific CSS */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n@keyframes pop {\n 0% {\n transform: scale(1, 1);\n }\n 25% {\n transform: scale(1.25, 1.25);\n opacity: 0.75;\n }\n 100% {\n transform: scale(1, 1);\n }\n}\n\n/* Override code highlighter background */\n.hljs {\n background: transparent !important;\n}\n\n/* --- INLINES --- */\nh1 abbr,\nh2 abbr,\nh3 abbr,\nh4 abbr,\nh5 abbr,\nh6 abbr,\na abbr {\n border: none;\n}\n\ndfn {\n font-weight: bold;\n}\n\na.internalDFN {\n color: inherit;\n border-bottom: 1px solid #99c;\n text-decoration: none;\n}\n\na.externalDFN {\n color: inherit;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\na.bibref {\n text-decoration: none;\n}\n\n.respec-offending-element:target {\n animation: pop 0.25s ease-in-out 0s 1;\n}\n\n.respec-offending-element,\na[href].respec-offending-element {\n text-decoration: red wavy underline;\n}\n@supports not (text-decoration: red wavy underline) {\n .respec-offending-element:not(pre) {\n display: inline-block;\n }\n .respec-offending-element {\n /* Red squiggly line */\n background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=)\n bottom repeat-x;\n }\n}\n\n#references :target {\n background: #eaf3ff;\n animation: pop 0.4s ease-in-out 0s 1;\n}\n\ncite .bibref {\n font-style: normal;\n}\n\ncode {\n color: #c63501;\n}\n\nth code {\n color: inherit;\n}\n\na[href].orcid {\n padding-left: 4px;\n padding-right: 4px;\n}\n\na[href].orcid > svg {\n margin-bottom: -2px;\n}\n\n/* --- TOC --- */\n\n.toc a,\n.tof a {\n text-decoration: none;\n}\n\na .secno,\na .figno {\n color: #000;\n}\n\nul.tof,\nol.tof {\n list-style: none outside none;\n}\n\n.caption {\n margin-top: 0.5em;\n font-style: italic;\n}\n\n/* --- TABLE --- */\n\ntable.simple {\n border-spacing: 0;\n border-collapse: collapse;\n border-bottom: 3px solid #005a9c;\n}\n\n.simple th {\n background: #005a9c;\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th a {\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th[scope=\"row\"] {\n background: inherit;\n color: inherit;\n border-top: 1px solid #ddd;\n}\n\n.simple td {\n padding: 3px 10px;\n border-top: 1px solid #ddd;\n}\n\n.simple tr:nth-child(even) {\n background: #f0f6ff;\n}\n\n/* --- DL --- */\n\n.section dd > p:first-child {\n margin-top: 0;\n}\n\n.section dd > p:last-child {\n margin-bottom: 0;\n}\n\n.section dd {\n margin-bottom: 1em;\n}\n\n.section dl.attrs dd,\n.section dl.eldef dd {\n margin-bottom: 0;\n}\n\n#issue-summary > ul {\n column-count: 2;\n}\n\n#issue-summary li {\n list-style: none;\n display: inline-block;\n}\n\ndetails.respec-tests-details {\n margin-left: 1em;\n display: inline-block;\n vertical-align: top;\n}\n\ndetails.respec-tests-details > * {\n padding-right: 2em;\n}\n\ndetails.respec-tests-details[open] {\n z-index: 999999;\n position: absolute;\n border: thin solid #cad3e2;\n border-radius: 0.3em;\n background-color: white;\n padding-bottom: 0.5em;\n}\n\ndetails.respec-tests-details[open] > summary {\n border-bottom: thin solid #cad3e2;\n padding-left: 1em;\n margin-bottom: 1em;\n line-height: 2em;\n}\n\ndetails.respec-tests-details > ul {\n width: 100%;\n margin-top: -0.3em;\n}\n\ndetails.respec-tests-details > li {\n padding-left: 1em;\n}\n\na[href].self-link:hover {\n opacity: 1;\n text-decoration: none;\n background-color: transparent;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n position: relative;\n}\n\naside.example .marker > a.self-link {\n color: inherit;\n}\n\nh2 > a.self-link,\nh3 > a.self-link,\nh4 > a.self-link,\nh5 > a.self-link,\nh6 > a.self-link {\n border: none;\n color: inherit;\n font-size: 83%;\n height: 2em;\n left: -1.6em;\n opacity: 0.5;\n position: absolute;\n text-align: center;\n text-decoration: none;\n top: 0;\n transition: opacity 0.2s;\n width: 2em;\n}\n\nh2 > a.self-link::before,\nh3 > a.self-link::before,\nh4 > a.self-link::before,\nh5 > a.self-link::before,\nh6 > a.self-link::before {\n content: \"§\";\n display: block;\n}\n\n@media (max-width: 767px) {\n dd {\n margin-left: 0;\n }\n\n /* Don't position self-link in headings off-screen */\n h2 > a.self-link,\n h3 > a.self-link,\n h4 > a.self-link,\n h5 > a.self-link,\n h6 > a.self-link {\n left: auto;\n top: auto;\n }\n}\n\n@media print {\n .removeOnSave {\n display: none;\n }\n}\n`;\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport css from \"../styles/respec.css.js\";\n\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = css;\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport function run(conf) {\n if (conf.noReSpecCSS) {\n styleElement.remove();\n }\n}\n","// @ts-check\n// Module w3c/style\n// Inserts a link to the appropriate W3C style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"w3c/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n if (location.hash) {\n script.addEventListener(\n \"load\",\n () => {\n window.location.href = location.hash;\n },\n { once: true }\n );\n }\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createBaseStyle() {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = \"https://www.w3.org/StyleSheets/TR/2016/base.css\";\n link.classList.add(\"removeOnSave\");\n return link;\n}\n\nfunction selectStyleVersion(styleVersion) {\n let version = \"\";\n switch (styleVersion) {\n case null:\n case true:\n version = \"2016\";\n break;\n default:\n if (styleVersion && !isNaN(styleVersion)) {\n version = styleVersion.toString().trim();\n }\n }\n return version;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C styles and scripts.\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preload\", // all specs include on base.css.\n href: \"https://www.w3.org/StyleSheets/TR/2016/base.css\",\n as: \"style\",\n },\n {\n hint: \"preload\", // all specs show the logo.\n href: \"https://www.w3.org/StyleSheets/TR/2016/logos/W3C\",\n as: \"image\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// Opportunistically apply base style\nelements.appendChild(createBaseStyle());\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\nfunction styleMover(linkURL) {\n return exportDoc => {\n const w3cStyle = exportDoc.querySelector(`head link[href=\"${linkURL}\"]`);\n exportDoc.querySelector(\"head\").append(w3cStyle);\n };\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'base'.\";\n conf.specStatus = \"base\";\n showWarning(msg, name);\n }\n\n let styleFile = \"W3C-\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"CG-DRAFT\":\n case \"CG-FINAL\":\n case \"BG-DRAFT\":\n case \"BG-FINAL\":\n styleFile = conf.specStatus.toLowerCase();\n break;\n case \"FPWD\":\n case \"LC\":\n case \"WD-NOTE\":\n case \"LC-NOTE\":\n styleFile += \"WD\";\n break;\n case \"WG-NOTE\":\n case \"FPWD-NOTE\":\n styleFile += \"WG-NOTE.css\";\n break;\n case \"UNOFFICIAL\":\n styleFile += \"UD\";\n break;\n case \"FINDING\":\n case \"FINDING-DRAFT\":\n case \"BASE\":\n styleFile = \"base.css\";\n break;\n default:\n styleFile += conf.specStatus;\n }\n\n // Select between released styles and experimental style.\n const version = selectStyleVersion(conf.useExperimentalStyles || \"2016\");\n // Attach W3C fixup script after we are done.\n if (version && !conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, version);\n },\n { once: true }\n );\n }\n const finalVersionPath = version ? `${version}/` : \"\";\n const finalStyleURL = `https://www.w3.org/StyleSheets/TR/${finalVersionPath}${styleFile}`;\n linkCSS(document, finalStyleURL);\n // Make sure the W3C stylesheet is the last stylesheet, as required by W3C Pub Rules.\n const moveStyle = styleMover(finalStyleURL);\n sub(\"beforesave\", moveStyle);\n}\n","// @ts-check\n// Module w3c/l10n\n// Looks at the lang attribute on the root element and uses it to manage the config.l10n object so\n// that other parts of the system can localise their text\nimport { html } from \"../core/import-maps.js\";\nimport { l10n } from \"../core/l10n.js\";\nexport const name = \"w3c/l10n\";\nconst additions = {\n en: {\n status_at_publication: html`This section describes the status of this\n document at the time of its publication. Other documents may supersede\n this document. A list of current W3C publications and the latest revision\n of this technical report can be found in the\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> at\n https://www.w3.org/TR/.`,\n },\n ko: {\n status_at_publication: html`이 부분은 현재 문서의 발행 당시 상태에 대해\n 기술합니다. 다른 문서가 이 문서를 대체할 수 있습니다. W3C 발행 문서의 최신\n 목록 및 테크니컬 리포트 최신판을 https://www.w3.org/TR/ 의\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> 에서\n 열람할 수 있습니다.`,\n },\n zh: {\n status_at_publication: html`本章节描述了本文档的发布状态。其它更新版本可能会覆盖本文档。W3C的文档列\n 表和最新版本可通过<a href=\"https://www.w3.org/TR/\">W3C技术报告</a\n >索引访问。`,\n },\n ja: {\n status_at_publication: html`この節には、公開時点でのこの文書の位置づけが記されている。他の文書によって置き換えられる可能性がある。現時点でのW3Cの発行文書とこのテクニカルレポートの最新版は、下記から参照できる。\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a>\n (https://www.w3.org/TR/)`,\n },\n es: {\n status_at_publication: html`Esta sección describe el estado del presente\n documento al momento de su publicación. El presente documento puede ser\n remplazado por otros. Una lista de las publicaciones actuales del W3C y la\n última revisión del presente informe técnico puede hallarse en\n http://www.w3.org/TR/\n <a href=\"https://www.w3.org/TR/\">el índice de informes técnicos</a> del\n W3C.`,\n },\n de: {\n status_at_publication: html`Dieser Abschnitt beschreibt den Status des\n Dokuments zum Zeitpunkt der Publikation. Neuere Dokumente können dieses\n Dokument obsolet machen. Eine Liste der aktuellen Publikatinen des W3C und\n die aktuellste Fassung dieser Spezifikation kann im\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> unter\n https://www.w3.org/TR/ abgerufen werden.`,\n },\n};\n\nObject.keys(additions).forEach(key => {\n if (!l10n[key]) l10n[key] = {};\n Object.assign(l10n[key], additions[key]);\n});\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","/**\n * This module handles the creation of the h1#title of a spec and\n * makes sure the <title> always matches the h1.\n *\n * If no h1#title is included, then the <title> becomes the h1#title.\n *\n * When a h1#title is included, it always takes precedence over the\n * <title> of a spec. An error will be displayed in case of\n * any mismatch.\n *\n */\n\nimport { getIntlData, norm, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/title\";\n\nconst localizationStrings = {\n en: {\n default_title: \"No Title\",\n },\n de: {\n default_title: \"Kein Titel\",\n },\n zh: {\n default_title: \"无标题\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n /** @type {HTMLElement} */\n const h1Elem =\n document.querySelector(\"h1#title\") || html`<h1 id=\"title\"></h1>`;\n\n // check existing element is ok to use\n if (h1Elem.isConnected && h1Elem.textContent.trim() === \"\") {\n const msg =\n \"The document is missing a title, so using a default title. \" +\n \"To fix this, please give your document a `<title>`. \" +\n \"If you need special markup in the document's title, \" +\n 'please use a `<h1 id=\"title\">`.';\n const title = \"Document is missing a title\";\n showError(msg, name, { title, elements: [h1Elem] });\n }\n\n // Decorate the spec title\n if (!h1Elem.id) h1Elem.id = \"title\";\n h1Elem.classList.add(\"title\");\n\n setDocumentTitle(conf, h1Elem);\n\n // This will get relocated by a template later.\n document.body.prepend(h1Elem);\n}\n\nfunction setDocumentTitle(conf, h1Elem) {\n // If the h1 is newly created, it won't be connected. In this case\n // we use the <title> or a localized fallback.\n if (!h1Elem.isConnected) {\n h1Elem.textContent = document.title || `${l10n.default_title}`;\n }\n\n let documentTitle = norm(h1Elem.textContent);\n\n if (conf.isPreview && conf.prNumber) {\n const prUrl = conf.prUrl || `${conf.github.repoURL}pull/${conf.prNumber}`;\n const { childNodes } = html`\n Preview of PR <a href=\"${prUrl}\">#${conf.prNumber}</a>:\n `;\n h1Elem.prepend(...childNodes);\n documentTitle = `Preview of PR #${conf.prNumber}: ${documentTitle}`;\n }\n\n document.title = documentTitle;\n\n // conf.title is deperecated - we are keeping this here just to\n // retain backwards compat as we think the ePub generator\n // relies on it.\n conf.title = documentTitle;\n}\n","/**\n * This module updates the title and shortName\n * of a spec when there is a valid level configuration.\n *\n * Levels should be integers >= 0.\n */\n\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"w3c/level\";\n\nconst localizationStrings = {\n en: {\n level: \"Level\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n if (!conf.hasOwnProperty(\"level\")) return;\n\n const h1Elem = document.querySelector(\"h1#title\");\n\n const level = parseInt(conf.level);\n if (!Number.isInteger(level) || level < 0) {\n const msg = `The \\`level\\` configuration option must be a number greater or equal to 0. It is currently set to \\`${level}\\``;\n const title = \"Invalid level config.\";\n showError(msg, name, { title, elements: [h1Elem] });\n return;\n }\n\n h1Elem.append(` ${l10n.level} ${level}`);\n document.title = `${document.title} ${l10n.level} ${level}`;\n conf.shortName = `${conf.shortName}-${level}`;\n conf.level = level;\n}\n","// @ts-check\n// Module w3c/abstract\n// Handle the abstract section properly.\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"w3c/abstract\";\n\nconst localizationStrings = {\n en: {\n abstract: \"Abstract\",\n },\n ko: {\n abstract: \"요약\",\n },\n zh: {\n abstract: \"摘要\",\n },\n ja: {\n abstract: \"要約\",\n },\n nl: {\n abstract: \"Samenvatting\",\n },\n es: {\n abstract: \"Resumen\",\n },\n de: {\n abstract: \"Zusammenfassung\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run() {\n const abs = document.getElementById(\"abstract\");\n if (!abs) {\n const msg = 'Document must have one element with `id=\"abstract\"`.';\n showError(msg, name);\n return;\n }\n abs.classList.add(\"introductory\");\n let abstractHeading = document.querySelector(\"#abstract>h2\");\n if (abstractHeading) {\n return;\n }\n abstractHeading = document.createElement(\"h2\");\n abstractHeading.textContent = l10n.abstract;\n abs.prepend(abstractHeading);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Module core/data-abbr\n// - Finds all elements with data-abbr attribute and processes them.\nimport { showError } from \"./utils.js\";\nexport const name = \"core/dfn-abbr\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = document.querySelectorAll(\"[data-abbr]\");\n for (const elem of elements) {\n const { localName } = elem;\n switch (localName) {\n case \"dfn\":\n processDfnElement(elem);\n break;\n default: {\n const msg = `\\`data-abbr\\` attribute not supported on \\`${localName}\\` elements.`;\n showError(msg, name, {\n elements: [elem],\n title: \"Error: unsupported.\",\n });\n }\n }\n }\n}\n/**\n * @param {HTMLElement} dfn\n */\nfunction processDfnElement(dfn) {\n const abbr = generateAbbreviation(dfn);\n // get normalized <dfn> textContent to remove spaces, tabs, new lines.\n const fullForm = dfn.textContent.replace(/\\s\\s+/g, \" \").trim();\n dfn.insertAdjacentHTML(\n \"afterend\",\n ` (<abbr title=\"${fullForm}\">${abbr}</abbr>)`\n );\n const lt = dfn.dataset.lt || \"\";\n dfn.dataset.lt = lt\n .split(\"|\")\n .filter(i => i.trim())\n .concat(abbr)\n .join(\"|\");\n}\n\nfunction generateAbbreviation(elem) {\n if (elem.dataset.abbr) return elem.dataset.abbr;\n // Generates abbreviation from textContent\n // e.g., \"Permanent Account Number\" -> \"PAN\"\n return elem.textContent\n .match(/\\b([a-z])/gi)\n .join(\"\")\n .toUpperCase();\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://api.specref.org/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\n/** @param {BiblioData|string} ref */\nfunction stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\n// Module w3c/conformance\n// Handle the conformance section properly.\nimport { getIntlData, htmlJoinAnd, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { renderInlineCitation } from \"../core/render-biblio.js\";\nimport { rfc2119Usage } from \"../core/inlines.js\";\nexport const name = \"w3c/conformance\";\n\nconst localizationStrings = {\n en: {\n conformance: \"Conformance\",\n normativity:\n \"As well as sections marked as non-normative, all authoring guidelines, \" +\n \"diagrams, examples, and notes in this specification are non-normative. \" +\n \"Everything else in this specification is normative.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n The key word${plural ? \"s\" : \"\"} ${keywords} in this document\n ${plural ? \"are\" : \"is\"} to be interpreted as described in\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n when, and only when, they appear in all capitals, as shown here.\n </p>`;\n },\n },\n de: {\n conformance: \"Anforderungen\",\n normativity:\n \"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten \" +\n \"sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument \" +\n \"nicht normativ. Alle anderen Angaben sind normativ.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n ${plural ? \"Die Schlüsselwörter\" : \"Das Schlüsselwort\"} ${keywords} in\n diesem Dokument ${plural ? \"sind\" : \"ist\"} gemäß\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n und unter Berücksichtigung von\n <a href=\"https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst\"\n >2119de</a\n >\n zu interpretieren, wenn und nur wenn ${plural ? \"sie\" : \"es\"} wie hier\n gezeigt durchgehend groß geschrieben wurde${plural ? \"n\" : \"\"}.\n </p>`;\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {Element} conformance\n * @param {*} conf\n */\nfunction processConformance(conformance, conf) {\n const terms = [...Object.keys(rfc2119Usage)];\n // Add RFC2119 to bibliography\n if (terms.length) {\n conf.normativeReferences.add(\"RFC2119\");\n conf.normativeReferences.add(\"RFC8174\");\n }\n // Put in the 2119 clause and reference\n const keywords = htmlJoinAnd(\n terms.sort(),\n item => html`<em class=\"rfc2119\">${item}</em>`\n );\n const plural = terms.length > 1;\n const content = html`\n <h2>${l10n.conformance}</h2>\n <p>${l10n.normativity}</p>\n ${terms.length ? l10n.keywordInterpretation(keywords, plural) : null}\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run(conf) {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance && !conformance.classList.contains(\"override\")) {\n processConformance(conformance, conf);\n }\n // Warn when there are RFC2119/RFC8174 keywords, but not conformance section\n if (!conformance && Object.keys(rfc2119Usage).length) {\n const msg = `Document uses RFC2119 keywords but lacks a conformance section.`;\n const hint = 'Please add a `<section id=\"conformance\">`.';\n showWarning(msg, name, { hint });\n }\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","/* --- EXAMPLES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nspan.example-title {\n text-transform: none;\n}\n\naside.example,\ndiv.example,\ndiv.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\n\ndiv.illegal-example {\n color: red;\n}\n\ndiv.illegal-example p {\n color: black;\n}\n\naside.example,\ndiv.example {\n padding: 0.5em;\n border-left-width: 0.5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: 0.1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example span.example-title {\n color: #999;\n}\n\n.example pre {\n background-color: rgba(0, 0, 0, 0.03);\n}\n`;\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport css from \"../styles/examples.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","/* --- ISSUES/NOTES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.issue-label {\n text-transform: initial;\n}\n\n.warning > p:first-child { margin-top: 0 }\n.warning {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n}\nspan.warning { padding: .1em .5em .15em; }\n\n.issue.closed span.issue-number {\n text-decoration: line-through;\n}\n\n.warning {\n border-color: #f11;\n border-width: .2em;\n border-style: solid;\n background: #fbe9e9;\n}\n\n.warning-title:before{\n content: \"⚠\"; /*U+26A0 WARNING SIGN*/\n font-size: 1.3em;\n float: left;\n padding-right: .3em;\n margin-top: -0.3em;\n}\n\nli.task-list-item {\n list-style: none;\n}\n\ninput.task-list-item-checkbox {\n margin: 0 0.35em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.issue a.respec-gh-label {\n padding: 5px;\n margin: 0 2px 0 2px;\n font-size: 10px;\n text-transform: none;\n text-decoration: none;\n font-weight: bold;\n border-radius: 4px;\n position: relative;\n bottom: 2px;\n border: none;\n display: inline-block;\n}\n`;\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport css from \"../styles/issues-notes.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\nimport { definitionMap, registerDefinition } from \"./dfn-map.js\";\nimport { showError, wrapInner } from \"./utils.js\";\n\nconst topLevelEntities = new Set([\n \"callback interface\",\n \"callback\",\n \"dictionary\",\n \"enum\",\n \"interface mixin\",\n \"interface\",\n \"typedef\",\n]);\n\n/**\n * This function looks for a <dfn> element whose title is 'name' and\n * that is \"for\" 'parent', which is the empty string when 'name'\n * refers to a top-level entity. For top-level entities, <dfn>\n * elements that inherit a non-empty [dfn-for] attribute are also\n * counted as matching.\n *\n * When a matching <dfn> is found, it's given <code> formatting,\n * marked as an IDL definition, and returned. If no <dfn> is found,\n * the function returns 'undefined'.\n * @param {*} defn\n * @param {string} name\n */\nexport function findDfn(defn, name, { parent = \"\" } = {}) {\n switch (defn.type) {\n case \"constructor\":\n case \"operation\":\n return findOperationDfn(defn, parent, name);\n default:\n return findNormalDfn(defn, parent, name);\n }\n}\n\n/**\n * @param {{ type: string, arguments: any[] }} idlAst\n * @param {string} parent\n * @param {string} name\n */\nfunction getAlternativeNames(idlAst, parent, name) {\n const { type } = idlAst;\n const asQualifiedName = `${parent}.${name}`;\n switch (type) {\n case \"constructor\":\n case \"operation\": {\n // Allow linking to \"method()\", method(arg) and \"method\" name.\n const asMethodName = `${name}()`;\n const asFullyQualifiedName = `${asQualifiedName}()`;\n const asMethodWithArgs = generateMethodNamesWithArgs(\n name,\n idlAst.arguments\n );\n return {\n local: [asQualifiedName, asFullyQualifiedName, name],\n exportable: [asMethodName, ...asMethodWithArgs],\n };\n }\n case \"attribute\":\n return {\n local: [asQualifiedName],\n exportable: [name],\n };\n }\n}\n\n/**\n * Generates all possible permutations of a method name based\n * on what arguments they method accepts.\n\n * Required arguments are always present, and optional ones\n * are stacked one by one.\n *\n * For examples: foo(req1, req2), foo(req1, req2, opt1) and so on.\n *\n * @param {String} operationName\n * @param {*} argsAst\n */\nfunction generateMethodNamesWithArgs(operationName, argsAst) {\n const operationNames = [];\n if (argsAst.length === 0) {\n return operationNames;\n }\n const required = []; // required arguments\n const optional = []; // optional arguments, including variadic ones\n for (const { name, optional: isOptional, variadic } of argsAst) {\n if (isOptional || variadic) {\n optional.push(name);\n } else {\n required.push(name);\n }\n }\n const requiredArgs = required.join(\", \");\n const requiredOperation = `${operationName}(${requiredArgs})`;\n operationNames.push(requiredOperation);\n const optionalOps = optional.map((_, index) => {\n const args = [...required, ...optional.slice(0, index + 1)].join(\", \");\n const result = `${operationName}(${args})`;\n return result;\n });\n operationNames.push(...optionalOps);\n return operationNames;\n}\n\n/**\n * @param {*} defn\n * @param {string} parent\n * @param {string} name\n */\nfunction findOperationDfn(defn, parent, name) {\n // Overloads all have unique names\n if (name.includes(\"!overload\")) {\n return findNormalDfn(defn, parent, name);\n }\n const asMethodName = `${name}()`;\n return findNormalDfn(defn, parent, asMethodName, name);\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {Record<\"local\" | \"exportable\", string[]>} names\n */\nfunction addAlternativeNames(dfn, names) {\n const { local, exportable } = names;\n const lt = dfn.dataset.lt ? new Set(dfn.dataset.lt.split(\"|\")) : new Set();\n for (const item of exportable) {\n lt.add(item);\n }\n // Fix any ill-placed ones - local ones don't belong here\n local.filter(item => lt.has(item)).forEach(item => lt.delete(item));\n dfn.dataset.lt = [...lt].join(\"|\");\n dfn.dataset.localLt = local.join(\"|\");\n registerDefinition(dfn, [...local, ...exportable]);\n}\n\n/**\n * @param {*} defn\n * @param {string} parent\n * @param {...string} names\n */\nfunction findNormalDfn(defn, parent, ...names) {\n const { type } = defn;\n for (const name of names) {\n let resolvedName =\n type === \"enum-value\" && name === \"\" ? \"the-empty-string\" : name;\n let dfns = getDfns(resolvedName, parent, name, type);\n // If we haven't found any definitions with explicit [for]\n // and [title], look for a dotted definition, \"parent.name\".\n if (dfns.length === 0 && parent !== \"\") {\n resolvedName = `${parent}.${resolvedName}`;\n const alternativeDfns = definitionMap.get(resolvedName);\n if (alternativeDfns && alternativeDfns.size === 1) {\n dfns = [...alternativeDfns];\n registerDefinition(dfns[0], [resolvedName]);\n }\n } else {\n resolvedName = name;\n }\n if (dfns.length > 1) {\n const msg = `WebIDL identifier \\`${name}\\` ${\n parent ? `for \\`${parent}\\`` : \"\"\n } is defined multiple times`;\n const title = \"Duplicate definition.\";\n showError(msg, name, { title, elements: dfns });\n }\n if (dfns.length) {\n return dfns[0];\n }\n }\n}\n\n/**\n * @param {HTMLElement} dfnElem\n * @param {*} idlAst\n * @param {string} parent\n * @param {string} name\n */\nexport function decorateDfn(dfnElem, idlAst, parent, name) {\n if (!dfnElem.id) {\n const lCaseParent = parent.toLowerCase();\n const middle = lCaseParent ? `${lCaseParent}-` : \"\";\n let last = name.toLowerCase().replace(/[()]/g, \"\").replace(/\\s/g, \"-\");\n if (last === \"\") last = \"the-empty-string\";\n dfnElem.id = `dom-${middle}${last}`;\n }\n dfnElem.dataset.idl = idlAst.type;\n dfnElem.dataset.title = dfnElem.textContent;\n dfnElem.dataset.dfnFor = parent;\n // Derive the data-type for dictionary members, interface attributes,\n // and methods\n switch (idlAst.type) {\n case \"operation\":\n case \"attribute\":\n case \"field\":\n dfnElem.dataset.type = getDataType(idlAst);\n break;\n }\n\n // Mark the definition as code.\n if (\n !dfnElem.querySelector(\"code\") &&\n !dfnElem.closest(\"code\") &&\n dfnElem.children\n ) {\n wrapInner(dfnElem, dfnElem.ownerDocument.createElement(\"code\"));\n }\n\n // Add data-lt and data-local-lt values and register them\n switch (idlAst.type) {\n case \"attribute\":\n case \"constructor\":\n case \"operation\":\n addAlternativeNames(dfnElem, getAlternativeNames(idlAst, parent, name));\n break;\n }\n\n return dfnElem;\n}\n\n/**\n * @param {string} name\n * @param {string} parent data-dfn-for\n * @param {string} originalName\n * @param {string} type\n */\nfunction getDfns(name, parent, originalName, type) {\n const foundDfns = definitionMap.get(name);\n if (!foundDfns || foundDfns.size === 0) {\n return [];\n }\n const dfnForArray = [...foundDfns];\n // Definitions that have a name and [data-dfn-for] that exactly match the\n // IDL entity:\n const dfns = dfnForArray.filter(dfn => {\n // This is explicitly marked as a concept, so we can't use it\n if (dfn.dataset.dfnType === \"dfn\") return false;\n\n /** @type {HTMLElement} */\n const closestDfnFor = dfn.closest(`[data-dfn-for]`);\n return closestDfnFor && closestDfnFor.dataset.dfnFor === parent;\n });\n\n if (dfns.length === 0 && parent === \"\" && dfnForArray.length === 1) {\n // Make sure the name exactly matches\n return dfnForArray[0].textContent === originalName ? dfnForArray : [];\n } else if (topLevelEntities.has(type) && dfnForArray.length) {\n const dfn = dfnForArray.find(\n dfn => dfn.textContent.trim() === originalName\n );\n if (dfn) return [dfn];\n }\n return dfns;\n}\n\n/**\n * @return {string}\n */\nfunction getDataType(idlStruct = {}) {\n const { idlType, generic, union } = idlStruct;\n if (idlType === undefined) return \"\";\n if (typeof idlType === \"string\") return idlType;\n if (generic) return generic;\n // join on \"|\" handles for \"unsigned short\" etc.\n if (union) return idlType.map(getDataType).join(\"|\");\n return getDataType(idlType);\n}\n","// @ts-check\n/**\n * Module core/webidl-clipboard\n *\n * This module adds a button to each IDL pre making it possible to copy\n * well-formatted IDL to the clipboard.\n *\n */\nexport const name = \"core/webidl-clipboard\";\n\nfunction createButton() {\n const copyButton = document.createElement(\"button\");\n copyButton.innerHTML =\n '<svg height=\"16\" viewBox=\"0 0 14 16\" width=\"14\"><path fill-rule=\"evenodd\" d=\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"/></svg>';\n copyButton.title = \"Copy IDL to clipboard\";\n copyButton.classList.add(\"respec-button-copy-paste\", \"removeOnSave\");\n return copyButton;\n}\n\nconst copyButton = createButton();\n\n/**\n * Adds a HTML button that copies WebIDL to the clipboard.\n *\n * @param {HTMLSpanElement} idlHeader\n */\nexport function addCopyIDLButton(idlHeader) {\n // There may be multiple <span>s of IDL, so we take everything\n // apart from the idl header.\n const pre = idlHeader.closest(\"pre.idl\");\n const idl = pre.cloneNode(true);\n idl.querySelector(\".idlHeader\").remove();\n const { textContent: idlText } = idl;\n const button = copyButton.cloneNode(true);\n button.addEventListener(\"click\", () => {\n navigator.clipboard.writeText(idlText);\n });\n idlHeader.append(button);\n}\n","/* --- WEB IDL --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\npre.idl {\n padding: 1em;\n position: relative;\n}\n\npre.idl > code {\n color: black;\n}\n\n@media print {\n pre.idl {\n white-space: pre-wrap;\n }\n}\n\n.idlHeader {\n display: block;\n width: 150px;\n background: #8ccbf2;\n color: #fff;\n font-family: sans-serif;\n font-weight: bold;\n margin: -1em 0 1em -1em;\n height: 28px;\n line-height: 28px;\n}\n\n.idlHeader a.self-link {\n margin-left: .3cm;\n text-decoration: none;\n border-bottom: none;\n}\n\n.idlID {\n font-weight: bold;\n color: #005a9c;\n}\n\n.idlType {\n color: #005a9c;\n}\n\n.idlName {\n color: #ff4500;\n}\n\n.idlName a {\n color: #ff4500;\n border-bottom: 1px dotted #ff4500;\n text-decoration: none;\n}\n\na.idlEnumItem {\n color: #000;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\n.idlSuperclass {\n font-style: italic;\n color: #005a9c;\n}\n\n\n/*.idlParam*/\n\n.idlParamName,\n.idlDefaultValue {\n font-style: italic;\n}\n\n.extAttr {\n color: #666;\n}\n\n\n/*.idlSectionComment*/\n\n.idlSectionComment {\n color: gray;\n}\n\n.idlIncludes a {\n font-weight: bold;\n}\n\n.respec-button-copy-paste:focus {\n text-decoration: none;\n border-color: #51a7e8;\n outline: none;\n box-shadow: 0 0 5px rgba(81, 167, 232, 0.5);\n}\n\n.respec-button-copy-paste:focus:hover,\n.respec-button-copy-paste.selected:focus {\n border-color: #51a7e8;\n}\n\n.respec-button-copy-paste:hover,\n.respec-button-copy-paste:active,\n.respec-button-copy-paste.zeroclipboard-is-hover,\n.respec-button-copy-paste.zeroclipboard-is-active {\n text-decoration: none;\n background-color: #ddd;\n background-image: linear-gradient(#eee, #ddd);\n border-color: #ccc;\n}\n\n.respec-button-copy-paste:active,\n.respec-button-copy-paste.selected,\n.respec-button-copy-paste.zeroclipboard-is-active {\n background-color: #dcdcdc;\n background-image: none;\n border-color: #b5b5b5;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15)\n}\n\n.respec-button-copy-paste.selected:hover {\n background-color: #cfcfcf;\n}\n\n.respec-button-copy-paste:disabled,\n.respec-button-copy-paste:disabled:hover,\n.respec-button-copy-paste.disabled,\n.respec-button-copy-paste.disabled:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n border-color: rgba(197, 197, 197, 0.5);\n box-shadow: none;\n}\n\n@media print {\n .respec-button-copy-paste {\n visibility: hidden;\n }\n}\n`;\n","// Module core/webidl\n// Highlights and links WebIDL marked up inside <pre class=\"idl\">.\n\n// TODO:\n// - It could be useful to report parsed IDL items as events\n// - don't use generated content in the CSS!\nimport {\n addHashId,\n showError,\n showWarning,\n wrapInner,\n xmlEscape,\n} from \"./utils.js\";\nimport { decorateDfn, findDfn } from \"./dfn-finder.js\";\nimport { html, webidl2 } from \"./import-maps.js\";\nimport { addCopyIDLButton } from \"./webidl-clipboard.js\";\nimport css from \"../styles/webidl.css.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/webidl\";\nconst pluginName = name;\n\nconst operationNames = {};\nconst idlPartials = {};\n\nconst templates = {\n wrap(items) {\n return items\n .flat()\n .filter(x => x !== \"\")\n .map(x => (typeof x === \"string\" ? new Text(x) : x));\n },\n trivia(t) {\n if (!t.trim()) {\n return t;\n }\n return html`<span class=\"idlSectionComment\">${t}</span>`;\n },\n generic(keyword) {\n // Shepherd classifies \"interfaces\" as starting with capital letters,\n // like Promise, FrozenArray, etc.\n return /^[A-Z]/.test(keyword)\n ? html`<a data-xref-type=\"interface\" data-cite=\"WebIDL\">${keyword}</a>`\n : // Other keywords like sequence, maplike, etc...\n html`<a data-xref-type=\"dfn\" data-cite=\"WebIDL\">${keyword}</a>`;\n },\n reference(wrapped, unescaped, context) {\n if (context.type === \"extended-attribute\" && context.name !== \"Exposed\") {\n return wrapped;\n }\n let type = \"_IDL_\";\n let cite = null;\n let lt;\n switch (unescaped) {\n case \"Window\":\n type = \"interface\";\n cite = \"HTML\";\n break;\n case \"object\":\n type = \"interface\";\n cite = \"WebIDL\";\n break;\n default: {\n const isWorkerType = unescaped.includes(\"Worker\");\n if (isWorkerType && context.type === \"extended-attribute\") {\n lt = `${unescaped}GlobalScope`;\n type = \"interface\";\n cite = [\"Worker\", \"DedicatedWorker\", \"SharedWorker\"].includes(\n unescaped\n )\n ? \"HTML\"\n : null;\n }\n }\n }\n return html`<a data-xref-type=\"${type}\" data-cite=\"${cite}\" data-lt=\"${lt}\"\n >${wrapped}</a\n >`;\n },\n name(escaped, { data, parent }) {\n if (data.idlType && data.idlType.type === \"argument-type\") {\n return html`<span class=\"idlParamName\">${escaped}</span>`;\n }\n const idlLink = defineIdlName(escaped, data, parent);\n if (data.type !== \"enum-value\") {\n const className = parent ? \"idlName\" : \"idlID\";\n idlLink.classList.add(className);\n }\n return idlLink;\n },\n nameless(escaped, { data, parent }) {\n switch (data.type) {\n case \"operation\":\n case \"constructor\":\n return defineIdlName(escaped, data, parent);\n default:\n return escaped;\n }\n },\n type(contents) {\n return html`<span class=\"idlType\">${contents}</span>`;\n },\n inheritance(contents) {\n return html`<span class=\"idlSuperclass\">${contents}</span>`;\n },\n definition(contents, { data, parent }) {\n const className = getIdlDefinitionClassName(data);\n switch (data.type) {\n case \"includes\":\n case \"enum-value\":\n return html`<span class=\"${className}\">${contents}</span>`;\n }\n const parentName = parent ? parent.name : \"\";\n const { name, idlId } = getNameAndId(data, parentName);\n return html`<span\n class=\"${className}\"\n id=\"${idlId}\"\n data-idl\n data-title=\"${name}\"\n >${contents}</span\n >`;\n },\n extendedAttribute(contents) {\n const result = html`<span class=\"extAttr\">${contents}</span>`;\n return result;\n },\n extendedAttributeReference(name) {\n return html`<a data-xref-type=\"extended-attribute\">${name}</a>`;\n },\n};\n\n/**\n * Returns a link to existing <dfn> or creates one if doesn’t exists.\n */\nfunction defineIdlName(escaped, data, parent) {\n const parentName = parent ? parent.name : \"\";\n const { name } = getNameAndId(data, parentName);\n const dfn = findDfn(data, name, {\n parent: parentName,\n });\n const linkType = getDfnType(data.type);\n if (dfn) {\n if (!data.partial) {\n dfn.dataset.export = \"\";\n dfn.dataset.dfnType = linkType;\n }\n decorateDfn(dfn, data, parentName, name);\n const href = `#${dfn.id}`;\n return html`<a\n data-link-for=\"${parentName}\"\n data-link-type=\"${linkType}\"\n href=\"${href}\"\n class=\"internalDFN\"\n ><code>${escaped}</code></a\n >`;\n }\n\n const isDefaultJSON =\n data.type === \"operation\" &&\n data.name === \"toJSON\" &&\n data.extAttrs.some(({ name }) => name === \"Default\");\n if (isDefaultJSON) {\n return html`<a data-link-type=\"dfn\" data-lt=\"default toJSON steps\"\n >${escaped}</a\n >`;\n }\n if (!data.partial) {\n const dfn = html`<dfn data-export data-dfn-type=\"${linkType}\"\n >${escaped}</dfn\n >`;\n registerDefinition(dfn, [name]);\n decorateDfn(dfn, data, parentName, name);\n return dfn;\n }\n\n const unlinkedAnchor = html`<a\n data-idl=\"${data.partial ? \"partial\" : null}\"\n data-link-type=\"${linkType}\"\n data-title=\"${data.name}\"\n data-xref-type=\"${linkType}\"\n >${escaped}</a\n >`;\n\n const showWarnings =\n name && data.type !== \"typedef\" && !(data.partial && !dfn);\n if (showWarnings) {\n const styledName = data.type === \"operation\" ? `${name}()` : name;\n const ofParent = parentName ? ` \\`${parentName}\\`'s` : \"\";\n const msg = `Missing \\`<dfn>\\` for${ofParent} \\`${styledName}\\` ${data.type}. [More info](https://github.com/w3c/respec/wiki/WebIDL-thing-is-not-defined).`;\n showWarning(msg, pluginName, { elements: [unlinkedAnchor] });\n }\n return unlinkedAnchor;\n}\n\n/**\n * Map to Shepherd types, for export.\n * @see https://tabatkins.github.io/bikeshed/#dfn-types\n */\nfunction getDfnType(idlType) {\n switch (idlType) {\n case \"operation\":\n return \"method\";\n case \"field\":\n return \"dict-member\";\n case \"callback interface\":\n case \"interface mixin\":\n return \"interface\";\n default:\n return idlType;\n }\n}\n\nfunction getIdlDefinitionClassName(defn) {\n switch (defn.type) {\n case \"callback interface\":\n return \"idlInterface\";\n case \"operation\":\n return \"idlMethod\";\n case \"field\":\n return \"idlMember\";\n case \"enum-value\":\n return \"idlEnumItem\";\n case \"callback function\":\n return \"idlCallback\";\n }\n return `idl${defn.type[0].toUpperCase()}${defn.type.slice(1)}`;\n}\n\nconst nameResolverMap = new WeakMap();\nfunction getNameAndId(defn, parent = \"\") {\n if (nameResolverMap.has(defn)) {\n return nameResolverMap.get(defn);\n }\n const result = resolveNameAndId(defn, parent);\n nameResolverMap.set(defn, result);\n return result;\n}\n\nfunction resolveNameAndId(defn, parent) {\n let name = getDefnName(defn);\n // For getters, setters, etc. \"anonymous-getter\",\n const prefix = defn.special && defn.name === \"\" ? \"anonymous-\" : \"\";\n let idlId = getIdlId(prefix + name, parent);\n switch (defn.type) {\n // Top-level entities with linkable members.\n case \"callback interface\":\n case \"dictionary\":\n case \"interface\":\n case \"interface mixin\": {\n idlId += resolvePartial(defn);\n break;\n }\n case \"constructor\":\n case \"operation\": {\n const overload = resolveOverload(name, parent);\n if (overload) {\n name += overload;\n idlId += overload;\n } else if (defn.arguments.length) {\n idlId += defn.arguments\n .map(arg => `-${arg.name.toLowerCase()}`)\n .join(\"\");\n }\n break;\n }\n }\n return { name, idlId };\n}\n\nfunction resolvePartial(defn) {\n if (!defn.partial) {\n return \"\";\n }\n if (!idlPartials[defn.name]) {\n idlPartials[defn.name] = 0;\n }\n idlPartials[defn.name] += 1;\n return `-partial-${idlPartials[defn.name]}`;\n}\n\nfunction resolveOverload(name, parentName) {\n const qualifiedName = `${parentName}.${name}`;\n const fullyQualifiedName = `${qualifiedName}()`;\n let overload;\n if (!operationNames[fullyQualifiedName]) {\n operationNames[fullyQualifiedName] = 0;\n }\n if (!operationNames[qualifiedName]) {\n operationNames[qualifiedName] = 0;\n } else {\n overload = `!overload-${operationNames[qualifiedName]}`;\n }\n operationNames[fullyQualifiedName] += 1;\n operationNames[qualifiedName] += 1;\n return overload || \"\";\n}\n\nfunction getIdlId(name, parentName) {\n if (!parentName) {\n return `idl-def-${name.toLowerCase()}`;\n }\n return `idl-def-${parentName.toLowerCase()}-${name.toLowerCase()}`;\n}\n\nfunction getDefnName(defn) {\n switch (defn.type) {\n case \"enum-value\":\n return defn.value;\n case \"operation\":\n return defn.name || defn.special;\n default:\n return defn.name || defn.type;\n }\n}\n\n/**\n * @param {Element} idlElement\n * @param {number} index\n */\nfunction renderWebIDL(idlElement, index) {\n let parse;\n try {\n parse = webidl2.parse(idlElement.textContent, {\n sourceName: String(index),\n });\n } catch (e) {\n const msg = `Failed to parse WebIDL: ${e.bareMessage}.`;\n showError(msg, pluginName, {\n title: e.bareMessage,\n details: `<pre>${e.context}</pre>`,\n elements: [idlElement],\n });\n // Skip this <pre> and move on to the next one.\n return [];\n }\n // we add \"idl\" as the canonical match, so both \"webidl\" and \"idl\" work\n idlElement.classList.add(\"def\", \"idl\");\n const highlights = webidl2.write(parse, { templates });\n html.bind(idlElement)`${highlights}`;\n wrapInner(idlElement, document.createElement(\"code\"));\n idlElement.querySelectorAll(\"[data-idl]\").forEach(elem => {\n if (elem.dataset.dfnFor) {\n return;\n }\n const title = elem.dataset.title;\n // Select the nearest ancestor element that can contain members.\n const parent = elem.parentElement.closest(\"[data-idl][data-title]\");\n if (parent) {\n elem.dataset.dfnFor = parent.dataset.title;\n }\n if (elem.localName === \"dfn\") {\n registerDefinition(elem, [title]);\n }\n });\n // cross reference\n const closestCite = idlElement.closest(\"[data-cite], body\");\n const { dataset } = closestCite;\n if (!dataset.cite) dataset.cite = \"WebIDL\";\n // includes webidl in some form\n if (!/\\bwebidl\\b/i.test(dataset.cite)) {\n const cites = dataset.cite.trim().split(/\\s+/);\n dataset.cite = [\"WebIDL\", ...cites].join(\" \");\n }\n addIDLHeader(idlElement);\n return parse;\n}\n/**\n * Adds a \"WebIDL\" decorative header/permalink to a block of WebIDL.\n * @param {HTMLPreElement} pre\n */\nexport function addIDLHeader(pre) {\n addHashId(pre, \"webidl\");\n const header = html`<span class=\"idlHeader\"\n ><a class=\"self-link\" href=\"${`#${pre.id}`}\">WebIDL</a></span\n >`;\n pre.prepend(header);\n addCopyIDLButton(header);\n}\n\nexport async function run() {\n const idls = document.querySelectorAll(\"pre.idl, pre.webidl\");\n if (!idls.length) {\n return;\n }\n if (!document.querySelector(\".idl:not(pre), .webidl:not(pre)\")) {\n const link = document.querySelector(\"head link\");\n if (link) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n link.before(style);\n }\n }\n\n const astArray = [...idls].map(renderWebIDL);\n\n const validations = webidl2.validate(astArray);\n for (const validation of validations) {\n let details = `<pre>${xmlEscape(validation.context)}</pre>`;\n if (validation.autofix) {\n validation.autofix();\n const idlToFix = webidl2.write(astArray[validation.sourceName]);\n const escaped = xmlEscape(idlToFix);\n details += `Try fixing as:\n <pre>${escaped}</pre>`;\n }\n const msg = `WebIDL validation error: ${validation.bareMessage}`;\n showError(msg, pluginName, {\n details,\n elements: [idls[validation.sourceName]],\n title: validation.bareMessage,\n });\n }\n document.normalize();\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\nimport { API_URL } from \"./xref.js\";\nimport { idb } from \"./import-maps.js\";\n\n/**\n * @typedef {import('core/xref').RequestEntry} RequestEntry\n * @typedef {import('core/xref').Response} Response\n * @typedef {import('core/xref').SearchResultEntry} SearchResultEntry\n * @typedef {import('core/xref').XrefDatabase} XrefDatabase\n */\n\nconst STORE_NAME = \"xrefs\";\nconst VERSION_CHECK_WAIT = 5 * 60 * 1000; // 5 min\n\nasync function getIdbCache() {\n /** @type {XrefDatabase} */\n const db = await idb.openDB(\"xref\", 2, {\n upgrade(db) {\n [...db.objectStoreNames].forEach(s => db.deleteObjectStore(s));\n const store = db.createObjectStore(STORE_NAME, { keyPath: \"query.id\" });\n store.createIndex(\"byTerm\", \"query.term\", { unique: false });\n },\n });\n return db;\n}\n\n/** @param {RequestEntry[]} queries */\nexport async function resolveXrefCache(queries) {\n /** @type {Map<string, SearchResultEntry[]>} */\n const cachedData = new Map();\n\n const bustCache = await shouldBustCache();\n if (bustCache) {\n await clearXrefData();\n return cachedData;\n }\n\n const requiredKeySet = new Set(queries.map(query => query.id));\n try {\n const cache = await getIdbCache();\n let cursor = await cache.transaction(STORE_NAME).store.openCursor();\n while (cursor) {\n if (requiredKeySet.has(cursor.key)) {\n cachedData.set(cursor.key, cursor.value.result);\n }\n cursor = await cursor.continue();\n }\n } catch (err) {\n console.error(err);\n }\n return cachedData;\n}\n\n/**\n * Get last updated timestamp from server and bust cache based on that. This\n * way, we prevent dirty/erroneous/stale data being kept on a client (which is\n * possible if we use a `MAX_AGE` based caching strategy).\n */\nasync function shouldBustCache() {\n const key = \"XREF:LAST_VERSION_CHECK\";\n const lastChecked = parseInt(localStorage.getItem(key), 10);\n const now = Date.now();\n\n if (!lastChecked) {\n localStorage.setItem(key, now.toString());\n return false;\n }\n if (now - lastChecked < VERSION_CHECK_WAIT) {\n // avoid checking network for any data update if old cache \"fresh\"\n return false;\n }\n\n const url = new URL(\"meta/version\", API_URL).href;\n const res = await fetch(url);\n if (!res.ok) return false;\n const lastUpdated = await res.text();\n localStorage.setItem(key, now.toString());\n return parseInt(lastUpdated, 10) > lastChecked;\n}\n\n/**\n * @param {RequestEntry[]} queries\n * @param {Map<string, SearchResultEntry[]>} results\n */\nexport async function cacheXrefData(queries, results) {\n try {\n const cache = await getIdbCache();\n const tx = cache.transaction(STORE_NAME, \"readwrite\");\n for (const query of queries) {\n const result = results.get(query.id);\n tx.objectStore(STORE_NAME).add({ query, result });\n }\n await tx.done;\n } catch (e) {\n console.error(e);\n }\n}\n\nexport async function clearXrefData() {\n try {\n await getIdbCache().then(db => db.clear(STORE_NAME));\n } catch (e) {\n console.error(e);\n }\n}\n","// @ts-check\n/**\n * @module core/xref\n *\n * Automatically adds external references.\n *\n * Searches for the terms which do not have a local definition at xref API and\n * for each query, adds `data-cite` attributes to respective elements.\n * `core/data-cite` later converts these data-cite attributes to actual links.\n * https://github.com/w3c/respec/issues/1662\n */\n/**\n * @typedef {import('core/xref').RequestEntry} RequestEntry\n * @typedef {import('core/xref').Response} Response\n * @typedef {import('core/xref').SearchResultEntry} SearchResultEntry\n * @typedef {Map<string, { elems: HTMLElement[], results: SearchResultEntry[], query: RequestEntry }>} ErrorCollection\n * @typedef {{ ambiguous: ErrorCollection, notFound: ErrorCollection }} Errors\n */\nimport { cacheXrefData, resolveXrefCache } from \"./xref-db.js\";\nimport {\n createResourceHint,\n nonNormativeSelector,\n norm as normalize,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { possibleExternalLinks } from \"./link-to-dfn.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/xref\";\n\nconst profiles = {\n \"web-platform\": [\"HTML\", \"INFRA\", \"URL\", \"WEBIDL\", \"DOM\", \"FETCH\"],\n};\n\nexport const API_URL = \"https://respec.org/xref/\";\n\nif (\n !document.querySelector(\"link[rel='preconnect'][href='https://respec.org']\")\n) {\n const link = createResourceHint({\n hint: \"preconnect\",\n href: \"https://respec.org\",\n });\n document.head.appendChild(link);\n}\n\n/**\n * @param {Object} conf respecConfig\n */\nexport async function run(conf) {\n if (!conf.xref) {\n return;\n }\n\n const xref = normalizeConfig(conf.xref);\n if (xref.specs) {\n const bodyCite = document.body.dataset.cite\n ? document.body.dataset.cite.split(/\\s+/)\n : [];\n document.body.dataset.cite = bodyCite.concat(xref.specs).join(\" \");\n }\n\n const elems = possibleExternalLinks.concat(findExplicitExternalLinks());\n if (!elems.length) return;\n\n /** @type {RequestEntry[]} */\n const queryKeys = [];\n for (const elem of elems) {\n const entry = getRequestEntry(elem);\n const id = await objectHash(entry);\n queryKeys.push({ ...entry, id });\n }\n\n const data = await getData(queryKeys, xref.url);\n addDataCiteToTerms(elems, queryKeys, data, conf);\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Find additional references that need to be looked up externally.\n * Examples: a[data-cite=\"spec\"], dfn[data-cite=\"spec\"], dfn.externalDFN\n */\nfunction findExplicitExternalLinks() {\n /** @type {NodeListOf<HTMLElement>} */\n const links = document.querySelectorAll(\n \"a[data-cite]:not([data-cite='']):not([data-cite*='#']), \" +\n \"dfn[data-cite]:not([data-cite='']):not([data-cite*='#'])\"\n );\n /** @type {NodeListOf<HTMLElement>} */\n const externalDFNs = document.querySelectorAll(\"dfn.externalDFN\");\n return [...links]\n .filter(el => {\n // ignore empties\n if (el.textContent.trim() === \"\") return false;\n /** @type {HTMLElement} */\n const closest = el.closest(\"[data-cite]\");\n return !closest || closest.dataset.cite !== \"\";\n })\n .concat(...externalDFNs);\n}\n\n/**\n * converts conf.xref to object with url and spec properties\n */\nfunction normalizeConfig(xref) {\n const defaults = {\n url: API_URL,\n specs: null,\n };\n\n const config = Object.assign({}, defaults);\n\n const type = Array.isArray(xref) ? \"array\" : typeof xref;\n switch (type) {\n case \"boolean\":\n // using defaults already, as above\n break;\n case \"string\":\n if (xref.toLowerCase() in profiles) {\n Object.assign(config, { specs: profiles[xref.toLowerCase()] });\n } else {\n invalidProfileError(xref);\n }\n break;\n case \"array\":\n Object.assign(config, { specs: xref });\n break;\n case \"object\":\n Object.assign(config, xref);\n if (xref.profile) {\n const profile = xref.profile.toLowerCase();\n if (profile in profiles) {\n const specs = (xref.specs || []).concat(profiles[profile]);\n Object.assign(config, { specs });\n } else {\n invalidProfileError(xref.profile);\n }\n }\n break;\n default: {\n const msg = `Invalid value for \\`xref\\` configuration option. Received: \"${xref}\".`;\n showError(msg, name);\n }\n }\n return config;\n\n function invalidProfileError(profile) {\n const supportedProfiles = Object.keys(profiles)\n .map(p => `\"${p}\"`)\n .join(\", \");\n const msg =\n `Invalid profile \"${profile}\" in \\`respecConfig.xref\\`. ` +\n `Please use one of the supported profiles: ${supportedProfiles}.`;\n showError(msg, name);\n }\n}\n\n/**\n * get xref API request entry (term and context) for given xref element\n * @param {HTMLElement} elem\n */\nfunction getRequestEntry(elem) {\n const isIDL = \"xrefType\" in elem.dataset;\n\n let term = getTermFromElement(elem);\n if (!isIDL) term = term.toLowerCase();\n\n const specs = getSpecContext(elem);\n const types = getTypeContext(elem, isIDL);\n const forContext = getForContext(elem, isIDL);\n\n return {\n term,\n types,\n ...(specs.length && { specs }),\n ...(typeof forContext === \"string\" && { for: forContext }),\n };\n}\n\n/** @param {HTMLElement} elem */\nexport function getTermFromElement(elem) {\n const { lt: linkingText } = elem.dataset;\n let term = linkingText ? linkingText.split(\"|\", 1)[0] : elem.textContent;\n term = normalize(term);\n return term === \"the-empty-string\" ? \"\" : term;\n}\n\n/**\n * Get spec context as a fallback chain, where each level (sub-array) represents\n * decreasing priority.\n * @param {HTMLElement} elem\n */\nfunction getSpecContext(elem) {\n /** @type {string[][]} */\n const specs = [];\n\n /** @type {HTMLElement} */\n let dataciteElem = elem.closest(\"[data-cite]\");\n\n // Traverse up towards the root element, adding levels of lower priority specs\n while (dataciteElem) {\n const cite = dataciteElem.dataset.cite.toLowerCase().replace(/[!?]/g, \"\");\n const cites = cite.split(/\\s+/).filter(s => s);\n if (cites.length) {\n specs.push(cites);\n }\n if (dataciteElem === elem) break;\n dataciteElem = dataciteElem.parentElement.closest(\"[data-cite]\");\n }\n\n // If element itself contains data-cite, we don't take inline context into\n // account. The inline bibref context has lowest priority, if available.\n if (dataciteElem !== elem) {\n const closestSection = elem.closest(\"section\");\n /** @type {Iterable<HTMLElement>} */\n const bibrefs = closestSection\n ? closestSection.querySelectorAll(\"a.bibref\")\n : [];\n const inlineRefs = [...bibrefs].map(el => el.textContent.toLowerCase());\n if (inlineRefs.length) {\n specs.push(inlineRefs);\n }\n }\n\n const uniqueSpecContext = dedupeSpecContext(specs);\n return uniqueSpecContext;\n}\n\n/**\n * If we already have a spec in a higher priority level (closer to element) of\n * fallback chain, skip it from low priority levels, to prevent duplication.\n * @param {string[][]} specs\n * */\nfunction dedupeSpecContext(specs) {\n /** @type {string[][]} */\n const unique = [];\n for (const level of specs) {\n const higherPriority = unique[unique.length - 1] || [];\n const uniqueSpecs = [...new Set(level)].filter(\n spec => !higherPriority.includes(spec)\n );\n unique.push(uniqueSpecs.sort());\n }\n return unique;\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {boolean} isIDL\n */\nfunction getForContext(elem, isIDL) {\n if (elem.dataset.xrefFor) {\n return normalize(elem.dataset.xrefFor);\n }\n\n if (isIDL) {\n /** @type {HTMLElement} */\n const dataXrefForElem = elem.closest(\"[data-xref-for]\");\n if (dataXrefForElem) {\n return normalize(dataXrefForElem.dataset.xrefFor);\n }\n }\n\n return null;\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {boolean} isIDL\n */\nfunction getTypeContext(elem, isIDL) {\n if (isIDL) {\n if (elem.dataset.xrefType) {\n return elem.dataset.xrefType.split(\"|\");\n }\n return [\"_IDL_\"];\n }\n\n return [\"_CONCEPT_\"];\n}\n\n/**\n * @param {RequestEntry[]} queryKeys\n * @param {string} apiUrl\n * @returns {Promise<Map<string, SearchResultEntry[]>>}\n */\nasync function getData(queryKeys, apiUrl) {\n const uniqueIds = new Set();\n const uniqueQueryKeys = queryKeys.filter(key => {\n return uniqueIds.has(key.id) ? false : uniqueIds.add(key.id) && true;\n });\n\n const resultsFromCache = await resolveXrefCache(uniqueQueryKeys);\n\n const termsToLook = uniqueQueryKeys.filter(\n key => !resultsFromCache.get(key.id)\n );\n const fetchedResults = await fetchFromNetwork(termsToLook, apiUrl);\n if (fetchedResults.size) {\n // add data to cache\n await cacheXrefData(uniqueQueryKeys, fetchedResults);\n }\n\n return new Map([...resultsFromCache, ...fetchedResults]);\n}\n\n/**\n * @param {RequestEntry[]} keys\n * @param {string} url\n * @returns {Promise<Map<string, SearchResultEntry[]>>}\n */\nasync function fetchFromNetwork(keys, url) {\n if (!keys.length) return new Map();\n\n const query = { keys };\n const options = {\n method: \"POST\",\n body: JSON.stringify(query),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n const response = await fetch(url, options);\n const json = await response.json();\n return new Map(json.result);\n}\n\n/**\n * Figures out from the tree structure if the reference is\n * normative (true) or informative (false).\n * @param {HTMLElement} elem\n */\nfunction isNormative(elem) {\n const closestNormative = elem.closest(\".normative\");\n const closestInform = elem.closest(nonNormativeSelector);\n if (!closestInform || elem === closestNormative) {\n return true;\n }\n return (\n closestNormative &&\n closestInform &&\n closestInform.contains(closestNormative)\n );\n}\n\n/**\n * adds data-cite attributes to elems for each term for which results are found.\n * adds citations to references section.\n * collects and shows linking errors if any.\n * @param {HTMLElement[]} elems\n * @param {RequestEntry[]} queryKeys\n * @param {Map<string, SearchResultEntry[]>} data\n * @param {any} conf\n */\nfunction addDataCiteToTerms(elems, queryKeys, data, conf) {\n /** @type {Errors} */\n const errors = { ambiguous: new Map(), notFound: new Map() };\n\n for (let i = 0, l = elems.length; i < l; i++) {\n if (elems[i].closest(\"[data-no-xref]\")) continue;\n\n const elem = elems[i];\n const query = queryKeys[i];\n\n const { id } = query;\n const results = data.get(id);\n if (results.length === 1) {\n addDataCite(elem, query, results[0], conf);\n } else {\n const collector = errors[results.length === 0 ? \"notFound\" : \"ambiguous\"];\n if (!collector.has(id)) {\n collector.set(id, { elems: [], results, query });\n }\n collector.get(id).elems.push(elem);\n }\n }\n\n showErrors(errors);\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {RequestEntry} query\n * @param {SearchResultEntry} result\n * @param {any} conf\n */\nfunction addDataCite(elem, query, result, conf) {\n const { term, specs = [] } = query;\n const { uri, shortname, spec, normative, type, for: forContext } = result;\n // if authored spec context had `result.spec`, use it instead of shortname\n const cite = specs.flat().includes(spec) ? spec : shortname;\n const url = new URL(uri, \"https://example.org\");\n const { pathname: citePath } = url;\n const citeFrag = url.hash.slice(1);\n const dataset = { cite, citePath, citeFrag, type };\n if (forContext) dataset.linkFor = forContext[0];\n Object.assign(elem.dataset, dataset);\n\n addToReferences(elem, cite, normative, term, conf);\n}\n\n/**\n * add specs for citation (references section)\n * @param {HTMLElement} elem\n * @param {string} cite\n * @param {boolean} normative\n * @param {string} term\n * @param {any} conf\n */\nfunction addToReferences(elem, cite, normative, term, conf) {\n const isNormRef = isNormative(elem);\n if (!isNormRef) {\n // Only add it if not already normative...\n if (!conf.normativeReferences.has(cite)) {\n conf.informativeReferences.add(cite);\n }\n return;\n }\n if (normative) {\n // If it was originally informative, we move the existing\n // key to be normative.\n const existingKey = conf.informativeReferences.has(cite)\n ? conf.informativeReferences.getCanonicalKey(cite)\n : cite;\n conf.normativeReferences.add(existingKey);\n conf.informativeReferences.delete(existingKey);\n return;\n }\n\n const msg = `Normative reference to \"${term}\" found but term is defined informatively in \"${cite}\"`;\n const title = \"Error: Normative reference to informative term\";\n showWarning(msg, name, { title, elements: [elem] });\n}\n\n/** @param {Errors} errors */\nfunction showErrors({ ambiguous, notFound }) {\n const getPrefilledFormURL = (term, query, specs = []) => {\n const url = new URL(API_URL);\n url.searchParams.set(\"term\", term);\n if (query.for) url.searchParams.set(\"for\", query.for);\n url.searchParams.set(\"types\", query.types.join(\",\"));\n if (specs.length) url.searchParams.set(\"specs\", specs.join(\",\"));\n return url;\n };\n\n const howToFix = howToCiteURL =>\n \"[Learn more about this error](https://respec.org/docs/#error-term-not-found)\" +\n ` or see [how to cite to resolve the error](${howToCiteURL}).`;\n\n for (const { query, elems } of notFound.values()) {\n const specs = query.specs ? [...new Set(query.specs.flat())].sort() : [];\n const originalTerm = getTermFromElement(elems[0]);\n const formUrl = getPrefilledFormURL(originalTerm, query);\n const specsString = specs.map(spec => `\\`${spec}\\``).join(\", \");\n const hint = howToFix(formUrl);\n const msg = `Couldn't match \"**${originalTerm}**\" to anything in the document or in any other document cited in this specification: ${specsString}.`;\n const title = \"Error: No matching dfn found.\";\n showError(msg, name, { title, elements: elems, hint });\n }\n\n for (const { query, elems, results } of ambiguous.values()) {\n const specs = [...new Set(results.map(entry => entry.shortname))].sort();\n const specsString = specs.map(s => `**${s}**`).join(\", \");\n const originalTerm = getTermFromElement(elems[0]);\n const formUrl = getPrefilledFormURL(originalTerm, query, specs);\n const hint = howToFix(formUrl);\n const msg = `The term \"**${originalTerm}**\" is defined in ${specsString} in multiple ways, so it's ambiguous.`;\n const title = \"Error: Linking an ambiguous dfn.\";\n showError(msg, name, { title, elements: elems, hint });\n }\n}\n\nfunction objectHash(obj) {\n const str = JSON.stringify(obj, Object.keys(obj).sort());\n const buffer = new TextEncoder().encode(str);\n return crypto.subtle.digest(\"SHA-1\", buffer).then(bufferToHexString);\n}\n\n/** @param {ArrayBuffer} buffer */\nfunction bufferToHexString(buffer) {\n const byteArray = new Uint8Array(buffer);\n return [...byteArray].map(v => v.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction cleanup(doc) {\n const elems = doc.querySelectorAll(\n \"a[data-xref-for], a[data-xref-type], a[data-link-for]\"\n );\n const attrToRemove = [\"data-xref-for\", \"data-xref-type\", \"data-link-for\"];\n elems.forEach(el => {\n attrToRemove.forEach(attr => el.removeAttribute(attr));\n });\n}\n","// @ts-check\n/**\n * Module: core/webidl-index\n * constructs a summary of WebIDL in the document by\n * cloning all the generated WebIDL nodes and\n * appending them to pre element.\n *\n * Usage\n * Add a <section id=\"idl-index\"> to the document.\n * It also supports title elements to generate a header.\n * Or if a header element is an immediate child, then\n * that is preferred.\n */\nexport const name = \"core/webidl-index\";\nimport { nonNormativeSelector, wrapInner } from \"./utils.js\";\nimport { addIDLHeader } from \"./webidl.js\";\n\nexport function run() {\n /** @type {HTMLElement | null} */\n const idlIndexSec = document.querySelector(\"section#idl-index\");\n if (!idlIndexSec) {\n return;\n }\n // Query for decedents headings, e.g., \"h2:first-child, etc..\"\n const query = [2, 3, 4, 5, 6].map(level => `h${level}:first-child`).join(\",\");\n if (!idlIndexSec.querySelector(query)) {\n const header = document.createElement(\"h2\");\n if (idlIndexSec.title) {\n header.textContent = idlIndexSec.title;\n idlIndexSec.removeAttribute(\"title\");\n } else {\n header.textContent = \"IDL Index\";\n }\n idlIndexSec.prepend(header);\n }\n\n // filter out the IDL marked with class=\"exclude\" and the IDL in non-normative sections\n const idlIndex = Array.from(\n document.querySelectorAll(\"pre.idl:not(.exclude) > code\")\n ).filter(idl => !idl.closest(nonNormativeSelector));\n\n if (idlIndex.length === 0) {\n const text = \"This specification doesn't normatively declare any Web IDL.\";\n idlIndexSec.append(text);\n return;\n }\n\n const pre = document.createElement(\"pre\");\n pre.classList.add(\"idl\", \"def\");\n pre.id = \"actual-idl-index\";\n idlIndex\n .map(elem => {\n const fragment = document.createDocumentFragment();\n for (const child of elem.children) {\n fragment.appendChild(child.cloneNode(true));\n }\n return fragment;\n })\n .forEach(elem => {\n if (pre.lastChild) {\n pre.append(\"\\n\\n\");\n }\n pre.appendChild(elem);\n });\n // Remove duplicate IDs\n pre.querySelectorAll(\"*[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n\n // Add our own IDL header\n idlIndexSec.appendChild(pre);\n wrapInner(pre, document.createElement(\"code\"));\n addIDLHeader(pre);\n}\n","/*\n@module \"core/dfn-index\"\nExtends and overrides some styles from `base.css`.\n*/\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nul.index {\n columns: 30ch;\n column-gap: 1.5em;\n}\n\nul.index li {\n list-style: inherit;\n}\n\nul.index li span {\n color: inherit;\n cursor: pointer;\n white-space: normal;\n}\n\n#index-defined-here ul.index li {\n font-size: 0.9rem;\n}\n\nul.index code {\n color: inherit;\n}\n\n#index-defined-here .print-only {\n display: none;\n}\n\n@media print {\n #index-defined-here .print-only {\n display: initial;\n }\n}\n`;\n","// @ts-check\n/**\n * If a `<section id=\"index\">` exists, it is filled by a list of terms defined\n * (locally) by current document and a list of terms referenced (external) by\n * current document.\n */\n\nimport { addId, getIntlData, norm } from \"./utils.js\";\nimport css from \"../styles/dfn-index.css.js\";\nimport { getTermFromElement } from \"./xref.js\";\nimport { html } from \"./import-maps.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\nimport { sub } from \"./pubsubhub.js\";\nimport { toCiteDetails } from \"./data-cite.js\";\n\nexport const name = \"core/dfn-index\";\n\nconst localizationStrings = {\n en: {\n heading: \"Index\",\n headingExternal: \"Terms defined by reference\",\n headlingLocal: \"Terms defined by this specification\",\n dfnOf: \"definition of\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Terms of these _types_ are wrapped in `<code>`.\nconst CODE_TYPES = new Set([\n \"attribute\",\n \"callback\",\n \"dict-member\",\n \"dictionary\",\n \"element-attr\",\n \"element\",\n \"enum-value\",\n \"enum\",\n \"exception\",\n \"extended-attribute\",\n \"interface\",\n \"method\",\n \"typedef\",\n]);\n\n/**\n * @typedef {{ term: string, type: string, linkFor: string, elem: HTMLAnchorElement }} Entry\n */\n\nexport function run() {\n const index = document.querySelector(\"section#index\");\n if (!index) {\n return;\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.textContent = css;\n document.head.appendChild(styleEl);\n\n index.classList.add(\"appendix\");\n if (!index.querySelector(\"h2\")) {\n index.prepend(html`<h2>${l10n.heading}</h2>`);\n }\n\n const localTermIndex = html`<section id=\"index-defined-here\">\n <h3>${l10n.headlingLocal}</h3>\n ${createLocalTermIndex()}\n </section>`;\n index.append(localTermIndex);\n\n const externalTermIndex = html`<section id=\"index-defined-elsewhere\">\n <h3>${l10n.headingExternal}</h3>\n ${createExternalTermIndex()}\n </section>`;\n index.append(externalTermIndex);\n for (const el of externalTermIndex.querySelectorAll(\".index-term\")) {\n addId(el, \"index-term\");\n }\n\n // XXX: This event is used to overcome an edge case with core/structure,\n // related to a circular dependency in plugin run order. We want\n // core/structure to run after dfn-index so the #index can be listed in the\n // TOC, but we also want section numbers in dfn-index. So, we \"split\"\n // core/dfn-index in two parts, one that runs before core/structure (using\n // plugin order in profile) and the other (following) after section numbers\n // are generated in core/structure (this event).\n sub(\"toc\", appendSectionNumbers, { once: true });\n\n sub(\"beforesave\", cleanup);\n}\n\nfunction createLocalTermIndex() {\n const dataSortedByTerm = collectLocalTerms();\n return html`<ul class=\"index\">\n ${dataSortedByTerm.map(([term, dfns]) => renderLocalTerm(term, dfns))}\n </ul>`;\n}\n\nfunction collectLocalTerms() {\n /** @type {Map<string, HTMLElement[]>} */\n const data = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"dfn:not([data-cite])\");\n for (const elem of elems) {\n if (!elem.id) continue;\n const text = norm(elem.textContent);\n const elemsByTerm = data.get(text) || data.set(text, []).get(text);\n elemsByTerm.push(elem);\n }\n\n const dataSortedByTerm = [...data].sort(([a], [b]) =>\n a.slice(a.search(/\\w/)).localeCompare(b.slice(b.search(/\\w/)))\n );\n\n return dataSortedByTerm;\n}\n\n/**\n * @param {string} term\n * @param {HTMLElement[]} dfns\n * @returns {HTMLLIElement}\n */\nfunction renderLocalTerm(term, dfns) {\n const renderItem = (dfn, text, suffix) => {\n const href = `#${dfn.id}`;\n return html`<li data-id=${dfn.id}>\n <a class=\"index-term\" href=\"${href}\">${{ html: text }}</a> ${suffix\n ? { html: suffix }\n : \"\"}\n </li>`;\n };\n\n if (dfns.length === 1) {\n const dfn = dfns[0];\n const type = getLocalTermType(dfn);\n const text = getLocalTermText(dfn, type, term);\n const suffix = getLocalTermSuffix(dfn, type, term);\n return renderItem(dfn, text, suffix);\n }\n return html`<li>\n ${term}\n <ul>\n ${dfns.map(dfn => {\n const type = getLocalTermType(dfn);\n const text = getLocalTermSuffix(dfn, type, term) || l10n.dfnOf;\n return renderItem(dfn, text);\n })}\n </ul>\n </li>`;\n}\n\n/** @param {HTMLElement} dfn */\nfunction getLocalTermType(dfn) {\n const ds = dfn.dataset;\n const type = ds.dfnType || ds.idl || ds.linkType || \"\";\n switch (type) {\n case \"\":\n case \"dfn\":\n return \"\";\n default:\n return type;\n }\n}\n\n/** @param {HTMLElement} dfn */\nfunction getLocalTermParentContext(dfn) {\n /** @type {HTMLElement} */\n const dfnFor = dfn.closest(\"[data-dfn-for]:not([data-dfn-for=''])\");\n return dfnFor ? dfnFor.dataset.dfnFor : \"\";\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {string} type\n * @param {string} term\n */\nfunction getLocalTermText(dfn, type, term) {\n let text = term;\n if (type === \"enum-value\") {\n text = `\"${text}\"`;\n }\n if (CODE_TYPES.has(type) || dfn.dataset.idl || dfn.closest(\"code\")) {\n text = `<code>${text}</code>`;\n }\n return text;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {string} type\n * @param {string} [term=\"\"]\n */\nfunction getLocalTermSuffix(dfn, type, term = \"\") {\n if (term.startsWith(\"[[\")) {\n const parent = getLocalTermParentContext(dfn);\n return `internal slot for <code>${parent}</code>`;\n }\n\n switch (type) {\n case \"dict-member\":\n case \"method\":\n case \"attribute\":\n case \"enum-value\": {\n const typeText =\n type === \"dict-member\" ? \"member\" : type.replace(\"-\", \" \");\n const parent = getLocalTermParentContext(dfn);\n return `${typeText} for <code>${parent}</code>`;\n }\n case \"interface\":\n case \"dictionary\":\n case \"enum\": {\n return type;\n }\n case \"constructor\": {\n const parent = getLocalTermParentContext(dfn);\n return `for <code>${parent}</code>`;\n }\n default:\n return \"\";\n }\n}\n\nfunction appendSectionNumbers() {\n const getSectionNumber = id => {\n const dfn = document.getElementById(id);\n const sectionNumberEl = dfn.closest(\"section\").querySelector(\".secno\");\n const secNum = `§${sectionNumberEl.textContent.trim()}`;\n return html`<span class=\"print-only\">${secNum}</span>`;\n };\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"#index-defined-here li[data-id]\");\n elems.forEach(el => el.append(getSectionNumber(el.dataset.id)));\n}\n\nfunction createExternalTermIndex() {\n const data = collectExternalTerms();\n const dataSortedBySpec = [...data.entries()].sort(([specA], [specB]) =>\n specA.localeCompare(specB)\n );\n return html`<ul class=\"index\">\n ${dataSortedBySpec.map(\n ([spec, entries]) => html`<li data-spec=\"${spec}\">\n ${renderInlineCitation(spec)} defines the following:\n <ul>\n ${entries\n .sort((a, b) => a.term.localeCompare(b.term))\n .map(renderExternalTermEntry)}\n </ul>\n </li>`\n )}\n </ul>`;\n}\n\nfunction collectExternalTerms() {\n /** @type {Set<string>} */\n const uniqueReferences = new Set();\n /** @type {Map<string, Entry[]>} spec => entry[] */\n const data = new Map();\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const elements = document.querySelectorAll(`a[data-cite]`);\n for (const elem of elements) {\n if (!elem.dataset.cite) {\n continue;\n }\n const uniqueID = elem.href;\n if (uniqueReferences.has(uniqueID)) {\n continue;\n }\n\n const { type, linkFor } = elem.dataset;\n const term = getTermFromElement(elem);\n if (!term) {\n continue; // <a data-cite=\"SPEC\"></a>\n }\n const spec = toCiteDetails(elem).key.toUpperCase();\n\n const entriesBySpec = data.get(spec) || data.set(spec, []).get(spec);\n entriesBySpec.push({ term, type, linkFor, elem });\n uniqueReferences.add(uniqueID);\n }\n\n return data;\n}\n\n/**\n * @param {Entry} entry\n * @returns {HTMLLIElement}\n */\nfunction renderExternalTermEntry(entry) {\n const { elem } = entry;\n const text = getTermText(entry);\n const el = html`<li>\n <span class=\"index-term\" data-href=\"${elem.href}\">${{ html: text }}</span>\n </li>`;\n return el;\n}\n\n// Terms of these _types_ are suffixed with their type info.\nconst TYPED_TYPES = new Map([\n [\"attribute\", \"attribute\"],\n [\"element-attr\", \"attribute\"],\n [\"element\", \"element\"],\n [\"enum\", \"enum\"],\n [\"exception\", \"exception\"],\n [\"extended-attribute\", \"extended attribute\"],\n [\"interface\", \"interface\"],\n]);\n\n// These _terms_ have type suffix \"type\".\nconst TYPE_TERMS = new Set([\n // Following are primitive types as per WebIDL spec:\n \"boolean\",\n \"byte\",\n \"octet\",\n \"short\",\n \"unsigned short\",\n \"long\",\n \"unsigned long\",\n \"long long\",\n \"unsigned long long\",\n \"float\",\n \"unrestricted float\",\n \"double\",\n \"unrestricted double\",\n // Following are not primitive types, but aren't interfaces either.\n \"undefined\",\n \"any\",\n \"object\",\n \"symbol\",\n]);\n\n/** @param {Entry} entry */\nfunction getTermText(entry) {\n const { term, type, linkFor } = entry;\n let text = term;\n\n if (CODE_TYPES.has(type)) {\n if (type === \"extended-attribute\") {\n text = `[${text}]`;\n }\n text = `<code>${text}</code>`;\n }\n\n const typeSuffix = TYPE_TERMS.has(term) ? \"type\" : TYPED_TYPES.get(type);\n if (typeSuffix) {\n text += ` ${typeSuffix}`;\n }\n\n if (linkFor) {\n let linkForText = linkFor;\n if (!/\\s/.test(linkFor)) {\n // If linkFor is a single word, highlight it.\n linkForText = `<code>${linkForText}</code>`;\n }\n if (type === \"element-attr\") {\n linkForText += \" element\";\n }\n text += ` (for ${linkForText})`;\n }\n\n return text;\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n doc\n .querySelectorAll(\"#index-defined-elsewhere li[data-spec]\")\n .forEach(el => el.removeAttribute(\"data-spec\"));\n\n doc\n .querySelectorAll(\"#index-defined-here li[data-id]\")\n .forEach(el => el.removeAttribute(\"data-id\"));\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","/* container for stats */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.caniuse-stats {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: baseline;\n cursor: pointer;\n}\n\nbutton.caniuse-cell {\n margin: 1px 1px 0 0;\n border: none;\n}\n\n.caniuse-browser {\n position: relative;\n}\n\n/* handle case when printing */\n@media print {\n .caniuse-cell.y::before {\n content: \"✔️\";\n padding: 0.5em;\n }\n\n .caniuse-cell.n::before{\n content: \"❌\";\n padding: 0.5em;\n }\n\n .caniuse-cell.d::before,\n .caniuse-cell.a::before,\n .caniuse-cell.x::before,\n .caniuse-cell.p::before {\n content: \"⚠️\";\n padding: 0.5em;\n }\n}\n\n/* reset styles, hide old versions by default */\n.caniuse-browser ul {\n display: none;\n margin: 0;\n padding: 0;\n list-style: none;\n position: absolute;\n left: 0;\n z-index: 2;\n background: #fff;\n margin-top: 1px;\n}\n\n.caniuse-stats a[href] {\n white-space: nowrap;\n align-self: center;\n margin-left: 0.5em;\n}\n\n/* a browser version */\n.caniuse-cell {\n display: flex;\n font-size: 90%;\n height: 0.8cm;\n margin-right: 1px;\n margin-top: 0;\n min-width: 3cm;\n overflow: visible;\n justify-content: center;\n align-items: center;\n\n --supported: #2a8436;\n --no-support: #c44230;\n --no-support-alt: #b43b2b;\n --partial: #807301;\n --partial-alt: #746c00;\n\n color: #fff;\n background: repeating-linear-gradient(\n var(--caniuse-angle, 45deg),\n var(--caniuse-bg) 0,\n var(--caniuse-bg-alt) 1px,\n var(--caniuse-bg-alt) 0.4em,\n var(--caniuse-bg) calc(0.25em + 1px),\n var(--caniuse-bg) 0.75em\n );\n}\n\nli.caniuse-cell {\n margin-bottom: 1px;\n}\n\n.caniuse-cell:focus {\n outline: none;\n}\n\n/* supports */\n.caniuse-cell.y {\n background: var(--supported);\n}\n\n/* no support, disabled by default */\n.caniuse-cell.n,\n.caniuse-cell.d {\n --caniuse-angle: 45deg;\n --caniuse-bg: var(--no-support);\n --caniuse-bg-alt: var(--no-support-alt);\n}\n\n.caniuse-cell.d {\n --caniuse-angle: 180deg;\n}\n\n/* not supported by default / partial support etc\nsee https://github.com/Fyrd/caniuse/blob/master/CONTRIBUTING.md for stats */\n.caniuse-cell.a,\n.caniuse-cell.x,\n.caniuse-cell.p {\n --caniuse-angle: 90deg;\n --caniuse-bg: var(--partial);\n --caniuse-bg-alt: var(--partial-alt);\n}\n\n/* show rest of the browser versions */\n.caniuse-stats button:focus + ul,\n.caniuse-stats .caniuse-browser:hover > ul {\n display: block;\n}\n`;\n","// @ts-check\n/**\n * Module: \"core/caniuse\"\n * Adds a caniuse support table for a \"feature\" #1238\n * Usage options: https://github.com/w3c/respec/wiki/caniuse\n */\nimport { pub, sub } from \"./pubsubhub.js\";\nimport { showError, showWarning } from \"./utils.js\";\nimport css from \"../styles/caniuse.css.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/caniuse\";\n\nconst API_URL = \"https://respec.org/caniuse/\";\n\nconst BROWSERS = new Set([\n \"and_chr\",\n \"and_ff\",\n \"and_uc\",\n \"android\",\n \"bb\",\n \"chrome\",\n \"edge\",\n \"firefox\",\n \"ie\",\n \"ios_saf\",\n \"op_mini\",\n \"op_mob\",\n \"opera\",\n \"safari\",\n \"samsung\",\n]);\n\nexport function prepare(conf) {\n if (!conf.caniuse) {\n return; // nothing to do.\n }\n const options = getNormalizedConf(conf);\n conf.caniuse = options; // for tests\n if (!options.feature) {\n return; // no feature to show\n }\n\n document.head.appendChild(html`<style class=\"removeOnSave\">\n ${css}\n </style>`);\n\n const apiUrl = options.apiURL || API_URL;\n // Initiate a fetch, but do not wait. Try to fill the cache early instead.\n conf.state[name] = {\n fetchPromise: fetchStats(apiUrl, options),\n };\n}\n\nexport async function run(conf) {\n const options = conf.caniuse;\n if (!options?.feature) return;\n\n const featureURL = new URL(options.feature, \"https://caniuse.com/\").href;\n\n const headDlElem = document.querySelector(\".head dl\");\n const contentPromise = (async () => {\n try {\n const stats = await conf.state[name].fetchPromise;\n return html`${{ html: stats }}`;\n } catch (err) {\n const msg = `Couldn't find feature \"${options.feature}\" on caniuse.com.`;\n const hint =\n \"Please check the feature key on [caniuse.com](https://caniuse.com)\";\n showError(msg, name, { hint });\n console.error(err);\n return html`<a href=\"${featureURL}\">caniuse.com</a>`;\n }\n })();\n const definitionPair = html`<dt class=\"caniuse-title\">Browser support:</dt>\n <dd class=\"caniuse-stats\">\n ${{\n any: contentPromise,\n placeholder: \"Fetching data from caniuse.com...\",\n }}\n </dd>`;\n headDlElem.append(...definitionPair.childNodes);\n await contentPromise;\n\n // remove from export\n pub(\"amend-user-config\", { caniuse: options.feature });\n sub(\"beforesave\", outputDoc => {\n html.bind(outputDoc.querySelector(\".caniuse-stats\"))`\n <a href=\"${featureURL}\">caniuse.com</a>`;\n });\n}\n\n/**\n * returns normalized `conf.caniuse` configuration\n * @param {Object} conf configuration settings\n */\nfunction getNormalizedConf(conf) {\n const DEFAULTS = { versions: 4 };\n if (typeof conf.caniuse === \"string\") {\n return { feature: conf.caniuse, ...DEFAULTS };\n }\n const caniuseConf = { ...DEFAULTS, ...conf.caniuse };\n const { browsers } = caniuseConf;\n if (Array.isArray(browsers)) {\n const invalidBrowsers = browsers.filter(browser => !BROWSERS.has(browser));\n if (invalidBrowsers.length) {\n const names = invalidBrowsers.map(b => `\"\\`${b}\\`\"`).join(\", \");\n const msg =\n `Ignoring invalid browser(s): ${names} in ` +\n \"[`respecConfig.caniuse.browsers`](https://github.com/w3c/respec/wiki/caniuse)\";\n showWarning(msg, name);\n }\n }\n return caniuseConf;\n}\n\n/**\n * @param {string} apiURL\n * @typedef {Record<string, [string, string[]][]>} ApiResponse\n * @throws {Error} on failure\n */\nasync function fetchStats(apiURL, options) {\n const { feature, versions, browsers } = options;\n const searchParams = new URLSearchParams();\n searchParams.set(\"feature\", feature);\n searchParams.set(\"versions\", versions);\n if (Array.isArray(browsers)) {\n searchParams.set(\"browsers\", browsers.join(\",\"));\n }\n searchParams.set(\"format\", \"html\");\n const url = `${apiURL}?${searchParams.toString()}`;\n const response = await fetch(url);\n if (!response.ok) {\n const { status, statusText } = response;\n throw new Error(`Failed to get caniuse data: (${status}) ${statusText}`);\n }\n const stats = await response.text();\n return stats;\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.mdn {\n font-size: 0.75em;\n position: absolute;\n right: 0.3em;\n min-width: 0;\n margin-top: 3em;\n}\n\n.mdn details {\n width: 100%;\n margin: 1px 0;\n position: relative;\n z-index: 10;\n box-sizing: border-box;\n padding: 0.4em;\n padding-top: 0;\n}\n\n.mdn details[open] {\n min-width: 25ch;\n max-width: 32ch;\n background: #fff;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n z-index: 11;\n margin-bottom: 0.4em;\n}\n\n.mdn summary {\n text-align: right;\n cursor: default;\n margin-right: -0.4em;\n}\n\n.mdn summary span {\n font-family: zillaslab, Palatino, \"Palatino Linotype\", serif;\n color: #fff;\n background-color: #000;\n display: inline-block;\n padding: 3px;\n}\n\n.mdn a {\n display: inline-block;\n word-break: break-all;\n}\n\n.mdn p {\n margin: 0;\n}\n\n.mdn .engines-all {\n color: #058b00;\n}\n.mdn .engines-some {\n color: #b00;\n}\n\n.mdn table {\n width: 100%;\n font-size: 0.9em;\n}\n\n.mdn td {\n border: none;\n}\n\n.mdn td:nth-child(2) {\n text-align: right;\n}\n\n.mdn .nosupportdata {\n font-style: italic;\n margin: 0;\n}\n\n.mdn tr::before {\n content: \"\";\n display: table-cell;\n width: 1.5em;\n height: 1.5em;\n background: no-repeat center center / contain;\n font-size: 0.75em;\n}\n\n.mdn .no,\n.mdn .unknown {\n color: #cccccc;\n filter: grayscale(100%);\n}\n\n.mdn .no::before,\n.mdn .unknown::before {\n opacity: 0.5;\n}\n\n.mdn .chrome::before,\n.mdn .chrome_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/chrome.svg);\n}\n\n.mdn .edge::before,\n.mdn .edge_mobile::before {\n background-image: url(https://resources.whatwg.org/browser-logos/edge.svg);\n}\n\n.mdn .firefox::before,\n.mdn .firefox_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/firefox.png);\n}\n\n.mdn .ie::before {\n background-image: url(https://resources.whatwg.org/browser-logos/ie.png);\n}\n\n.mdn .opera::before,\n.mdn .opera_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/opera.svg);\n}\n\n.mdn .safari::before {\n background-image: url(https://resources.whatwg.org/browser-logos/safari.png);\n}\n\n.mdn .safari_ios::before {\n background-image: url(https://resources.whatwg.org/browser-logos/safari-ios.svg);\n}\n\n.mdn .samsunginternet_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/samsung.svg);\n}\n\n.mdn .webview_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/android-webview.png);\n}\n`;\n","// @ts-check\nimport { fetchAndCache, getIntlData, showError } from \"./utils.js\";\nimport css from \"../styles/mdn-annotation.css.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/mdn-annotation\";\n\nconst BASE_JSON_PATH = \"https://w3c.github.io/mdn-spec-links/\";\nconst MDN_URL_BASE = \"https://developer.mozilla.org/en-US/docs/Web/\";\nconst MDN_BROWSERS = {\n // The browser IDs here must match the ones in the imported JSON data.\n // See the list of browser IDs at:\n // https://github.com/mdn/browser-compat-data/blob/master/schemas/compat-data-schema.md#browser-identifiers.\n chrome: \"Chrome\",\n chrome_android: \"Chrome Android\",\n edge: \"Edge\",\n edge_mobile: \"Edge Mobile\",\n firefox: \"Firefox\",\n firefox_android: \"Firefox Android\",\n ie: \"Internet Explorer\",\n // nodejs: \"Node.js\", // no data for features in HTML\n opera: \"Opera\",\n opera_android: \"Opera Android\",\n // qq_android: \"QQ Browser\", // not enough data for features in HTML\n safari: \"Safari\",\n safari_ios: \"Safari iOS\",\n samsunginternet_android: \"Samsung Internet\",\n // uc_android: \"UC browser\", // not enough data for features in HTML\n // uc_chinese_android: \"Chinese UC Browser\", // not enough data for features in HTML\n webview_android: \"WebView Android\",\n};\n\nconst localizationStrings = {\n en: {\n inAllEngines: \"This feature is in all major engines.\",\n inSomeEngines: \"This feature has limited support.\",\n },\n zh: {\n inAllEngines: \"所有主要引擎均支持此特性。\",\n inSomeEngines: \"此功能支持有限。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {HTMLElement} node\n */\nfunction insertMDNBox(node) {\n const targetAncestor = node.closest(\"section\");\n if (!targetAncestor) return;\n const { previousElementSibling: targetSibling } = targetAncestor;\n if (targetSibling && targetSibling.classList.contains(\"mdn\")) {\n // If the target ancestor already has a mdnBox inserted, we just use it\n return targetSibling;\n }\n const mdnBox = html`<aside class=\"mdn\"></aside>`;\n targetAncestor.before(mdnBox);\n return mdnBox;\n}\n\n/**\n * @param {MdnEntry} mdnSpec\n * @returns {HTMLDetailsElement}\n */\nfunction attachMDNDetail(mdnSpec) {\n const { name, slug, summary, support, engines } = mdnSpec;\n const mdnSubPath = slug.slice(slug.indexOf(\"/\") + 1);\n const href = `${MDN_URL_BASE}${slug}`;\n const label = `Expand MDN details for ${name}`;\n const engineSupport = getEngineSupportIcons(engines);\n return html`<details>\n <summary aria-label=\"${label}\"><span>MDN</span>${engineSupport}</summary>\n <a title=\"${summary}\" href=\"${href}\">${mdnSubPath}</a>\n ${getEngineSupport(engines)}\n ${support\n ? buildBrowserSupportTable(support)\n : html`<p class=\"nosupportdata\">No support data.</p>`}\n </details>`;\n}\n\n/**\n * @param {MdnEntry['support']} support\n * @returns {HTMLTableElement}\n */\nfunction buildBrowserSupportTable(support) {\n /**\n * @param {string | keyof MDN_BROWSERS} browserId\n * @param {\"Yes\" | \"No\" | \"Unknown\"} yesNoUnknown\n * @param {string} version\n * @returns {HTMLTableRowElement}\n */\n function createRow(browserId, yesNoUnknown, version) {\n const displayStatus = yesNoUnknown === \"Unknown\" ? \"?\" : yesNoUnknown;\n const classList = `${browserId} ${yesNoUnknown.toLowerCase()}`;\n return html`<tr class=\"${classList}\">\n <td>${MDN_BROWSERS[browserId]}</td>\n <td>${version ? version : displayStatus}</td>\n </tr>`;\n }\n\n /**\n * @param {string | keyof MDN_BROWSERS} browserId\n * @param {VersionDetails} versionData\n */\n function createRowFromBrowserData(browserId, versionData) {\n if (versionData.version_removed) {\n return createRow(browserId, \"No\", \"\");\n }\n const versionAdded = versionData.version_added;\n if (typeof versionAdded === \"boolean\") {\n return createRow(browserId, versionAdded ? \"Yes\" : \"No\", \"\");\n } else if (!versionAdded) {\n return createRow(browserId, \"Unknown\", \"\");\n } else {\n return createRow(browserId, \"Yes\", `${versionAdded}+`);\n }\n }\n\n return html`<table>\n ${Object.keys(MDN_BROWSERS).map(browserId => {\n return support[browserId]\n ? createRowFromBrowserData(browserId, support[browserId])\n : createRow(browserId, \"Unknown\", \"\");\n })}\n </table>`;\n}\n\nexport async function run(conf) {\n const mdnKey = getMdnKey(conf);\n if (!mdnKey) return;\n\n const mdnSpecJson = await getMdnData(mdnKey, conf.mdn);\n if (!mdnSpecJson) return;\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.append(style);\n\n for (const elem of findElements(mdnSpecJson)) {\n const mdnSpecArray = mdnSpecJson[elem.id];\n const mdnBox = insertMDNBox(elem);\n if (!mdnBox) continue;\n for (const spec of mdnSpecArray) {\n mdnBox.append(attachMDNDetail(spec));\n }\n }\n}\n\n/** @returns {string} */\nfunction getMdnKey(conf) {\n const { shortName, mdn } = conf;\n if (!mdn) return;\n if (typeof mdn === \"string\") return mdn;\n return mdn.key || shortName;\n}\n\n/**\n * @param {string} key MDN key\n * @param {object} mdnConf\n * @param {string} [mdnConf.specMapUrl]\n * @param {string} [mdnConf.baseJsonPath]\n * @param {number} [mdnConf.maxAge]\n *\n * @typedef {{ version_added: string|boolean|null, version_removed?: string }} VersionDetails\n * @typedef {Record<string | keyof MDN_BROWSERS, VersionDetails>} MdnSupportEntry\n * @typedef {{ name: string, title: string, slug: string, summary: string, support: MdnSupportEntry, engines: string[] }} MdnEntry\n * @typedef {Record<string, MdnEntry[]>} MdnData\n * @returns {Promise<MdnData|undefined>}\n */\nasync function getMdnData(key, mdnConf) {\n const {\n baseJsonPath = BASE_JSON_PATH,\n maxAge = 60 * 60 * 24 * 1000,\n } = mdnConf;\n const url = new URL(`${key}.json`, baseJsonPath).href;\n const res = await fetchAndCache(url, maxAge);\n if (res.status === 404) {\n const msg = `Could not find MDN data associated with key \"${key}\".`;\n const hint = \"Please add a valid key to `respecConfig.mdn`\";\n showError(msg, name, { hint });\n return;\n }\n return await res.json();\n}\n\n/**\n * Find elements that can have an annotation box attached.\n * @param {MdnData} data\n */\nfunction findElements(data) {\n /** @type {NodeListOf<HTMLElement>} */\n const elemsWithId = document.body.querySelectorAll(\"[id]:not(script)\");\n return [...elemsWithId].filter(({ id }) => Array.isArray(data[id]));\n}\n\n/**\n * @param {MdnEntry['engines']} engines\n * @returns {HTMLSpanElement}\n */\nfunction getEngineSupportIcons(engines) {\n if (engines.length === 3) {\n return html`<span title=\"${l10n.inAllEngines}\">✅</span>`;\n }\n if (engines.length < 2) {\n return html`<span title=\"${l10n.inSomeEngines}\">🚫</span>`;\n }\n return html`<span> </span>`;\n}\n\n/**\n * @param {MdnEntry['engines']} engines\n * @returns {HTMLParagraphElement|undefined}\n */\nfunction getEngineSupport(engines) {\n if (engines.length === 3) {\n return html`<p class=\"engines-all\">${l10n.inAllEngines}</p>`;\n }\n if (engines.length < 2) {\n return html`<p class=\"engines-some\">${l10n.inSomeEngines}</p>`;\n }\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nfunction serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/search-specref\n// Search Specref database\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst URL = \"https://respec.org/specref/\";\n\nconst localizationStrings = {\n en: {\n search_specref: \"Search Specref\",\n },\n nl: {\n search_specref: \"Doorzoek Specref\",\n },\n ja: {\n search_specref: \"仕様検索\",\n },\n de: {\n search_specref: \"Spezifikationen durchsuchen\",\n },\n zh: {\n search_specref: \"搜索 Specref\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst button = ui.addCommand(\n l10n.search_specref,\n show,\n \"Ctrl+Shift+Alt+space\",\n \"🔎\"\n);\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n /** @type {HTMLElement} */\n const specrefSearchUI = html`\n <iframe class=\"respec-iframe\" src=\"${URL}\" onload=${onLoad}></iframe>\n <a href=\"${URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.search_specref, specrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/search-xref\n// Search xref database\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst URL = \"https://respec.org/xref/\";\n\nconst localizationStrings = {\n en: {\n title: \"Search definitions\",\n },\n ja: {\n title: \"定義検索\",\n },\n de: {\n title: \"Definitionen durchsuchen\",\n },\n zh: {\n title: \"搜索定义\",\n },\n};\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\nconst l10n = localizationStrings[lang];\n\nconst button = ui.addCommand(l10n.title, show, \"Ctrl+Shift+Alt+x\", \"📚\");\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n const xrefSearchUI = html`\n <iframe class=\"respec-iframe\" src=\"${URL}\" onload=\"${onLoad}\"></iframe>\n <a href=\"${URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.title, xrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","// @ts-check\n// Module w3c/seo\n// Manages SEO information for documents\n// e.g. set the canonical URL for the document if configured\nimport { resolveRef } from \"../core/biblio.js\";\nimport { showWarning } from \"../core/utils.js\";\nexport const name = \"w3c/seo\";\nexport async function run(conf) {\n // Don't include a canonical URL for documents\n // that haven't been published.\n if (!conf.canonicalURI) {\n switch (conf.specStatus) {\n case \"CG-DRAFT\":\n case \"BG-DRAFT\":\n case \"unofficial\":\n return;\n }\n }\n const trLatestUri = conf.shortName\n ? `https://www.w3.org/TR/${conf.shortName}/`\n : null;\n switch (conf.canonicalURI) {\n case \"edDraft\":\n if (conf.edDraftURI) {\n conf.canonicalURI = new URL(\n conf.edDraftURI,\n document.location.href\n ).href;\n } else {\n const msg = `Canonical URI set to edDraft, but no edDraftURI is set in configuration`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n break;\n case \"TR\":\n if (trLatestUri) {\n conf.canonicalURI = trLatestUri;\n } else {\n const msg = `Canonical URI set to TR, but no shortName is set in configuration`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n break;\n default:\n if (conf.canonicalURI) {\n try {\n conf.canonicalURI = new URL(\n conf.canonicalURI,\n document.location.href\n ).href;\n } catch (err) {\n const msg = `CanonicalURI is an invalid URL: ${err.message}`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n } else if (trLatestUri) {\n conf.canonicalURI = trLatestUri;\n }\n }\n if (conf.canonicalURI) {\n const linkElem = document.createElement(\"link\");\n linkElem.setAttribute(\"rel\", \"canonical\");\n linkElem.setAttribute(\"href\", conf.canonicalURI);\n document.head.appendChild(linkElem);\n }\n if (conf.doJsonLd) {\n await addJSONLDInfo(conf, document);\n }\n}\n\nasync function addJSONLDInfo(conf, doc) {\n // Content for JSON\n const type = [\"TechArticle\"];\n if (conf.rdfStatus) type.push(conf.rdfStatus);\n\n const jsonld = {\n \"@context\": [\n \"http://schema.org\",\n {\n \"@vocab\": \"http://schema.org/\",\n \"@language\": doc.documentElement.lang || \"en\",\n w3p: \"http://www.w3.org/2001/02pd/rec54#\",\n foaf: \"http://xmlns.com/foaf/0.1/\",\n datePublished: { \"@type\": \"http://www.w3.org/2001/XMLSchema#date\" },\n inLanguage: { \"@language\": null },\n isBasedOn: { \"@type\": \"@id\" },\n license: { \"@type\": \"@id\" },\n },\n ],\n id: conf.canonicalURI || conf.thisVersion,\n type,\n name: document.title,\n inLanguage: doc.documentElement.lang || \"en\",\n license: conf.licenseInfo.url,\n datePublished: conf.dashDate,\n /** @type {{ name: string, url?: string } | { name: string, url?: string }[]} */\n copyrightHolder: {\n name: \"World Wide Web Consortium\",\n url: \"https://www.w3.org/\",\n },\n discussionUrl: conf.issueBase,\n alternativeHeadline: conf.subtitle,\n isBasedOn: conf.prevVersion,\n };\n\n // add any additional copyright holders\n if (conf.additionalCopyrightHolders) {\n const addl = Array.isArray(conf.additionalCopyrightHolders)\n ? conf.additionalCopyrightHolders\n : [conf.additionalCopyrightHolders];\n jsonld.copyrightHolder = [\n jsonld.copyrightHolder,\n ...addl.map(h => ({ name: h })),\n ];\n }\n\n // description from meta description\n const description = doc.head.querySelector(\"meta[name=description]\");\n if (description) {\n jsonld.description = description.content;\n }\n\n // Editors\n if (conf.editors) {\n jsonld.editor = conf.editors.map(addPerson);\n }\n if (conf.authors) {\n jsonld.contributor = conf.authors.map(addPerson);\n }\n\n // normative and informative references\n const citationIds = [\n ...conf.normativeReferences,\n ...conf.informativeReferences,\n ];\n const citationContents = await Promise.all(\n citationIds.map(ref => resolveRef(ref))\n );\n jsonld.citation = citationContents\n .filter(ref => typeof ref === \"object\")\n .map(addRef);\n\n const script = doc.createElement(\"script\");\n script.type = \"application/ld+json\";\n script.textContent = JSON.stringify(jsonld, null, 2);\n doc.head.appendChild(script);\n}\n\n/**\n * Turn editors and authors into a list of JSON-LD relationships\n */\nfunction addPerson({ name, url, mailto, company, companyURL }) {\n const ed = {\n type: \"Person\",\n name,\n url,\n \"foaf:mbox\": mailto,\n };\n if (company || companyURL) {\n ed.worksFor = {\n name: company,\n url: companyURL,\n };\n }\n return ed;\n}\n\n/**\n * Create a reference URL from the ref\n */\nfunction addRef(ref) {\n const { href: id, title: name, href: url } = ref;\n const jsonld = {\n id,\n type: \"TechArticle\",\n name,\n url,\n };\n if (ref.authors) {\n jsonld.creator = ref.authors.map(a => ({ name: a }));\n }\n if (ref.rawDate) {\n jsonld.publishedDate = ref.rawDate;\n }\n if (ref.isbn) {\n jsonld.identifier = ref.isbn;\n }\n if (ref.publisher) {\n jsonld.publisher = { name: ref.publisher };\n }\n return jsonld;\n}\n","/*\nAdapted from Atom One Light by Daniel Gamage for ReSpec, with better color contrast\nOriginal One Light Syntax theme from https://github.com/atom/one-light-syntax\nbase: #fafafa\nmono-1: #383a42\nmono-2: #686b77\nmono-3: #a0a1a7\nhue-1: #0184bb\nhue-2: #4078f2\nhue-3: #a626a4\nhue-4: #50a14f\nhue-5: #e45649\nhue-5-2: #c91243\nhue-6: #986801\nhue-6-2: #c18401\n*/\n\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n color: #383a42;\n background: #fafafa;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #717277;\n font-style: italic;\n}\n\n.hljs-doctag,\n.hljs-keyword,\n.hljs-formula {\n color: #a626a4;\n}\n\n.hljs-section,\n.hljs-name,\n.hljs-selector-tag,\n.hljs-deletion,\n.hljs-subst {\n color: #ca4706;\n font-weight: bold;\n}\n\n.hljs-literal {\n color: #0b76c5;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta-string {\n color: #42803C;\n}\n\n.hljs-built_in,\n.hljs-class .hljs-title {\n color: #9a6a01;\n}\n\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-type,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-number {\n color: #986801;\n}\n\n.hljs-symbol,\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-title {\n color: #336ae3;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n.hljs-link {\n text-decoration: underline;\n}\n`;\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport css from \"../styles/highlight.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n document.head.appendChild(\n html`<style>\n ${css}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\n/**\n * Module core/data-tests\n *\n * Allows specs to link to test files in a test suite, by adding `details` of where\n * particular tests for a testable assertion can be found.\n *\n * `data-tests` takes a space separated list of URLs, e.g. data-test=\"foo.html bar.html\".\n *\n * Docs: https://github.com/w3c/respec/wiki/data-tests\n */\nimport { getIntlData, showError, showWarning } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst localizationStrings = {\n en: {\n missing_test_suite_uri:\n \"Found tests in your spec, but missing '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.\",\n tests: \"tests\",\n test: \"test\",\n },\n ja: {\n missing_test_suite_uri:\n \"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.\",\n tests: \"テスト\",\n test: \"テスト\",\n },\n de: {\n missing_test_suite_uri:\n \"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.\",\n tests: \"Tests\",\n test: \"Test\",\n },\n zh: {\n missing_test_suite_uri:\n \"本规范中包含测试,但在 ReSpec 配置中缺少 '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。\",\n tests: \"测试\",\n test: \"测试\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport const name = \"core/data-tests\";\n\nfunction toListItem(href) {\n const emojiList = [];\n const [testFile] = new URL(href).pathname.split(\"/\").reverse();\n const testParts = testFile.split(\".\");\n let [testFileName] = testParts;\n\n const isSecureTest = testParts.find(part => part === \"https\");\n if (isSecureTest) {\n const requiresConnectionEmoji = document.createElement(\"span\");\n requiresConnectionEmoji.textContent = \"🔒\";\n requiresConnectionEmoji.setAttribute(\n \"aria-label\",\n \"requires a secure connection\"\n );\n requiresConnectionEmoji.setAttribute(\"title\", \"Test requires HTTPS\");\n testFileName = testFileName.replace(\".https\", \"\");\n emojiList.push(requiresConnectionEmoji);\n }\n\n const isManualTest = testFileName\n .split(\".\")\n .join(\"-\")\n .split(\"-\")\n .find(part => part === \"manual\");\n if (isManualTest) {\n const manualPerformEmoji = document.createElement(\"span\");\n manualPerformEmoji.textContent = \"💪\";\n manualPerformEmoji.setAttribute(\n \"aria-label\",\n \"the test must be run manually\"\n );\n manualPerformEmoji.setAttribute(\"title\", \"Manual test\");\n testFileName = testFileName.replace(\"-manual\", \"\");\n emojiList.push(manualPerformEmoji);\n }\n\n const testList = html`\n <li>\n <a href=\"${href}\">${testFileName}</a>\n ${emojiList}\n </li>\n `;\n return testList;\n}\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n if (!testables.length) {\n return;\n }\n if (!conf.testSuiteURI) {\n showError(l10n.missing_test_suite_uri, name);\n return;\n }\n\n for (const elem of testables) {\n const tests = elem.dataset.tests.split(/,/gm).map(url => url.trim());\n const testURLs = toTestURLs(tests, conf.testSuiteURI);\n handleDuplicates(testURLs, elem);\n const details = toHTML(testURLs);\n elem.append(details);\n }\n}\n\n/**\n * @param {string[]} tests\n * @param {string} testSuiteURI\n */\nfunction toTestURLs(tests, testSuiteURI) {\n return tests\n .map(test => {\n try {\n return new URL(test, testSuiteURI).href;\n } catch {\n const msg = `Bad URI: ${test}`;\n showWarning(msg, name);\n }\n })\n .filter(href => href);\n}\n\n/**\n * @param {string[]} testURLs\n * @param {HTMLElement} elem\n */\nfunction handleDuplicates(testURLs, elem) {\n const duplicates = testURLs.filter(\n (link, i, self) => self.indexOf(link) !== i\n );\n if (duplicates.length) {\n const msg = `Duplicate tests found`;\n const hint = `To fix, remove duplicates from \"data-tests\": ${duplicates\n .map(url => new URL(url).pathname)\n .join(\", \")}`;\n showWarning(msg, name, { hint, elements: [elem] });\n }\n}\n\n/**\n * @param {string[]} testURLs\n */\nfunction toHTML(testURLs) {\n const uniqueList = [...new Set(testURLs)];\n const details = html`\n <details class=\"respec-tests-details removeOnSave\">\n <summary>tests: ${uniqueList.length}</summary>\n <ul>\n ${uniqueList.map(toListItem)}\n </ul>\n </details>\n `;\n return details;\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\nvar.respec-hl {\n color: var(--color, #000);\n background-color: var(--bg-color);\n box-shadow: 0 0 0px 2px var(--bg-color);\n}\n\n/* highlight colors\n https://github.com/w3c/tr-design/issues/152\n*/\nvar.respec-hl-c1 {\n --bg-color: #f4d200;\n}\n\nvar.respec-hl-c2 {\n --bg-color: #ff87a2;\n}\n\nvar.respec-hl-c3 {\n --bg-color: #96e885;\n}\n\nvar.respec-hl-c4 {\n --bg-color: #3eeed2;\n}\n\nvar.respec-hl-c5 {\n --bg-color: #eacfb6;\n}\n\nvar.respec-hl-c6 {\n --bg-color: #82ddff;\n}\n\nvar.respec-hl-c7 {\n --bg-color: #ffbcf2;\n}\n\n@media print {\n var.respec-hl {\n background: none;\n color: #000;\n box-shadow: unset;\n }\n}\n`;\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport css from \"../styles/var.css.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","/* dfn popup panel that list all local references to a dfn */\n/**\n * TODO: Revert changes due to https://github.com/w3c/respec/pull/2888 when\n * https://github.com/w3c/css-validator/pull/111 is fixed.\n */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\ndfn {\n cursor: pointer;\n}\n\n.dfn-panel {\n position: absolute;\n z-index: 35;\n min-width: 300px;\n max-width: 500px;\n padding: 0.5em 0.75em;\n margin-top: 0.6em;\n font: small Helvetica Neue, sans-serif, Droid Sans Fallback;\n background: #fff;\n color: black;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n}\n/* Triangle/caret */\n.dfn-panel:not(.docked) > .caret {\n position: absolute;\n top: -9px;\n}\n.dfn-panel:not(.docked) > .caret::before,\n.dfn-panel:not(.docked) > .caret::after {\n content: \"\";\n position: absolute;\n border: 10px solid transparent;\n border-top: 0;\n border-bottom: 10px solid #fff;\n top: 0;\n}\n.dfn-panel:not(.docked) > .caret::before {\n border-bottom: 9px solid #a2a9b1;\n}\n\n.dfn-panel * {\n margin: 0;\n}\n\n.dfn-panel b {\n display: block;\n color: #000;\n margin-top: 0.25em;\n}\n\n.dfn-panel ul a[href] {\n color: #333;\n}\n\n.dfn-panel > div {\n display: flex;\n}\n\n.dfn-panel a.self-link {\n font-weight: bold;\n margin-right: auto;\n}\n\n.dfn-panel .marker {\n padding: 0.1em;\n margin-left: 0.5em;\n border-radius: 0.2em;\n text-align: center;\n white-space: nowrap;\n font-size: 90%;\n color: #040b1c;\n}\n\n.dfn-panel .marker.dfn-exported {\n background: #d1edfd;\n box-shadow: 0 0 0 0.125em #1ca5f940;\n}\n.dfn-panel .marker.idl-block {\n background: #8ccbf2;\n box-shadow: 0 0 0 0.125em #0670b161;\n}\n\n.dfn-panel a:not(:hover) {\n text-decoration: none !important;\n border-bottom: none !important;\n}\n\n.dfn-panel a[href]:hover {\n border-bottom-width: 1px;\n}\n\n.dfn-panel ul {\n padding: 0;\n}\n\n.dfn-panel li {\n margin-left: 1em;\n}\n\n.dfn-panel.docked {\n position: fixed;\n left: 0.5em;\n top: unset;\n bottom: 2em;\n margin: 0 auto;\n /* 0.75em from padding (x2), 0.5em from left position, 0.2em border (x2) */\n max-width: calc(100vw - 0.75em * 2 - 0.5em - 0.2em * 2);\n max-height: 30vh;\n overflow: auto;\n}\n`;\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport css from \"../styles/dfn-panel.css.js\";\nimport { fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar {\n position: relative;\n cursor: pointer;\n}\n\nvar[data-type]::before,\nvar[data-type]::after {\n position: absolute;\n left: 50%;\n top: -6px;\n opacity: 0;\n transition: opacity 0.4s;\n pointer-events: none;\n}\n\n/* the triangle or arrow or caret or whatever */\nvar[data-type]::before {\n content: \"\";\n transform: translateX(-50%);\n border-width: 4px 6px 0 6px;\n border-style: solid;\n border-color: transparent;\n border-top-color: #000;\n}\n\n/* actual text */\nvar[data-type]::after {\n content: attr(data-type);\n transform: translateX(-50%) translateY(-100%);\n background: #000;\n text-align: center;\n /* additional styling */\n font-family: \"Dank Mono\", \"Fira Code\", monospace;\n font-style: normal;\n padding: 6px;\n border-radius: 3px;\n color: #daca88;\n text-indent: 0;\n font-weight: normal;\n}\n\nvar[data-type]:hover::after,\nvar[data-type]:hover::before {\n opacity: 1;\n}\n`;\n","// @ts-check\n/**\n * Module core/data-type\n * Propagates data type of a <var> to subsequent instances within a section.\n * Also adds the CSS for the data type tooltip.\n * Set `conf.highlightVars = true` to enable.\n */\nimport css from \"../styles/datatype.css.js\";\n\nexport const name = \"core/data-type\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n let section = null;\n const varMap = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const variables = document.querySelectorAll(\"section var\");\n for (const varElem of variables) {\n const currentSection = varElem.closest(\"section\");\n if (section !== currentSection) {\n section = currentSection;\n varMap.clear();\n }\n if (varElem.dataset.type) {\n varMap.set(varElem.textContent.trim(), varElem.dataset.type);\n continue;\n }\n const type = varMap.get(varElem.textContent.trim());\n if (type) varElem.dataset.type = type;\n }\n}\n","/* For assertions in lists containing algorithms */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.assert {\n background: #eee;\n border-left: 0.5em solid #aaa;\n padding: 0.3em;\n}\n`;\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\nimport css from \"../styles/algorithms.css.js\";\n\nexport const name = \"core/algorithms\";\n\nexport function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n","// @ts-check\n/**\n * Fetches commits between two commitish (tag or commit) - `from` and `to=HEAD`\n * and shows them as a list of \"changes during\" those commitish. If a filter\n * function is provided by the user, it is used to filter the commits that are\n * to be shown. Otherwise, all commits are shown.\n *\n * @typedef {{message: string, hash: string}} Commit\n */\nimport { github } from \"../github.js\";\nimport { html } from \"../import-maps.js\";\nimport { showError } from \"../utils.js\";\n\nexport const name = \"rs-changelog\";\n\nexport const element = class ChangelogElement extends HTMLElement {\n constructor() {\n super();\n this.props = {\n from: this.getAttribute(\"from\"),\n to: this.getAttribute(\"to\") || \"HEAD\",\n /** @type {(commit: Commit) => boolean} */\n filter:\n typeof window[this.getAttribute(\"filter\")] === \"function\"\n ? window[this.getAttribute(\"filter\")]\n : () => true,\n };\n }\n\n connectedCallback() {\n const { from, to, filter } = this.props;\n html.bind(this)`\n <ul>\n ${{\n any: fetchCommits(from, to, filter)\n .then(commits => toHTML(commits))\n .catch(error => showError(error.message, name, { elements: [this] }))\n .finally(() => {\n this.dispatchEvent(new CustomEvent(\"done\"));\n }),\n placeholder: \"Loading list of commits...\",\n }}\n </ul>\n `;\n }\n};\n\nasync function fetchCommits(from, to, filter) {\n /** @type {Commit[]} */\n let commits;\n try {\n const gh = await github;\n if (!gh) {\n throw new Error(\"`respecConfig.github` is not set\");\n }\n const url = new URL(\"commits\", `${gh.apiBase}/${gh.fullName}/`);\n url.searchParams.set(\"from\", from);\n url.searchParams.set(\"to\", to);\n\n const res = await fetch(url.href);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n commits = await res.json();\n if (!commits.length) {\n throw new Error(`No commits between ${from}..${to}.`);\n }\n commits = commits.filter(filter);\n } catch (error) {\n const msg = `Error loading commits from GitHub. ${error.message}`;\n console.error(error);\n throw new Error(msg);\n }\n return commits;\n}\n\nasync function toHTML(commits) {\n const { repoURL } = await github;\n return commits.map(commit => {\n const [message, prNumber = null] = commit.message.split(/\\(#(\\d+)\\)/, 2);\n const commitURL = `${repoURL}commit/${commit.hash}`;\n const prURL = prNumber ? `${repoURL}pull/${prNumber}` : null;\n const pr = prNumber && html` (<a href=\"${prURL}\">#${prNumber}</a>)`;\n return html`<li><a href=\"${commitURL}\">${message.trim()}</a>${pr}</li>`;\n });\n}\n","// @ts-check\n/**\n * Registers custom elements and waits for them to finish their processing.\n *\n * Every custom element file exports:\n * - `name`: registered name of the custom element, prefixed with `rs-`.\n * - `element`: class defintion of the custom element.\n *\n * Every custom element must dispatch a CustomEvent 'done' that tells the\n * element has finished its processing, with or without errors.\n *\n * @typedef {{ name: string, element: CustomElementConstructor }} CustomElementDfn\n */\n\nimport * as changelog from \"./rs-changelog.js\";\n/** @type {CustomElementDfn[]} */\nconst CUSTOM_ELEMENTS = [changelog];\n\nexport const name = \"core/custom-elements/index\";\n\nexport async function run() {\n // prepare and register elements\n CUSTOM_ELEMENTS.forEach(el => {\n customElements.define(el.name, el.element);\n });\n\n // wait for each element to be ready\n const selectors = CUSTOM_ELEMENTS.map(el => el.name).join(\", \");\n const elems = document.querySelectorAll(selectors);\n const readyPromises = [...elems].map(\n el => new Promise(res => el.addEventListener(\"done\", res, { once: true }))\n );\n await Promise.all(readyPromises);\n}\n","// @ts-check\n/**\n * Module: core/a11y\n * Lints for accessibility issues using axe-core package.\n */\n\nimport { showError, showWarning } from \"./utils.js\";\n\nexport const name = \"core/a11y\";\n\nconst DISABLED_RULES = [\n \"color-contrast\", // too slow 🐢\n \"landmark-one-main\", // need to add a <main>, else it marks entire page as errored\n \"landmark-unique\",\n \"region\",\n];\n\nexport async function run(conf) {\n if (!conf.a11y) {\n return;\n }\n\n const options = conf.a11y === true ? {} : conf.a11y;\n const violations = await getViolations(options);\n for (const violation of violations) {\n /**\n * We're grouping by failureSummary as it contains hints to fix the issue.\n * For example, with color-constrast rule, it tells about the present color\n * contrast and how to fix it. If we don't group, errors will be repetitive.\n * @type {Map<string, HTMLElement[]>}\n */\n const groupedBySummary = new Map();\n for (const node of violation.nodes) {\n const { failureSummary, element } = node;\n const elements =\n groupedBySummary.get(failureSummary) ||\n groupedBySummary.set(failureSummary, []).get(failureSummary);\n elements.push(element);\n }\n\n const { id, help, description, helpUrl } = violation;\n const title = `a11y/${id}: ${help}`;\n for (const [failureSummary, elements] of groupedBySummary) {\n const hints = formatHintsAsMarkdown(failureSummary);\n const details = `\\n\\n${description}.\\n\\n${hints}. ([Learn more](${helpUrl}))`;\n showWarning(title, name, { details, elements });\n }\n }\n}\n\n/**\n * @param {object} opts Options as described at https://github.com/dequelabs/axe-core/blob/develop/doc/API.md#options-parameter\n */\nasync function getViolations(opts) {\n const { rules, ...otherOptions } = opts;\n const options = {\n rules: {\n ...Object.fromEntries(DISABLED_RULES.map(id => [id, { enabled: false }])),\n ...rules,\n },\n ...otherOptions,\n elementRef: true,\n resultTypes: [\"violations\"],\n reporter: \"v1\", // v1 includes a `failureSummary`\n };\n\n let axe;\n try {\n axe = await importAxe();\n } catch (error) {\n const msg = \"Failed to load a11y linter.\";\n showError(msg, name);\n console.error(error);\n return [];\n }\n\n try {\n const result = await axe.run(document, options);\n return result.violations;\n } catch (error) {\n const msg = \"Error while looking for a11y issues.\";\n showError(msg, name);\n console.error(error);\n return [];\n }\n}\n\n/** @returns {Promise<typeof window.axe>} */\nfunction importAxe() {\n const script = document.createElement(\"script\");\n script.classList.add(\"remove\");\n script.src = \"https://unpkg.com/axe-core@3/axe.min.js\";\n document.head.appendChild(script);\n return new Promise((resolve, reject) => {\n script.onload = () => resolve(window.axe);\n script.onerror = reject;\n });\n}\n\n/** @param {string} text */\nfunction formatHintsAsMarkdown(text) {\n const results = [];\n for (const group of text.split(\"\\n\\n\")) {\n const [msg, ...opts] = group.split(/^\\s{2}/m);\n const options = opts.map(opt => `- ${opt.trimEnd()}`).join(\"\\n\");\n results.push(`${msg}${options}`);\n }\n return results.join(\"\\n\\n\");\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","source","position","current","kind","level","autofix","ruleName","sliceTokens","count","slice","Math","max","tokensToText","inputs","precedes","text","t","trivia","join","nextToken","type","length","line","precedingLastLine","splitted","split","lastLine","subsequentTokens","subsequentText","sourceContext","repeat","contextType","context","partial","node","hierarchy","parent","unshift","n","base","appendIfExist","contextAsText","bareMessage","sourceName","input","tokens","syntaxError","validationError","token","options","Base","Object","defineProperties","writable","json","inheritance","proto","descMap","getOwnPropertyDescriptors","key","entries","enumerable","getPrototypeOf","idlTypeIncludesDictionary","idlType","defs","useNullableInner","union","def","unique","typedefIncludesDictionary","cache","reference","dictionary","nullable","subtype","dictionaryIncludesRequiredField","dict","members","field","required","superdict","ArrayBase","Array","super","Token","tokeniser","consume","unescape","tokenName","list","parser","listName","extAttrValueSyntax","renamedLegacies","extAttrListItems","syntax","toks","ExtendedAttributeParameters","assign","ret","autoParenter","secondaryName","rhsIsList","argument_list","close","hasRhs","rhsType","SimpleExtendedAttribute","params","parse","defineProperty","rhs","arguments","extAttr","arg","validate","ExtendedAttributes","push","probe","type_suffix","obj","single_type","typeName","Type","return_type","type_with_extended_attributes","keyType","stringTypes","keyIdlType","separator","valueType","generic_type","primitive_type","typeNameKeywords","generic","typ","or","union_type","extAttrs","Boolean","prefix","postfix","filter","typedef","targetToken","Default","const_value","expression","const_data","negative","Argument","start_position","optional","variadic","argumentNameKeywords","default","unconsume","autofixOptionalDictionaryDefaultValue","indexOf","a","isLastRequiredArgument","firstToken","getFirstToken","Tokeniser","Operation","special","regular","termination","argument","Attribute","noInherit","readonly","identifier","startsWith","allowDangler","first","items","item","num_type","integer_type","decimal_type","voidToken","stringifier","getLastIndentation","str","lines","match","autofixAddExposedWindow","exposed","existing","test","data","values","x","y","p","isArray","tokenRe","decimal","integer","string","whitespace","comment","other","nonRegexTerminals","concat","punctuations","reserved","idl","lastCharIndex","nextChar","charAt","attemptTokenMatch","noFlushTrivia","currentTrivia","pop","lastIndex","WebIDLParseError","punctuation","re","exec","tokenise","candidates","EnumValue","Enum","Includes","mixin","Typedef","CallbackFunction","Container","instance","inheritable","allowedMembers","colon","ea","mem","member","Constant","IterableLike","secondTypeRequired","secondTypeAllowed","argumentAllowed","argsOpen","argsClose","Constructor","static_member","Interface","every","oldConstructors","constructor","autofixConstructor","factoryFunctions","named","constructors","i","opNames","Set","getOperations","op","partials","mixins","mixinMap","ext","additions","forEachExtension","addition","add","existings","checkInterfaceMemberDuplication","interfaceDef","constructorExtAttr","indentation","memberIndent","parentTrivia","indentCh","getMemberIndentation","constructorOp","existingIndex","array","predicate","reverse","findIndex","findLastIndex","m","splice","removed","trim","Mixin","Field","Dictionary","Namespace","CallbackInterface","parseByTokens","interface_","opts","definition","res","eof","concrete","definitions","noop","templates","nameless","extendedAttribute","extendedAttributeReference","getMixinMap","include","validateIterable","ast","duplicates","groupDefinitions","dup","checkDuplicatedNames","ts","raw","unescaped","wrapper","reference_token","name_token","type_body","it","ref","extended_attributes","default_","extended_attribute_listitem","make_ext_at","id","endsWith","eats","container","inh","iterate","iterable_like","table","interface","interface mixin","namespace","operation","body","attribute","const","enum","enum-value","v","iterable","maplike","setlike","callback interface","things","thing","dispatch","flat","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","_","toLowerCase","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","href","rtrim","relativeBase","invert","l","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","merge","hasOwnProperty","splitCells","tableRow","cells","offset","escaped","curr","findClosingBracket","b","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","title","Tokenizer_1","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","indentCodeCompensation","heading","trimmed","depth","nptable","header","align","hr","blockquote","bull","isordered","ordered","start","loose","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","tag","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","prevRenderer","prevTokenizer","lexInline","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","r","delete","configurable","o","s","WeakSet","u","insertBefore","selected","selectedIndex","f","querySelectorAll","w","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","g","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","_wire$","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","component","setState","idb","_idb","webidl2","_webidl2","_marked","_pluralize","dashes","getIntlData","x_and_y","x_y_and_z","ISODate","Intl","DateTimeFormat","timeZone","year","month","day","nonNormativeSelector","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","mapper","docLang","ListFormat","format","lastComma","and","xmlEscape","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","concatDate","date","sep","humanDate","Date","langs","toLocaleString","runTransforms","flist","funcArgs","methods","meth","showWarning","fetchAndCache","maxAge","Request","cachedResponse","caches","headers","response","fetch","ok","clonedResponse","clone","customHeaders","Headers","expiryDate","now","toISOString","cacheResponse","Response","blob","put","htmlJoinComma","joined","htmlJoinAnd","addHashId","addId","hash","char","imul","hashString","pfx","txt","noLC","normalize","getElementById","nextId","getDfnTitles","titleSet","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","element","closestInformative","closest","isInformative","querySelector","illegal","wrapInner","outer","parents","selector","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","getCanonicalKey","existingKey","find","makeSafeCopy","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","walkTree","nextNode","CaseInsensitiveMap","RespecError","plugin","isWarning","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","docLink","subscriptions","topic","from","cb","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","respecVersion","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","head","includeConfig","URLSearchParams","search","overrideEntries","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","reindent","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","prepend","Builder","tagName","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","css","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hasLink","isLegacyFrag","LEGACY_OPTIONS","getGroupDetails","group","shortname","wgId","wg","URI","wgURI","patentURI","wgPatentURI","patentPolicy","wgPatentPolicy","groupType","status","usedLegacyOptions","groupDetails","groups","getMultipleGroupDetails","showLink","class","showLinkData","showLogo","logo","alt","img","width","height","until","es","ko","ja","zh","defaultLang","orcidIcon","showPeople","persons","personName","company","editorid","w3cid","dd","span","contents","mailto","orcid","companyURL","note","extras","extra","getExtra","retiredDate","isValidDate","timeElem","dateTime","textContainer","ccLicense","w3cLicense","legalDisclaimer","w3cTrademark","author","authors","editor","editors","former_editor","former_editors","latest_editors_draft","latest_published_version","edited_in_place","this_version","test_suite","implementation_report","prev_editor_draft","prev_version","prev_recommendation","latest_recommendation","nl","logos","specSubTitleElem","subtitle","getSpecSubTitleElem","prependW3C","isCR","longStatus","textStatus","dashDate","publishHumanDate","modificationDate","modificationHumanDate","inPlaceModificationDate","isNoTrack","thisVersion","latestVersion","edDraftURI","testSuiteURI","implementationReportURI","isED","prevED","showPreviousVersion","prevVersion","prevRecURI","isRec","multipleEditors","formerEditors","multipleFormerEditors","multipleAuthors","otherLinks","errata","shortName","alternateFormats","multipleAlternates","alternatesHTML","existingCopyright","overrideCopyright","isUnofficial","licenseInfo","linkLicense","short","copyrightStart","publishYear","additionalCopyrightHolders","isCCBY","noteIfDualLicense","isW3CSoftAndDocLicense","linkDocumentUse","renderOfficialCopyright","renderCopyright","cssClass","specTitleElem","specTitleElemClone","isCGFinal","sotd","isPreview","renderPreview","additionalContent","renderIsUnofficial","isTagFinding","isMO","renderIsNoTrack","status_at_publication","isSubmission","isMemberSubmission","teamComment","publishDate","getUTCFullYear","submissionCommentNumber","patentPolicyURL","noteForMemberSubmission","isTeamSubmission","renderPublicList","noteForTeamSubmission","noteForSubmission","sotdAfterWGinfo","overrideStatus","proposedChanges","revisionTypes","wgHTML","anOrA","notYetRec","linkToWorkingGroup","linkToCommunity","updateableRec","humanRevisedRecEnd","reviewTarget","renderIsRec","statusExplanation","updatePolicy","reviewPolicy","specStatus","pubMode","humanCREnd","isPR","humanPREnd","isPER","humanPEREnd","renderNotRec","isNote","isIGNote","multipleWGs","recNotExpected","wgPatentHTML","charterDisclosureURI","producers","renderDeliverer","addPatentNote","additionalSections","prUrl","prNumber","mailToWGPublicListWithSubject","mailToWGPublicListSubscription","wgPublicList","subjectPrefix","github","issueBase","W3CDate","status2maturity","LS","LD","FPWD","LC","FPLC","FPWD-NOTE","WD-NOTE","LC-NOTE","IG-NOTE","WG-NOTE","status2rdf","NOTE","WD","CR","CRD","PR","REC","PER","RSCND","status2text","CG-NOTE","Member-SUBM","Team-SUBM","MO","ED","unofficial","finding","draft-finding","CG-DRAFT","CG-FINAL","BG-DRAFT","BG-FINAL","status2long","maybeRecTrack","recTrackStatus","cgStatus","bgStatus","cgbgStatus","noTrackStatus","precededByAn","licenses","patentPolicies","baseLogo","freeze","validateDateAndRecover","fallbackDate","Number","isFinite","formattedDate","collectSotdContent","sotdClone","hasChildNodes","license","licensesKeys","isCGBG","isBasic","isRegular","host","pathname","lastModified","isRecTrack","noRecTrack","memSubmissionLogo","teamSubmissionLogo","linkGroup","hasGitHubIssuesLink","maturity","publishSpace","skipLatestVersion","previousPublishDate","previousMaturity","pmat","prevRecShortname","peopCheck","orcidUrl","orcidId","lastDigit","lastDigitInt","reduce","acc","lastDigitShould","normalizeOrcid","uri","rdfStatus","showThisVersion","isCRDraft","publishISODate","shortISODate","policies","size","policy","validatePatentPolicies","urlParts","pos","cgbgHeadersTmpl","headersTmpl","wgPotentialArray","idx","pats","crEnd","prEnd","perEnd","unknownRevisionType","revisedRecEnd","contains","mailToWGPublicList","encodeURIComponent","cgbgSotdTmpl","sotdTmpl","populateSoTD","generatedSubtitle","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","hasNoHeading","offendingMembers","getOwnPropertyNames","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","highlightVars","addSectionLinks","filesInWPT","githubAPIBase","wptDirectory","testSuiteURL","searchParams","files","entry","getFilesInWPT","githubAPI","offendingTests","testables","tests","missingTests","privsecSectionRule","wptTestsExist","w3cLogo","w3cDefaults","wpt-tests-exist","doJsonLd","xref","toMDCode","validateStatusForGroup","insertStyle","noReSpecCSS","resourceHints","createResourceHints","createBaseStyle","delimiter","toKeyValuePairs","initial-scale","shrink-to-fit","createMetaViewport","styleFile","styleVersion","isNaN","selectStyleVersion","useExperimentalStyles","noToc","attachFixupScript","finalStyleURL","linkURL","styles","frag","nextLink","linkCSS","exportDoc","w3cStyle","resolveGithubPromise","rejectGithubPromise","file_a_bug","participate","commit_history","ghURL","tempURL","repoURL","org","repo","branch","newProps","githubToken","githubUser","atRiskBase","pullBase","otherLink","hostname","normalizedGHObj","apiBase","fullName","normalizedConfig","processResponse","rawData","el","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","includeId","default_title","h1Elem","isConnected","documentTitle","setDocumentTitle","isInteger","abstract","abs","abstractHeading","processDfnElement","abbr","fullForm","insertAdjacentHTML","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","allArgs","SyntaxError","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","openIdb","biblioDB","isAlias","resolveAlias","TypeError","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","promisesToAdd","flatMap","isInDB","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","addAll","resolveRef","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","etAl","publisher","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","conformance","normativity","keywordInterpretation","terms","processConformance","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","plurals","userDefinedPlurals","uniquePlurals","makeTitle","num","report","number","examples","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","handleIssues","ins","ghIssues","getIssueNumber","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","makeIssueSectionSummary","issuesAndNotes","issueNumbers","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","list_of_figures","fig","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","decorateTableOfFigures","topLevelEntities","findDfn","defn","findNormalDfn","findOperationDfn","resolvedName","dfns","getDfns","alternativeDfns","decorateDfn","dfnElem","idlAst","lCaseParent","last","dfnFor","getDataType","local","exportable","addAlternativeNames","asQualifiedName","operationName","argsAst","operationNames","isOptional","requiredArgs","requiredOperation","optionalOps","generateMethodNamesWithArgs","getAlternativeNames","originalName","foundDfns","dfnForArray","closestDfnFor","idlStruct","copyButton","createButton","addCopyIDLButton","idlHeader","idlText","clipboard","writeText","idlPartials","Text","keyword","wrapped","idlLink","defineIdlName","getIdlDefinitionClassName","parentName","idlId","getNameAndId","getDfnType","unlinkedAnchor","nameResolverMap","getDefnName","getIdlId","resolvePartial","overload","qualifiedName","fullyQualifiedName","resolveOverload","resolveNameAndId","renderWebIDL","idlElement","highlights","write","closestCite","cites","addIDLHeader","idls","astArray","validations","validation","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","cleanup","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","STORE_NAME","VERSION_CHECK_WAIT","getIdbCache","resolveXrefCache","queries","cachedData","lastChecked","localStorage","getItem","setItem","API_URL","lastUpdated","shouldBustCache","clearXrefData","requiredKeySet","query","cursor","profiles","web-platform","getRequestEntry","getTermFromElement","specs","dataciteElem","closestSection","inlineRefs","higherPriority","uniqueSpecs","dedupeSpecContext","getSpecContext","types","getTypeContext","dataXrefForElem","getForContext","addDataCite","normative","closestNormative","closestInform","addToReferences","objectHash","buffer","TextEncoder","crypto","subtle","digest","bufferToHexString","Uint8Array","padStart","invalidProfileError","profile","normalizeConfig","bodyCite","externalDFNs","findExplicitExternalLinks","queryKeys","apiUrl","uniqueIds","uniqueQueryKeys","resultsFromCache","termsToLook","fetchedResults","Content-Type","fetchFromNetwork","cacheXrefData","getData","ambiguous","notFound","collector","getPrefilledFormURL","howToCiteURL","originalTerm","formUrl","specsString","showErrors","addDataCiteToTerms","idlIndexSec","idlIndex","headingExternal","headlingLocal","dfnOf","CODE_TYPES","getLocalTermType","getLocalTermParentContext","getLocalTermSuffix","appendSectionNumbers","secNum","getSectionNumber","collectExternalTerms","uniqueReferences","uniqueID","renderExternalTermEntry","typeSuffix","TYPE_TERMS","TYPED_TYPES","linkForText","getTermText","styleEl","localTermIndex","dataSortedByTerm","collectLocalTerms","renderItem","suffix","getLocalTermText","renderLocalTerm","createLocalTermIndex","externalTermIndex","dataSortedBySpec","specA","specB","createExternalTermIndex","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","BROWSERS","fetchStats","feature","versions","browsers","statusText","caniuse","DEFAULTS","caniuseConf","invalidBrowsers","browser","getNormalizedConf","fetchPromise","featureURL","headDlElem","contentPromise","stats","definitionPair","outputDoc","BASE_JSON_PATH","MDN_BROWSERS","chrome","chrome_android","edge","edge_mobile","firefox","firefox_android","ie","opera","opera_android","safari","safari_ios","samsunginternet_android","webview_android","inAllEngines","inSomeEngines","insertMDNBox","targetAncestor","targetSibling","mdnBox","attachMDNDetail","mdnSpec","summary","support","engines","mdnSubPath","engineSupport","getEngineSupportIcons","getEngineSupport","createRow","browserId","yesNoUnknown","displayStatus","createRowFromBrowserData","versionData","version_removed","versionAdded","version_added","buildBrowserSupportTable","mdnKey","mdn","getMdnKey","mdnSpecJson","mdnConf","baseJsonPath","getMdnData","findElements","mdnSpecArray","mimeTypes","rsDocToDataURL","mimeType","validTypes","cloneDoc","insertions","metaViewport","metaCharset","metaGenerator","XMLSerializer","serializeToString","outerHTML","prettify","doctype","save_snapshot","downloadLinks","fileName","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","search_specref","specrefSearchUI","xrefSearchUI","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","addPerson","ed","foaf:mbox","worksFor","addRef","jsonld","creator","rawDate","publishedDate","isbn","canonicalURI","trLatestUri","@context","@vocab","@language","w3p","foaf","datePublished","@type","inLanguage","isBasedOn","copyrightHolder","discussionUrl","alternativeHeadline","addl","contributor","citationIds","citationContents","citation","addJSONLDInfo","fetchBase","workerPromise","workerScript","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","counter","gen","idGenerator","msgIdGenerator","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","missing_test_suite_uri","toListItem","emojiList","testFile","testParts","testFileName","requiresConnectionEmoji","manualPerformEmoji","toTestURLs","handleDuplicates","testURLs","uniqueList","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","activeClass","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","varMap","variables","currentSection","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors","HTMLElement","props","to","fetchCommits","commits","commit","commitURL","pr","finally","gh","CUSTOM_ELEMENTS","customElements","readyPromises","DISABLED_RULES","formatHintsAsMarkdown","a11y","violations","otherOptions","enabled","elementRef","resultTypes","reporter","axe","onload","onerror","importAxe","getViolations","violation","groupedBySummary","failureSummary","helpUrl","hints"],"mappings":"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OAAOV,EAAU2B,cAAcjB,EAAK,GAAIA,EAAK,OAM/C,CACE,CAAC,MAAO,IACR,CAAC,SAAU,MACX,CAAC,gEAAiE,QAClE,CAAC,kCAAmC,OACpC,CAAC,QAAS,KACV,CAAC,uFAAwF,QACzF,CAAC,oBAAqB,QACtB,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC5f6BkC,GAAU,SAASC,GAAgB,IAAIzoB,EAAE,GAAG,IAAIA,EAAErG,QAAQA,QAAQ,MAAM8f,GAAGzZ,EAAErG,QAAQ,SAASqG,EAAEyZ,GAAG,IAAInY,EAAEmY,EAAE1T,eAAe2iB,EAAEjP,E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"} \ No newline at end of file diff --git a/builds/respec-worker.js b/builds/respec-worker.js index 7c79913e05..5fe023fcdd 100644 --- a/builds/respec-worker.js +++ b/builds/respec-worker.js @@ -1,5 +1,4 @@ // ReSpec Worker v1.0.0 -"use strict"; try { importScripts("https://www.w3.org/Tools/respec/respec-highlight"); } catch (err) { diff --git a/package-lock.json b/package-lock.json index 30b245650e..1b9670b117 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "respec", - "version": "26.4.0", + "version": "26.4.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 785d653d58..5c2e75be82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "respec", - "version": "26.4.0", + "version": "26.4.1", "license": "W3C", "description": "A technical specification pre-processor.", "engines": { From 6a20c0701ce21f47840ff0f397d83a09c7484290 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Mon, 29 Mar 2021 17:24:43 +0530 Subject: [PATCH 05/19] chore(ci/changelog): use updated setup-ruby action --- .github/workflows/changelog.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index f640e2f311..2c56143b7a 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -13,7 +13,10 @@ jobs: - uses: actions/checkout@v2 with: ref: develop - - uses: actions/setup-ruby@v1 + - uses: ruby/setup-ruby@v1 + with: + ruby-version: 2.6 + bundler-cache: true - run: gem install github_changelog_generator - run: github_changelog_generator -u w3c -p respec --no-unreleased env: From 0b9e000e06d09deda4000933570e3d23f390a147 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Mon, 29 Mar 2021 17:50:36 +0530 Subject: [PATCH 06/19] feat(core/respec-global): add toHTML() method (#3403) * use `document.respec.toHTML()` in respecDocWriter if available. --- src/core/exporter.js | 2 +- src/core/respec-global.js | 5 +++++ tests/spec/SpecHelper.js | 14 +++----------- tests/spec/core/respec-global-spec.js | 17 +++++++++++++++++ tools/respecDocWriter.js | 4 +++- 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/core/exporter.js b/src/core/exporter.js index 41140125b1..c039ffc0ac 100644 --- a/src/core/exporter.js +++ b/src/core/exporter.js @@ -36,7 +36,7 @@ export function rsDocToDataURL(mimeType, doc = document) { return `data:${mimeType};charset=utf-8,${encodedString}`; } -function serialize(format, doc) { +export function serialize(format, doc) { const cloneDoc = doc.cloneNode(true); cleanup(cloneDoc); let result = ""; diff --git a/src/core/respec-global.js b/src/core/respec-global.js index b5b18f5391..07c8d16407 100644 --- a/src/core/respec-global.js +++ b/src/core/respec-global.js @@ -8,6 +8,7 @@ * This module also adds the legacy `document.respecIsReady` property for * backward compatibility. It is now an alias to `document.respec.ready`. */ +import { serialize } from "../core/exporter.js"; import { showWarning } from "../core/utils.js"; import { sub } from "./pubsubhub.js"; @@ -40,6 +41,10 @@ class ReSpec { get ready() { return this._respecDonePromise; } + + async toHTML() { + return serialize("html", document); + } } export function init() { diff --git a/tests/spec/SpecHelper.js b/tests/spec/SpecHelper.js index 850a24fcab..7330f73be0 100644 --- a/tests/spec/SpecHelper.js +++ b/tests/spec/SpecHelper.js @@ -49,7 +49,7 @@ export function makeRSDoc(opts, src, style = "") { } else { const doc = document.implementation.createHTMLDocument(); decorateDocument(doc, opts); - ifr.srcdoc = doc.documentElement.outerHTML; + ifr.srcdoc = `<!DOCTYPE html>${doc.documentElement.outerHTML}`; } // trigger load document.body.appendChild(ifr); @@ -62,19 +62,11 @@ export function makeRSDoc(opts, src, style = "") { * @returns {Promise<Document>} */ export async function getExportedDoc(doc) { - const dataURL = await new Promise(resolve => { - doc.defaultView.require(["core/exporter"], ({ rsDocToDataURL }) => - resolve(rsDocToDataURL("text/html", doc)) - ); - }); - + const exportedHTML = await doc.respec.toHTML(); return new Promise(resolve => { const ifr = document.createElement("iframe"); ifr.addEventListener("load", () => resolve(ifr.contentDocument)); - ifr.srcdoc = decodeURIComponent(dataURL).replace( - "data:text/html;charset=utf-8,", - "" - ); + ifr.srcdoc = exportedHTML; document.body.appendChild(ifr); iframes.push(ifr); }); diff --git a/tests/spec/core/respec-global-spec.js b/tests/spec/core/respec-global-spec.js index 1559928800..585a154df7 100644 --- a/tests/spec/core/respec-global-spec.js +++ b/tests/spec/core/respec-global-spec.js @@ -43,4 +43,21 @@ describe("Core — Respec Global - document.respec", () => { expect(doc.respec.errors).toHaveSize(0); }); + + it("returns exported html with toHTML()", async () => { + const ops = makeStandardOps(); + const doc = await makeRSDoc(ops); + + const html = await doc.respec.toHTML(); + expect(typeof html).toBe("string"); + + const regex = new RegExp(`^<!DOCTYPE html>\\s*<html.+lang="en"`); + expect(html.slice(0, 40)).toMatch(regex); + + const exportedDoc = new DOMParser().parseFromString(html, "text/html"); + // <meta name=generator> is added in exported docs only. + const generator = exportedDoc.querySelector("meta[name=generator]"); + expect(generator).toBeTruthy(); + expect(generator.content).toContain("ReSpec"); + }); }); diff --git a/tools/respecDocWriter.js b/tools/respecDocWriter.js index 00aff742c3..7ce7a3c8ca 100644 --- a/tools/respecDocWriter.js +++ b/tools/respecDocWriter.js @@ -240,7 +240,7 @@ async function evaluateHTML(version, timer) { }); }); return exportDocument("html", "text/html"); - } else { + } else if (!document.respec || !document.respec.toHTML) { const { rsDocToDataURL } = await new Promise((resolve, reject) => { require(["core/exporter"], resolve, err => { reject(new Error(err.message)); @@ -249,6 +249,8 @@ async function evaluateHTML(version, timer) { const dataURL = rsDocToDataURL("text/html"); const encodedString = dataURL.replace(/^data:\w+\/\w+;charset=utf-8,/, ""); return decodeURIComponent(encodedString); + } else { + return await document.respec.toHTML(); } function timeout(promise, ms) { From f529649de3ef325533db4494014893d722b39ce6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 29 Mar 2021 20:00:48 +0530 Subject: [PATCH 07/19] chore(CHANGELOG): regenerate (#3419) Co-authored-by: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc7c7d559f..6581508523 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Changelog +## [v26.4.1](https://github.com/w3c/respec/tree/v26.4.1) (2021-03-29) + +[Full Changelog](https://github.com/w3c/respec/compare/v26.4.0...v26.4.1) + +**Fixed bugs:** + +- "group" option still complains about patent policy [\#3399](https://github.com/w3c/respec/issues/3399) + +**Merged pull requests:** + +- fix\(w3c/headers\): handle multiple patent policies [\#3411](https://github.com/w3c/respec/pull/3411) ([marcoscaceres](https://github.com/marcoscaceres)) +- refactor\(tools/dev-server\): add promisified KarmaServer [\#3410](https://github.com/w3c/respec/pull/3410) ([sidvishnoi](https://github.com/sidvishnoi)) +- tests\(build\): fix fileExists check, remove chai, run in CI [\#3408](https://github.com/w3c/respec/pull/3408) ([sidvishnoi](https://github.com/sidvishnoi)) +- chore\(karma.conf.js\): cleanup [\#3407](https://github.com/w3c/respec/pull/3407) ([sidvishnoi](https://github.com/sidvishnoi)) +- refactor\(ui/search-specref\): embed iframe from respec.org [\#3405](https://github.com/w3c/respec/pull/3405) ([sidvishnoi](https://github.com/sidvishnoi)) +- fix\(core/biblio\): use specref.org API endpoint [\#3404](https://github.com/w3c/respec/pull/3404) ([sidvishnoi](https://github.com/sidvishnoi)) +- refactor\(styles\): convert css files to js [\#3402](https://github.com/w3c/respec/pull/3402) ([sidvishnoi](https://github.com/sidvishnoi)) +- chore: remove unused files, config and packges [\#3400](https://github.com/w3c/respec/pull/3400) ([sidvishnoi](https://github.com/sidvishnoi)) +- chore\(deps\): update dependencies [\#3397](https://github.com/w3c/respec/pull/3397) ([sidvishnoi](https://github.com/sidvishnoi)) +- chore\(deps-dev\): use updated rollup plugins [\#3392](https://github.com/w3c/respec/pull/3392) ([sidvishnoi](https://github.com/sidvishnoi)) +- chore\(CHANGELOG\): regenerate [\#3391](https://github.com/w3c/respec/pull/3391) ([github-actions[bot]](https://github.com/apps/github-actions)) +- refactor: build respec-highlight alongside respec-worker [\#3390](https://github.com/w3c/respec/pull/3390) ([sidvishnoi](https://github.com/sidvishnoi)) + ## [v26.4.0](https://github.com/w3c/respec/tree/v26.4.0) (2021-03-21) [Full Changelog](https://github.com/w3c/respec/compare/v26.3.0...v26.4.0) From f10bde6b037ac32c3bbc084cef1e18bb8a90b087 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Tue, 30 Mar 2021 05:48:47 +0530 Subject: [PATCH 08/19] refactor(tests/headless): use jasmine instead of custom runner (#3421) --- package.json | 2 +- tests/headless.js | 92 +++++++++++++++++------------------------------ 2 files changed, 33 insertions(+), 61 deletions(-) diff --git a/package.json b/package.json index 5c2e75be82..02987a70cb 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "server": "serve", "start": "node ./tools/dev-server.js", "test:build": "jasmine --random=false ./tests/test-build.js", - "test:headless": "node ./tests/headless.js", + "test:headless": "jasmine --random=false ./tests/headless.js", "test:karma": "karma start --single-run" }, "dependencies": { diff --git a/tests/headless.js b/tests/headless.js index 3caff6e8a9..d744501a6e 100644 --- a/tests/headless.js +++ b/tests/headless.js @@ -1,17 +1,39 @@ -#!/usr/bin/env node // @ts-check /* eslint-env node */ -"use strict"; -const port = 5000; -const testURLs = [ - `http://localhost:${port}/examples/basic.built.html`, - `http://localhost:${port}/examples/basic.html`, -]; -const colors = require("colors"); const { exec } = require("child_process"); - -const handler = require("serve-handler"); const http = require("http"); +const serveHandler = require("serve-handler"); + +const port = 5000; +const timeout = 30; // seconds + +describe("Headless (examples)", () => { + beforeAll(() => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = timeout * 1000; + const server = http.createServer(serveHandler); + server.listen(port); + }); + + it("builds basic.html without errors", async () => { + const exe = toExecutable( + toCommand(`http://localhost:${port}/examples/basic.html`) + ); + await expectAsync(exe.run()).toBeResolved(); + }); + + it("builds basic.built.html without errors", async () => { + const exe = toExecutable( + toCommand(`http://localhost:${port}/examples/basic.built.html`) + ); + await expectAsync(exe.run()).toBeResolved(); + }); +}); + +function toCommand(src) { + const command = `node ./tools/respec2html.js ${src}`; + const options = ["-e", `--timeout ${timeout}`]; + return `${command} ${options.join(" ")}`; +} function toExecutable(cmd) { return { @@ -32,53 +54,3 @@ function toExecutable(cmd) { }, }; } - -async function runRespec2html() { - const server = http.createServer(handler); - server.listen(port); - - const errors = new Set(); - // Incrementally spawn processes and add them to process counter. - const executables = testURLs.map(url => { - const disableSandbox = process.env.TRAVIS ? " --disable-sandbox" : ""; - const cmd = `node ./tools/respec2html.js ${url} -e${disableSandbox} --timeout 30`; - return toExecutable(cmd); - }); - let testCount = 1; - for (const exe of executables) { - try { - const testInfo = colors.green(`(test ${testCount++}/${testURLs.length})`); - const msg = ` 👷‍♀️ ${exe.cmd} ${testInfo}`; - debug(msg); - await exe.run(); - } catch (err) { - // eslint-disable-next-line no-console - console.error(colors.red(err)); - errors.add(exe.cmd); - } - } - if (errors.size) { - const files = [...errors].join(", "); - throw new Error(` ❌ File(s) generated errors: ${files}.`); - } -} - -function debug(msg) { - const currentTime = new Date().toLocaleTimeString("en-US"); - // eslint-disable-next-line no-console - console.log(`${colors.grey(currentTime)} ${colors.cyan(msg)}`); -} - -async function run() { - debug(" ⏲ Running ReSpec2html tests..."); - try { - await runRespec2html(); - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - process.exit(1); - } - process.exit(0); -} - -run(); From caf7facd1228d1a11de44351695703fd7fceb8b1 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Tue, 30 Mar 2021 06:04:55 +0530 Subject: [PATCH 09/19] chore(deps): update dependencies (#3417) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marcos Cáceres <marcos@marcosc.com> --- package-lock.json | 178 +++++++++++++++++++++++++++++----------------- package.json | 10 +-- 2 files changed, 119 insertions(+), 69 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1b9670b117..13358c3429 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,9 +74,9 @@ } }, "@rollup/plugin-commonjs": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", - "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-18.0.0.tgz", + "integrity": "sha512-fj92shhg8luw7XbA0HowAqz90oo7qtLGwqTKbyZ8pmOyH8ui5e+u0wPEgeHLH3djcVma6gUCUrjY6w5R2o1u6g==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -108,24 +108,6 @@ "path-is-absolute": "^1.0.0" } }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -139,9 +121,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", - "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -152,15 +134,6 @@ "resolve": "^1.19.0" }, "dependencies": { - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -266,6 +239,15 @@ "integrity": "sha1-a9p9uGU/piZD9e5p6facEaOS46Y=", "dev": true }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/uglify-js": { "version": "3.13.0", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.0.tgz", @@ -729,9 +711,9 @@ "dev": true }, "builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true }, "bytes": { @@ -740,6 +722,16 @@ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1329,9 +1321,9 @@ "dev": true }, "eslint": { - "version": "7.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.22.0.tgz", - "integrity": "sha512-3VawOtjSJUQiiqac8MQc+w457iGLfuNGLFn8JmF051tTKbh5/x/0vlcEj8OgDCaw7Ysa2Jn8paGshV7x2abKXg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", + "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", @@ -1951,6 +1943,17 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -1982,9 +1985,9 @@ } }, "globals": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.6.0.tgz", - "integrity": "sha512-YFKCX0SiPg7l5oKYCJ2zZGxcXprVXHcSnVuvzrT3oSENQonVLqM5pf9fN5dLGZGyCjhw8TN8Btwe/jKnZ0pjvQ==", + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", + "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -2208,6 +2211,15 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, "is-callable": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", @@ -2274,6 +2286,21 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, "is-regex": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", @@ -2450,9 +2477,9 @@ } }, "karma": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.2.0.tgz", - "integrity": "sha512-pCB8eNxGgdIdZeC885rbhZ/VyuOPNHUIDNL9EaaMf1NVzpvTjMO8a7zRTn51ZJhOOOxCSpalUdT1A8x76LyVqg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.1.tgz", + "integrity": "sha512-Is71g0f1dIpbLTXA+ULpev1i1soczQ1Dr8oum3zSmBFsDl3IWUlTLytsCb9os4v9xvUVWGDz0sCmLO4veANnSw==", "dev": true, "requires": { "body-parser": "^1.19.0", @@ -2622,6 +2649,24 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -3460,9 +3505,9 @@ } }, "rollup": { - "version": "2.42.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.42.2.tgz", - "integrity": "sha512-o34Ar4rf01ky4EV1RFlTPd+tXICDz13a2o1PARLPFBxighJoPsxvliJTrULqjmIVpZP+JPm499ZPkvnPzRxUYA==", + "version": "2.43.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.43.1.tgz", + "integrity": "sha512-kvRE6VJbiv4d8m2nGeccc3qRpzOMghAhu2KeITjyZVCjneIFLPQ3zm2Wmqnl0LcUg3FvDaV0MfKnG4NCMbiSfw==", "dev": true, "requires": { "fsevents": "~2.3.1" @@ -3520,9 +3565,9 @@ "dev": true }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -4080,21 +4125,26 @@ } }, "table": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.7.tgz", - "integrity": "sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==", - "dev": true, - "requires": { - "ajv": "^7.0.2", - "lodash": "^4.17.20", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.8.tgz", + "integrity": "sha512-OBAdezyozae8IvjHGXBDHByVkLCcsmffXUSj8LXkNb0SluRd4ug3GFCjk6JynZONIPhOkyr0Nnvbq1rlIspXyQ==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.0" }, "dependencies": { "ajv": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.1.tgz", - "integrity": "sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.1.tgz", + "integrity": "sha512-46ZA4TalFcLLqX1dEU3dhdY38wAtDydJ4e7QQTVekLUTzXkb1LfqU6VOBXC/a9wiv4T094WURqJH6ZitF92Kqw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -4223,9 +4273,9 @@ "dev": true }, "ua-parser-js": { - "version": "0.7.24", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.24.tgz", - "integrity": "sha512-yo+miGzQx5gakzVK3QFfN0/L9uVhosXBBO7qmnk7c2iw1IhL212wfA3zbnI54B0obGwC/5NWub/iT9sReMx+Fw==", + "version": "0.7.26", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.26.tgz", + "integrity": "sha512-VwIvGlFNmpKbjzRt51jpbbFTrKIEgGHxIwA8Y69K1Bqc6bTIV7TaGGABOkghSFQWsLmcRB4drGvpfv9z2szqoQ==", "dev": true }, "uarray": { diff --git a/package.json b/package.json index 02987a70cb..c7964da99a 100644 --- a/package.json +++ b/package.json @@ -24,15 +24,15 @@ ], "devDependencies": { "@rollup/plugin-alias": "^3.1.2", - "@rollup/plugin-commonjs": "^17.1.0", - "@rollup/plugin-node-resolve": "^11.2.0", + "@rollup/plugin-commonjs": "^18.0.0", + "@rollup/plugin-node-resolve": "^11.2.1", "@types/marked": "^2.0.0", "@types/pluralize": "0.0.29", "boxen": "^5.0.0", "chokidar": "^3.5.1", "clean-css": "^5.1.2", "epipebomb": "^1.0.0", - "eslint": "^7.22.0", + "eslint": "^7.23.0", "eslint-config-prettier": "^8.1.0", "eslint-plugin-import": "^2.22.1", "eslint-plugin-jasmine": "^4.1.2", @@ -41,7 +41,7 @@ "hyperhtml": "^2.34.0", "idb": "^6.0.0", "jasmine": "^3.7.0", - "karma": "^6.2.0", + "karma": "^6.3.1", "karma-chrome-launcher": "^3.1.0", "karma-firefox-launcher": "^2.1.0", "karma-jasmine": "^4.0.1", @@ -52,7 +52,7 @@ "pluralize": "^8.0.0", "prettier": "^2.2.1", "prompt": "^1.1.0", - "rollup": "^2.42.2", + "rollup": "^2.43.1", "rollup-plugin-minify-html-literals": "^1.2.6", "rollup-plugin-terser": "^7.0.2", "serve": "^11.3.2", From 3902764b0cf6d1dafc13944def4d5d5500417a70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Mar 2021 12:13:21 +1100 Subject: [PATCH 10/19] chore(deps-dev): bump rollup from 2.42.2 to 2.44.0 (#3422) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13358c3429..9f8dcf5bc0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3505,9 +3505,9 @@ } }, "rollup": { - "version": "2.43.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.43.1.tgz", - "integrity": "sha512-kvRE6VJbiv4d8m2nGeccc3qRpzOMghAhu2KeITjyZVCjneIFLPQ3zm2Wmqnl0LcUg3FvDaV0MfKnG4NCMbiSfw==", + "version": "2.44.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.44.0.tgz", + "integrity": "sha512-rGSF4pLwvuaH/x4nAS+zP6UNn5YUDWf/TeEU5IoXSZKBbKRNTCI3qMnYXKZgrC0D2KzS2baiOZt1OlqhMu5rnQ==", "dev": true, "requires": { "fsevents": "~2.3.1" diff --git a/package.json b/package.json index c7964da99a..4231716c8f 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "pluralize": "^8.0.0", "prettier": "^2.2.1", "prompt": "^1.1.0", - "rollup": "^2.43.1", + "rollup": "^2.44.0", "rollup-plugin-minify-html-literals": "^1.2.6", "rollup-plugin-terser": "^7.0.2", "serve": "^11.3.2", From 4d053eda5ff38bc2480cb3ce4e845a1751399dce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Mar 2021 14:52:59 +1100 Subject: [PATCH 11/19] chore(deps-dev): bump karma from 6.2.0 to 6.3.2 (#3423) --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9f8dcf5bc0..f5db939c80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2477,9 +2477,9 @@ } }, "karma": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.1.tgz", - "integrity": "sha512-Is71g0f1dIpbLTXA+ULpev1i1soczQ1Dr8oum3zSmBFsDl3IWUlTLytsCb9os4v9xvUVWGDz0sCmLO4veANnSw==", + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.2.tgz", + "integrity": "sha512-fo4Wt0S99/8vylZMxNj4cBFyOBBnC1bewZ0QOlePij/2SZVWxqbyLeIddY13q6URa2EpLRW8ixvFRUMjkmo1bw==", "dev": true, "requires": { "body-parser": "^1.19.0", diff --git a/package.json b/package.json index 4231716c8f..961c8a3137 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "hyperhtml": "^2.34.0", "idb": "^6.0.0", "jasmine": "^3.7.0", - "karma": "^6.3.1", + "karma": "^6.3.2", "karma-chrome-launcher": "^3.1.0", "karma-firefox-launcher": "^2.1.0", "karma-jasmine": "^4.0.1", From 58b109736dc713352ce535d98cbe486cb2c0a89d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20C=C3=A1ceres?= <marcos@marcosc.com> Date: Tue, 30 Mar 2021 17:20:36 +1100 Subject: [PATCH 12/19] fix(w3c/headers): wgPatentPolicy may be falsy (#3424) --- src/w3c/headers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/w3c/headers.js b/src/w3c/headers.js index fe00e93334..f9b6239f1b 100644 --- a/src/w3c/headers.js +++ b/src/w3c/headers.js @@ -726,7 +726,7 @@ export function run(conf) { } function validatePatentPolicies(conf) { - if (!conf.hasOwnProperty("wgPatentPolicy")) return; + if (!conf.wgPatentPolicy) return; const policies = new Set([].concat(conf.wgPatentPolicy)); if ( From 24f779fcdac463700889d8ead97e0ded757aacc3 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Tue, 30 Mar 2021 13:19:04 +0530 Subject: [PATCH 13/19] chore(tools/builder): add a --watch flag (#3406) --- tools/builder.js | 86 ++++++++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 32 deletions(-) diff --git a/tools/builder.js b/tools/builder.js index 72a1eee826..2747ffd175 100755 --- a/tools/builder.js +++ b/tools/builder.js @@ -1,17 +1,13 @@ #!/usr/bin/env node - "use strict"; const sade = require("sade"); const colors = require("colors"); -const { promises: fsp } = require("fs"); +const { readFileSync } = require("fs"); const path = require("path"); -const { rollup } = require("rollup"); +const rollup = require("rollup"); const alias = require("@rollup/plugin-alias"); -colors.setTheme({ - error: "red", - info: "white", -}); +const rel = p => path.relative(process.cwd(), p); /** * @param {object} opts @@ -38,46 +34,30 @@ const Builder = { /** * Async function that gets the current version of ReSpec from package.json * - * @returns {Promise<String>} The version string. + * @returns {string} The version string. */ - getRespecVersion: async () => { + getRespecVersion: () => { const packagePath = path.join(__dirname, "../package.json"); - const content = await fsp.readFile(packagePath, "utf-8"); + const content = readFileSync(packagePath, "utf-8"); return JSON.parse(content).version; }, - /** - * Async function runs Requirejs' optimizer to generate the output. - * - * using a custom configuration. - * @param {object} options - * @param {string} options.name - * @param {boolean} options.debug - */ - async build({ name, debug }) { + _getOptions(name, { debug }) { if (!name) { throw new TypeError("name is required"); } const buildPath = path.join(__dirname, "../builds"); const outFile = `respec-${name}.js`; const outPath = path.join(buildPath, outFile); - console.log(colors.info(`Generating ${outFile}. Please wait...`)); - - // optimisation settings - const version = await this.getRespecVersion(); + const version = this.getRespecVersion(); + /** @type {import("rollup").InputOptions} */ const inputOptions = { input: require.resolve(`../profiles/${name}.js`), plugins: [ !debug && require("rollup-plugin-terser").terser(), alias({ - resolve: [".css", ".svg", ".js"], - entries: [ - { - find: /^text!(.*)/, - replacement: "./$1", - }, - ], + entries: [{ find: /^text!(.*)/, replacement: "./$1" }], }), string({ include: [/\.runtime\.js$/, /\.svg$/, /respec-worker\.js$/], @@ -102,6 +82,8 @@ const Builder = { }, inlineDynamicImports: true, }; + + /** @type {import("rollup").OutputOptions} */ const outputOptions = { file: outPath, format: "iife", @@ -109,8 +91,43 @@ const Builder = { banner: `window.respecVersion = "${version}";\n`, }; - const bundle = await rollup(inputOptions); + return { inputOptions, outputOptions }; + }, + + /** + * @param {object} options + * @param {string} options.name Name of the profile (in `/profiles` dierctory) to build. + * @param {boolean} options.debug Don't run minifiers if true. + */ + async build({ name, debug }) { + const { inputOptions, outputOptions } = this._getOptions(name, { debug }); + console.log(`Building ${rel(inputOptions.input)}. Please wait...`); + const bundle = await rollup.rollup(inputOptions); await bundle.write(outputOptions); + console.log(` Wrote ${rel(outputOptions.file)}.`); + }, + + watch({ name, debug }) { + const { inputOptions, outputOptions } = this._getOptions(name, { debug }); + const watcher = rollup.watch({ ...inputOptions, output: outputOptions }); + watcher.on("event", async ev => { + switch (ev.code) { + case "BUNDLE_START": + console.log(`Building ${rel(ev.input)}. Please wait...`); + break; + case "BUNDLE_END": + console.log( + ` Wrote ${rel(ev.output[0])} in ${ev.duration}ms.`, + "Watching for file changes..." + ); + await ev.result.close(); + break; + case "ERROR": + console.log(ev.error); + break; + } + }); + return watcher; }, }; @@ -125,11 +142,16 @@ if (require.main === module) { `w3c --debug ${colors.dim("# Build W3C profile without optimizations.")}` ) .option("-d, --debug", "Disable optimization to ease debugging", false) + .option("-w, --watch", "Automatically re-build on file changes", false) .action(async (profile, opts) => { + if (opts.watch) { + Builder.watch({ name: profile, debug: opts.debug }); + return; + } try { await Builder.build({ name: profile, debug: opts.debug }); } catch (err) { - console.error(colors.error(err.stack)); + console.error(colors.red(err.stack)); return process.exit(1); } }) From 98e4a029257be445f1aa82a09443aa787a5e1dca Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Tue, 30 Mar 2021 19:07:03 +0530 Subject: [PATCH 14/19] tests: support testing individual modules (#3418) --- .github/workflows/pr.yml | 6 +- .github/workflows/push.yml | 2 +- package.json | 5 +- karma.conf.js => tests/karma.conf.base.js | 23 ++-- tests/spec/karma.conf.js | 21 ++++ tests/unit/SpecHelper.js | 107 ++++++++++++++++++ .../core/highlight-vars-spec.js | 25 ++-- tests/unit/karma.conf.js | 21 ++++ tools/dev-server.js | 79 ++++++++++--- 9 files changed, 243 insertions(+), 46 deletions(-) rename karma.conf.js => tests/karma.conf.base.js (84%) create mode 100644 tests/spec/karma.conf.js create mode 100644 tests/unit/SpecHelper.js rename tests/{spec => unit}/core/highlight-vars-spec.js (79%) create mode 100644 tests/unit/karma.conf.js diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 6c4a3600f2..04215fc196 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -14,6 +14,7 @@ env: PUPPETEER_EXECUTABLE_PATH: /usr/bin/google-chrome # See https://github.com/w3c/respec/pull/3306 LC_ALL: en_US.UTF-8 + FORCE_COLOR: 1 jobs: lint: @@ -72,6 +73,9 @@ jobs: run: | npm ci npm run build:w3c & npm run build:geonovum - - run: npm run test:karma + - run: npm run test:unit + env: + BROWSERS: ${{ matrix.browser }} + - run: npm run test:integration env: BROWSERS: ${{ matrix.browser }} diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 285f0353fb..319bbe31fd 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -67,6 +67,6 @@ jobs: run: | npm ci npm run build:w3c & npm run build:geonovum - - run: npm run test:karma + - run: npm test env: BROWSERS: ChromeHeadless diff --git a/package.json b/package.json index 961c8a3137..ec61ff877c 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,6 @@ "build:dini-debug": "node run build:dini -- --debug", "build:dini": "node ./tools/builder.js dini", "builddeps": "rollup -c js/deps/rollup.config.js && rollup -c worker/rollup.config.js", - "karma": "karma start --single-run", "lint": "tsc -p src/jsconfig.json && eslint .", "prepare": "npm run builddeps", "release": "node ./tools/release.js", @@ -75,7 +74,9 @@ "start": "node ./tools/dev-server.js", "test:build": "jasmine --random=false ./tests/test-build.js", "test:headless": "jasmine --random=false ./tests/headless.js", - "test:karma": "karma start --single-run" + "test": "npm run test:unit && npm run test:integration", + "test:unit": "karma start ./tests/unit/karma.conf.js --single-run", + "test:integration": "karma start ./tests/spec/karma.conf.js --single-run" }, "dependencies": { "colors": "^1.4.0", diff --git a/karma.conf.js b/tests/karma.conf.base.js similarity index 84% rename from karma.conf.js rename to tests/karma.conf.base.js index 7ea8a15825..42fab15e26 100644 --- a/karma.conf.js +++ b/tests/karma.conf.base.js @@ -1,9 +1,12 @@ // @ts-check +/* eslint-env node */ +const path = require("path"); + /** @param {import("karma").Config} config */ module.exports = config => { /** @type {import("karma").ConfigOptions} */ const options = { - basePath: "./", + basePath: path.join(__dirname, ".."), frameworks: ["jasmine"], files: [ { @@ -34,15 +37,6 @@ module.exports = config => { pattern: "tests/test-main.js", type: "module", }, - { - pattern: "tests/spec/SpecHelper.js", - type: "module", - }, - { - pattern: "tests/spec/**/*-spec.js", - included: false, - type: "module", - }, ], exclude: ["**/*.swp", "*.swp", ".DS_Store"], @@ -55,6 +49,7 @@ module.exports = config => { "/builds/": "/base/builds/", "/tests/": "/base/tests/", "/spec/": "/base/tests/spec/", + "/unit/": "/base/tests/unit/", "/deps/": "/base/js/deps/", "/js/deps/": "/base/js/deps/", "/base/deps/": "/base/js/deps/", @@ -67,7 +62,7 @@ module.exports = config => { port: 9876, colors: true, - logLevel: config.LOG_INFO, + logLevel: config.LOG_WARN, autoWatch: true, singleRun: false, concurrency: 1, @@ -85,10 +80,12 @@ module.exports = config => { } if (process.env.GITHUB_WORKFLOW) { - const localPlugins = [require.resolve("./tools/github-action-reporter.js")]; + const localPlugins = [ + require.resolve("../tools/github-action-reporter.js"), + ]; options.reporters.push("respec-github-action"); options.plugins = ["karma-*"].concat(localPlugins); } - config.set(options); + return options; }; diff --git a/tests/spec/karma.conf.js b/tests/spec/karma.conf.js new file mode 100644 index 0000000000..9bc72ae120 --- /dev/null +++ b/tests/spec/karma.conf.js @@ -0,0 +1,21 @@ +// @ts-check +/* eslint-env node */ +const baseConfig = require("../karma.conf.base.js"); + +/** @param {import("karma").Config} config */ +module.exports = config => { + const options = baseConfig(config); + + options.files.push({ + pattern: "tests/spec/SpecHelper.js", + type: "module", + included: false, + }); + options.files.push({ + pattern: "tests/spec/**/*-spec.js", + type: "module", + included: false, + }); + + config.set(options); +}; diff --git a/tests/unit/SpecHelper.js b/tests/unit/SpecHelper.js new file mode 100644 index 0000000000..37528ec5d5 --- /dev/null +++ b/tests/unit/SpecHelper.js @@ -0,0 +1,107 @@ +"use strict"; +const iframes = []; + +/** + * Create a doc for unit tests. + * @param {string[]} plugins Paths of plugins to load and run. Example: `/src/core/algorithms.js` + * @param {object} [options] + * @param {object} [options.config] JSON-serializable respecConfig object. + * @param {string|null} [options.head] + * @param {string} [options.body] + * @return {Promise<Document>} + */ +export function makePluginDoc( + plugins, + { config = {}, head = "", body = "" } = {} +) { + return getDoc(` + <!DOCTYPE html> + <html lang="en"> + <head> + ${head !== null ? `<meta charset="UTF-8" />${head}` : ""} + <script> + var respecConfig = ${JSON.stringify(config || {}, null, 2)}; + </script> + <script type="module"> + async function run(plugins) { + const allPlugins = ["/src/core/base-runner.js"] + .concat(plugins) + .map(p => "/base" + p); + try { + const [baseRunner, ...plugs] = await Promise.all( + allPlugins.map(plug => import(plug)) + ); + await baseRunner.runAll(plugs); + } catch (err) { + console.error(err); + if (document.respec) { + document.respec.errors.push(err); + } else { + Object.defineProperty(document, "respec", { + value: { ready: Promise.reject(err) }, + }); + } + } + } + run(${JSON.stringify(plugins)}); + </script> + </head> + <body>${body}</body> + </html> + `); +} + +/** + * @param {string} html + * @return {Promise<Document>} + */ +function getDoc(html) { + return new Promise((resolve, reject) => { + const ifr = document.createElement("iframe"); + ifr.addEventListener("load", () => + waitReady(ifr).then(resolve).catch(reject) + ); + ifr.style.display = "none"; + const doc = new DOMParser().parseFromString(html, "text/html"); + ifr.srcdoc = doc.documentElement.outerHTML; + + // trigger load + document.body.appendChild(ifr); + iframes.push(ifr); + }); +} + +/** + * @param {HTMLIFrameElement} iframe + * @return {Promise<Document>} + */ +async function waitReady(iframe) { + const timeoutId = setTimeout(() => { + throw new Error(`Timed out waiting for document.respec.ready.`); + }, jasmine.DEFAULT_TIMEOUT_INTERVAL); + + const doc = iframe.contentDocument; + if (doc.respec) { + await doc.respec.ready; + clearTimeout(timeoutId); + return doc; + } + + return await new Promise(res => { + window.addEventListener("message", function msgHandler(ev) { + if (!doc || !ev.source || doc !== ev.source.document) return; + if (ev.data.topic === "end-all") { + window.removeEventListener("message", msgHandler); + clearTimeout(timeoutId); + res(doc); + } + }); + }); +} + +export function flushIframes() { + while (iframes.length) { + // Popping them from the list prevents memory leaks. + iframes.pop().remove(); + } +} diff --git a/tests/spec/core/highlight-vars-spec.js b/tests/unit/core/highlight-vars-spec.js similarity index 79% rename from tests/spec/core/highlight-vars-spec.js rename to tests/unit/core/highlight-vars-spec.js index 202bb3cdc9..10f1d66b50 100644 --- a/tests/spec/core/highlight-vars-spec.js +++ b/tests/unit/core/highlight-vars-spec.js @@ -1,13 +1,14 @@ "use strict"; -import { flushIframes, makeRSDoc, makeStandardOps } from "../SpecHelper.js"; - -// TODO: add tests: -// - right colors are applied +import { flushIframes, makePluginDoc } from "../SpecHelper.js"; describe("Core - highlightVars", () => { afterAll(flushIframes); - const testBody = ` + + const plugins = ["/src/core/highlight-vars.js"]; + const config = { highlightVars: true }; + + const body = ` <section id="section1"> <p><var id="section1-foo">a foo</var></p> <ol> @@ -34,9 +35,10 @@ describe("Core - highlightVars", () => { </section> `; + const makeDoc = () => makePluginDoc(plugins, { config, body }); + it("toggles highlight class on click", async () => { - const ops = makeStandardOps({ highlightVars: true }, testBody); - const doc = await makeRSDoc(ops); + const doc = await makeDoc(); const elemVar = doc.getElementById("section1-foo"); elemVar.click(); // enable @@ -49,8 +51,7 @@ describe("Core - highlightVars", () => { }); it("removes highlight when clicked outside", async () => { - const ops = makeStandardOps({ highlightVars: true }, testBody); - const doc = await makeRSDoc(ops); + const doc = await makeDoc(); const elemVar = doc.getElementById("section1-bar"); @@ -60,8 +61,7 @@ describe("Core - highlightVars", () => { }); it("highlights variables only in current section", async () => { - const ops = makeStandardOps({ highlightVars: true }, testBody); - const doc = await makeRSDoc(ops); + const doc = await makeDoc(); doc.getElementById("section1-foo").click(); const highlightedSec1 = doc.querySelectorAll("#section1 var.respec-hl"); @@ -75,8 +75,7 @@ describe("Core - highlightVars", () => { }); it("doesn't overmatch outside its own section's vars", async () => { - const ops = makeStandardOps({ highlightVars: true }, testBody); - const doc = await makeRSDoc(ops); + const doc = await makeDoc(); expect(doc.querySelector("var.respec-hl")).toBeNull(); doc.getElementById("level-1").click(); expect(doc.querySelector("#level-1-1.respec-hl")).toBeTruthy(); diff --git a/tests/unit/karma.conf.js b/tests/unit/karma.conf.js new file mode 100644 index 0000000000..39b9837f81 --- /dev/null +++ b/tests/unit/karma.conf.js @@ -0,0 +1,21 @@ +// @ts-check +/* eslint-env node */ +const baseConfig = require("../karma.conf.base.js"); + +/** @param {import("karma").Config} config */ +module.exports = config => { + const options = baseConfig(config); + + options.files.push({ + pattern: "tests/unit/SpecHelper.js", + type: "module", + included: false, + }); + options.files.push({ + pattern: "tests/unit/**/*-spec.js", + type: "module", + included: false, + }); + + config.set(options); +}; diff --git a/tools/dev-server.js b/tools/dev-server.js index 1082eb9dd0..b7c6a7db71 100644 --- a/tools/dev-server.js +++ b/tools/dev-server.js @@ -1,3 +1,15 @@ +/** + * This tools lets one effectively run: + * $ npm run build:w3c + * $ npm run server + * $ npm run test:unit + * $ npm run test:integration + * with ability to: + * - build/test when a file changes + * - build/test on a single keypress (interactive mode) + * - cleanup builds/ directory after use. + */ + const path = require("path"); const { execSync } = require("child_process"); const { createServer } = require("http"); @@ -10,21 +22,26 @@ const sade = require("sade"); const serveConfig = require("../serve.json"); const { Builder } = require("./builder"); -const KARMA_PORT = 9876; +const KARMA_PORT_UNIT_TESTS = 9876; +const KARMA_PORT_INTEGRATION_TESTS = 9877; const SERVE_PORT = 5000; +const TESTS_DIR = path.join(__dirname, "..", "tests"); class KarmaServer { /** * @param {string} configFile + * @param {number} port + * @param {string} label * @param {string} [browser] */ - constructor(configFile, browser, grep = "") { - const browsers = browser ? [browser] : []; + constructor(configFile, port, label, browser, grep = "") { + this._label = label; + const browsers = browser ? [browser] : undefined; this._karmaConfig = karma.config.parseConfig(configFile, { browsers, + port, autoWatch: false, - port: KARMA_PORT, - logLevel: karma.constants.LOG_INFO, + logLevel: karma.constants.LOG_WARN, client: { args: ["--grep", grep], }, @@ -49,6 +66,9 @@ class KarmaServer { async run() { if (this._isActive) return; + + process.stdout.write(boxen(`Running ${this._label}`, { dimBorder: true })); + this._isActive = true; karma.runner.run(this._karmaConfig, () => {}); await new Promise(resolve => @@ -68,8 +88,17 @@ sade("./tools/dev-server.js", true) async function run(args) { let isActive = false; - const karmaServer = new KarmaServer( - path.join(__dirname, "../karma.conf.js"), + const unitTestServer = new KarmaServer( + path.join(TESTS_DIR, "unit/karma.conf.js"), + KARMA_PORT_UNIT_TESTS, + "Unit Tests", + args.browser, + args.grep + ); + const integrationTestServer = new KarmaServer( + path.join(TESTS_DIR, "spec/karma.conf.js"), + KARMA_PORT_INTEGRATION_TESTS, + "Integration Tests", args.browser, args.grep ); @@ -79,7 +108,7 @@ async function run(args) { if (args.interactive) { registerStdinHandler(); } else { - const paths = ["./src", "./tests/spec"]; + const paths = ["./src", "./tests/spec", "./tests/unit"]; const watcher = chokidar.watch(paths, { ignoreInitial: true }); watcher.on("all", onFileChange); watcher.on("error", onError); @@ -91,7 +120,8 @@ async function run(args) { printWelcomeMessage(args); - await karmaServer.start(); + await unitTestServer.start(); + await integrationTestServer.start(); devServer.listen(SERVE_PORT); await buildAndTest({ profile: args.profile }); @@ -111,7 +141,8 @@ async function run(args) { switch (key) { case "\u0003": // ctrl-c (end of text) case "q": - await karmaServer.stop(); + await unitTestServer.stop(); + await integrationTestServer.stop(); return process.exit(0); case "t": return await buildAndTest(); @@ -126,14 +157,19 @@ async function run(args) { } async function buildAndTest(options = {}) { - const { preventBuild = false } = options; + const { + preventBuild = false, + unitTests = true, + integrationTests = true, + } = options; if (isActive) return; try { isActive = true; if (!preventBuild) { await Builder.build({ name: args.profile, debug: true }); } - await karmaServer.run(); + if (unitTests) await unitTestServer.run(); + if (integrationTests) await integrationTestServer.run(); } catch (err) { console.error(colors.error(err.stack)); } finally { @@ -143,20 +179,30 @@ async function run(args) { async function onError(err) { console.error(colors.error(err.stack)); - await karmaServer.stop(); + await unitTestServer.stop(); + await integrationTestServer.stop(); process.exit(1); } async function onFileChange(_event, file) { const preventBuild = file.startsWith("tests"); - await buildAndTest({ preventBuild }); + const unitTests = + !file.startsWith("tests") || file.startsWith("tests/unit"); + const integrationTests = + !file.startsWith("tests") || file.startsWith("tests/spec"); + + await buildAndTest({ preventBuild, unitTests, integrationTests }); } } function printWelcomeMessage(args) { const messages = [ ["dev server", `http://localhost:${SERVE_PORT}`], - ["karma server", `http://localhost:${KARMA_PORT}`], + ["karma (unit tests)", `http://localhost:${KARMA_PORT_UNIT_TESTS}`], + [ + "karma (integration tests)", + `http://localhost:${KARMA_PORT_INTEGRATION_TESTS}`, + ], [ "file watcher", `${args.interactive ? "NOT " : ""}watching for changes...`, @@ -171,13 +217,14 @@ function printWelcomeMessage(args) { const message = messages .map(([title, text]) => { - return colors.white.bold(`${title}:`.padEnd(18)) + colors.white(text); + return colors.white.bold(`${title}:`.padEnd(30)) + colors.white(text); }) .join("\n"); const boxOptions = { padding: 1, borderColor: "green", + borderStyle: "bold", backgroundColor: "black", }; console.log(boxen(message, boxOptions)); From c301fb892c134e6edafe6c3415965ba7e6a35632 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Wed, 31 Mar 2021 10:47:27 +0530 Subject: [PATCH 15/19] feat(respecDocWriter): use locally installed respec version (#2957) --- tests/headless.js | 22 +++++++++---- tools/respec2html.js | 6 ++++ tools/respecDocWriter.js | 71 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 92 insertions(+), 7 deletions(-) diff --git a/tests/headless.js b/tests/headless.js index d744501a6e..c55ddfec54 100644 --- a/tests/headless.js +++ b/tests/headless.js @@ -27,11 +27,22 @@ describe("Headless (examples)", () => { ); await expectAsync(exe.run()).toBeResolved(); }); + + it("uses local respec version with --use-local", async () => { + const exe = toExecutable( + toCommand(`http://localhost:${port}/examples/basic.built.html`, { + useLocal: true, + }) + ); + const logs = await exe.run(); + expect(logs).toContain("Intercepted"); + }); }); -function toCommand(src) { +function toCommand(src, { useLocal = false } = {}) { const command = `node ./tools/respec2html.js ${src}`; - const options = ["-e", `--timeout ${timeout}`]; + const options = ["-e", `--timeout ${timeout}`, "--verbose"]; + if (useLocal) options.push("--use-local"); return `${command} ${options.join(" ")}`; } @@ -41,15 +52,14 @@ function toExecutable(cmd) { return cmd; }, run() { + const env = { ...process.env, FORCE_COLOR: "0" }; return new Promise((resolve, reject) => { - const childProcess = exec(cmd, (err, data) => { + exec(cmd, { env }, (err, _stdout, stderr) => { if (err) { return reject(err); } - resolve(data); + resolve(stderr); }); - childProcess.stdout.pipe(process.stdout); - childProcess.stderr.pipe(process.stderr); }); }, }; diff --git a/tools/respec2html.js b/tools/respec2html.js index b74787c48c..1184c254e3 100755 --- a/tools/respec2html.js +++ b/tools/respec2html.js @@ -163,6 +163,11 @@ cli "How long to wait before timing out (in seconds).", 10 ) + .option( + "--use-local", + "Use locally installed ReSpec instead of the one in document.", + false + ) .option("-e, --haltonerror", "Abort if the spec has any errors.", false) .option("-w, --haltonwarn", "Abort if ReSpec generates warnings.", false) .option("--disable-sandbox", "Disable Chromium sandboxing if needed.", false) @@ -215,6 +220,7 @@ async function run(source, destination, options, log) { const { html, errors, warnings } = await toHTML(src, { timeout: options.timeout * 1000, + useLocal: options["use-local"], onError: log.error.bind(log), onWarning: log.warn.bind(log), onProgress: log.info.bind(log), diff --git a/tools/respecDocWriter.js b/tools/respecDocWriter.js index 7ce7a3c8ca..1bd02a23d8 100644 --- a/tools/respecDocWriter.js +++ b/tools/respecDocWriter.js @@ -3,7 +3,7 @@ */ const puppeteer = require("puppeteer"); const path = require("path"); -const { mkdtemp, writeFile } = require("fs").promises; +const { mkdtemp, readFile, writeFile } = require("fs").promises; const { tmpdir } = require("os"); const noop = () => {}; @@ -13,6 +13,7 @@ const noop = () => {}; * @param {string} src A URL or filepath that is the ReSpec source. * @param {object} [options] * @param {number} [options.timeout] Milliseconds before processing should timeout. + * @param {boolean} [options.useLocal] Use locally installed ReSpec instead of the one in document. * @param {(error: RsError) => void} [options.onError] What to do if a ReSpec processing has an error. Does nothing by default. * @param {(warning: RsError) => void} [options.onWarning] What to do if a ReSpec processing has a warning. Does nothing by default. * @param {(msg: string, timeRemaining: number) => void} [options.onProgress] @@ -26,6 +27,7 @@ async function toHTML(src, options = {}) { timeout = 300000, disableSandbox = false, devtools = false, + useLocal = false, } = options; if (typeof options.onError !== "function") { options.onError = noop; @@ -62,7 +64,11 @@ async function toHTML(src, options = {}) { try { const page = await browser.newPage(); + handleConsoleMessages(page, onError, onWarning); + if (useLocal) { + await useLocalReSpec(page, log); + } const url = new URL(src); log(`Navigating to ${url}`); @@ -97,6 +103,69 @@ async function toHTML(src, options = {}) { } } +/** + * Replace the ReSpec script in document with the locally installed one. This is + * useful in CI env or when you want to pin the ReSpec version. + * + * @assumption The ReSpec script being used in the document is hosted on either + * w3.org or w3c.github.io. If this assumption doesn't hold true (interception + * fails), this function will timeout. + * + * The following ReSpec URLs are supported: + * https://www.w3.org/Tools/respec/${profile} + * https://w3c.github.io/respec/builds/${profile}.js + * file:///home/path-to-respec/builds/${profile}.js + * http://localhost:PORT/builds/${profile}.js + * https://example.com/builds/${profile}.js + * + * @param {import("puppeteer").Page} page + * @param {(msg: any) => void} log + */ +async function useLocalReSpec(page, log) { + await page.setRequestInterception(true); + + page.on("request", async function requestInterceptor(request) { + if (!isRespecScript(request)) { + await request.continue(); + return; + } + + const url = new URL(request.url()); + const respecProfileRegex = /\/(respec-[\w-]+)(?:\.js)?$/; + const profile = url.pathname.match(respecProfileRegex)[1]; + const localPath = path.join(__dirname, "..", "builds", `${profile}.js`); + const relPath = path.relative(process.cwd(), localPath); + log(`Intercepted ${url} to respond with ${relPath}`); + await request.respond({ + contentType: "text/javascript; charset=utf-8", + body: await readFile(localPath), + }); + // Workaround for https://github.com/puppeteer/puppeteer/issues/4208 + page.off("request", requestInterceptor); + await page.setRequestInterception(false); + }); +} + +/** @param {import("puppeteer").HTTPRequest} req */ +function isRespecScript(req) { + if (req.method() !== "GET" || req.resourceType() !== "script") { + return false; + } + + const { host, pathname: path } = new URL(req.url()); + switch (host) { + case "www.w3.org": + return ( + path.startsWith("/Tools/respec/") && !path.includes("respec-highlight") + ); + case "w3c.github.io": + return path.startsWith("/respec/builds/"); + default: + // localhost, file://, and everything else + return /\/builds\/respec-[\w-]+\.js$/.test(path); + } +} + /** * Fetches a ReSpec "src" URL, and writes the processed static HTML to an "out" path. * @deprecated Please use `toHTML` instead. From a687d797aeecdb8d1040705e6ccec0399f8e16cb Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Wed, 31 Mar 2021 11:56:46 +0530 Subject: [PATCH 16/19] v26.5.0 --- builds/respec-dini.js | 172 +++++++++--------- builds/respec-dini.js.map | 2 +- builds/respec-geonovum.js | 130 +++++++------- builds/respec-geonovum.js.map | 2 +- builds/respec-w3c.js | 324 +++++++++++++++++----------------- builds/respec-w3c.js.map | 2 +- package-lock.json | 2 +- package.json | 2 +- 8 files changed, 318 insertions(+), 318 deletions(-) diff --git a/builds/respec-dini.js b/builds/respec-dini.js index 330c999b8c..d3ffa00165 100644 --- a/builds/respec-dini.js +++ b/builds/respec-dini.js @@ -1,5 +1,7 @@ -window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return ft})),Promise.resolve().then((function(){return Ut})),Promise.resolve().then((function(){return Ht})),Promise.resolve().then((function(){return s})),Promise.resolve().then((function(){return In})),Promise.resolve().then((function(){return Fn})),Promise.resolve().then((function(){return Un})),Promise.resolve().then((function(){return Vn})),Promise.resolve().then((function(){return Et})),Promise.resolve().then((function(){return mt})),Promise.resolve().then((function(){return Gn})),Promise.resolve().then((function(){return dr})),Promise.resolve().then((function(){return hr})),Promise.resolve().then((function(){return mr})),Promise.resolve().then((function(){return wr})),Promise.resolve().then((function(){return $o})),Promise.resolve().then((function(){return Co})),Promise.resolve().then((function(){return To})),Promise.resolve().then((function(){return No})),Promise.resolve().then((function(){return jo})),Promise.resolve().then((function(){return Mo})),Promise.resolve().then((function(){return Ho})),Promise.resolve().then((function(){return Yo})),Promise.resolve().then((function(){return Ur})),Promise.resolve().then((function(){return pi})),Promise.resolve().then((function(){return oi})),Promise.resolve().then((function(){return to})),Promise.resolve().then((function(){return mi})),Promise.resolve().then((function(){return gi})),Promise.resolve().then((function(){return Si})),Promise.resolve().then((function(){return Ci})),Promise.resolve().then((function(){return Ai})),Promise.resolve().then((function(){return Ii})),Promise.resolve().then((function(){return Ui})),Promise.resolve().then((function(){return Hi})),Promise.resolve().then((function(){return Xi})),Promise.resolve().then((function(){return rs})),Promise.resolve().then((function(){return cs})),Promise.resolve().then((function(){return fs})),Promise.resolve().then((function(){return hs})),Promise.resolve().then((function(){return gs})),Promise.resolve().then((function(){return $s})),Promise.resolve().then((function(){return Ls})),Promise.resolve().then((function(){return fn}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},i=r.lang;var s=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:i,run:function(e){e.l10n=o[i]||o.en}});let a,l;const c=new WeakMap,u=new WeakMap,d=new WeakMap,f=new WeakMap,p=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(l||(l=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(c.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),r()},i=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",i)},o=()=>{t(b(e.result)),r()},i=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",i)});return t.then(t=>{t instanceof IDBCursor&&c.set(t,e)}).catch(()=>{}),p.set(t,e),t}(e);if(f.has(e))return f.get(e);const t=g(e);return t!==e&&(f.set(e,t),p.set(t,e)),t}const w=e=>p.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const i=async function(e,...t){const i=this.transaction(e,o?"readwrite":"readonly");let s=i.store;return r&&(s=s.index(t.shift())),(await Promise.all([s[n](...t),o&&i.done]))[0]};return k.set(t,i),i}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:i}={}){const s=indexedDB.open(e,t),a=b(s);return r&&s.addEventListener("upgradeneeded",e=>{r(b(s.result),e.oldVersion,e.newVersion,b(s.transaction))}),n&&s.addEventListener("blocked",()=>n()),a.then(e=>{i&&e.addEventListener("close",()=>i()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});var _,S=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(_={exports:{}},_.exports),_.exports);const E=/[&<>"']/,C=/[&<>"']/g,A=/[<>"']|&(?!#?\w+;)/,L=/[<>"']|&(?!#?\w+;)/g,T={"&":"&","<":"<",">":">",'"':""","'":"'"},N=e=>T[e];const R=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function z(e){return e.replace(R,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const D=/(^|[^\[])\^/g;const j=/[^\w:]/g,P=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const O={},I=/^[^:]+:\/*[^/]*$/,q=/^([^:]+:)[\s\S]*$/,M=/^([^:]+:\/*[^/]*)[\s\S]*$/;function F(e,t){O[" "+e]||(I.test(e)?O[" "+e]=e+"/":O[" "+e]=B(e,"/",!0));const n=-1===(e=O[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(q,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(M,"$1")+t:e+t}function B(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const i=e.charAt(r-o-1);if(i!==t||n){if(i===t||!n)break;o++}else o++}return e.substr(0,r-o)}var W={escape:function(e,t){if(t){if(E.test(e))return e.replace(C,N)}else if(A.test(e))return e.replace(L,N);return e},unescape:z,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(D,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(z(n)).replace(j,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!P.test(n)&&(n=F(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:F,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:B,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:U}=S,{rtrim:H,splitCells:Z,escape:V,findClosingBracket:Y}=W;function K(e,t,n){const r=t.href,o=t.title?V(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:i}:{type:"image",raw:n,href:r,title:o,text:V(i)}}var G=class{constructor(e){this.options=e||U}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:H(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=H(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:Z(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=Z(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},i=t[0].match(this.rules.block.item);let s,a,l,c,u,d,f,p,h,m=!1,g=i.length;l=this.rules.block.listItemStart.exec(i[0]);for(let t=0;t<g;t++){if(s=i[t],e=s,this.options.pedantic||(h=s.match(new RegExp("\\n\\s*\\n {0,"+(l[0].length-1)+"}\\S")),h&&(u=s.length-h.index+i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),s=s.substring(0,h.index),e=s,g=t+1)),t!==g-1){if(c=this.rules.block.listItemStart.exec(i[t+1]),this.options.pedantic?c[1].length>l[1].length:c[1].length>=l[0].length||c[1].length>3){i.splice(t,2,i[t]+(!this.options.pedantic&&c[1].length<l[0].length&&!i[t].match(/\n$/)?"":"\n")+i[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?c[2][c[2].length-1]!==n[n.length-1]:r===(1===c[2].length))&&(u=i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),l=c}a=s.length,s=s.replace(/^ *([*+-]|\d+[.)]) ?/,""),~s.indexOf("\n ")&&(a-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+a+"}","gm"),"")),s=H(s,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(f=/^\[[ xX]\] /.test(s),p=void 0,f&&(p=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:f,checked:p,loose:d,text:s})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):V(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:Z(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=Z(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:V(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=H(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=Y(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),K(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return K(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,i,s=n,a=0;const l="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=l.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(i=o.length,r[3]||r[4])s+=i;else if(!((r[5]||r[6])&&n%3)||(n+i)%3){if(s-=i,!(s>0)){if(s+a-i<=0&&!t.slice(l.lastIndex).match(l)&&(i=Math.min(i,i+s+a)),Math.min(n,i)%2)return{type:"em",raw:e.slice(0,n+r.index+i+1),text:e.slice(1,n+r.index+i)};if(Math.min(n,i)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+i+1),text:e.slice(2,n+r.index+i-1)}}}else a+=i}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=V(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=V(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=V(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=V(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=V(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]:V(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:J,edit:X,merge:Q}=W,ee={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:J,table:J,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ee.def=X(ee.def).replace("label",ee._label).replace("title",ee._title).getRegex(),ee.bullet=/(?:[*+-]|\d{1,9}[.)])/,ee.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ee.item=X(ee.item,"gm").replace(/bull/g,ee.bullet).getRegex(),ee.listItemStart=X(/^( *)(bull) */).replace("bull",ee.bullet).getRegex(),ee.list=X(ee.list).replace(/bull/g,ee.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ee.def.source+")").getRegex(),ee._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ee.html=X(ee.html,"i").replace("comment",ee._comment).replace("tag",ee._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ee.paragraph=X(ee._paragraph).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.blockquote=X(ee.blockquote).replace("paragraph",ee.paragraph).getRegex(),ee.normal=Q({},ee),ee.gfm=Q({},ee.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ee.gfm.nptable=X(ee.gfm.nptable).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.gfm.table=X(ee.gfm.table).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.pedantic=Q({},ee.normal,{html:X("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ee._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:J,paragraph:X(ee.normal._paragraph).replace("hr",ee.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ee.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const te={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:J,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:J,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};te.punctuation=X(te.punctuation).replace(/punctuation/g,te._punctuation).getRegex(),te.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,te.escapedEmSt=/\\\*|\\_/g,te._comment=X(ee._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),te.emStrong.lDelim=X(te.emStrong.lDelim).replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimAst=X(te.emStrong.rDelimAst,"g").replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimUnd=X(te.emStrong.rDelimUnd,"g").replace(/punct/g,te._punctuation).getRegex(),te._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,te._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,te._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,te.autolink=X(te.autolink).replace("scheme",te._scheme).replace("email",te._email).getRegex(),te._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,te.tag=X(te.tag).replace("comment",te._comment).replace("attribute",te._attribute).getRegex(),te._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,te._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,te._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,te.link=X(te.link).replace("label",te._label).replace("href",te._href).replace("title",te._title).getRegex(),te.reflink=X(te.reflink).replace("label",te._label).getRegex(),te.reflinkSearch=X(te.reflinkSearch,"g").replace("reflink",te.reflink).replace("nolink",te.nolink).getRegex(),te.normal=Q({},te),te.pedantic=Q({},te.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:X(/^!?\[(label)\]\((.*?)\)/).replace("label",te._label).getRegex(),reflink:X(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",te._label).getRegex()}),te.gfm=Q({},te.normal,{escape:X(te.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),te.gfm.url=X(te.gfm.url,"i").replace("email",te.gfm._extended_email).getRegex(),te.breaks=Q({},te.gfm,{br:X(te.br).replace("{2,}","*").getRegex(),text:X(te.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var ne={block:ee,inline:te};const{defaults:re}=S,{block:oe,inline:ie}=ne,{repeatString:se}=W;function ae(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function le(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var ce=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||re,this.options.tokenizer=this.options.tokenizer||new G,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:oe.normal,inline:ie.normal};this.options.pedantic?(t.block=oe.pedantic,t.inline=ie.pedantic):this.options.gfm&&(t.block=oe.gfm,this.options.breaks?t.inline=ie.breaks:t.inline=ie.gfm),this.tokenizer.rules=t}static get rules(){return{block:oe,inline:ie}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,i,s;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"paragraph"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),i=r.items.length,o=0;o<i;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,i,s;const a=e.length;for(t=0;t<a;t++)switch(s=e[t],s.type){case"paragraph":case"text":case"heading":s.tokens=[],this.inlineTokens(s.text,s.tokens);break;case"table":for(s.tokens={header:[],cells:[]},o=s.header.length,n=0;n<o;n++)s.tokens.header[n]=[],this.inlineTokens(s.header[n],s.tokens.header[n]);for(o=s.cells.length,n=0;n<o;n++)for(i=s.cells[n],s.tokens.cells[n]=[],r=0;r<i.length;r++)s.tokens.cells[n][r]=[],this.inlineTokens(i[r],s.tokens.cells[n][r]);break;case"blockquote":this.inline(s.tokens);break;case"list":for(o=s.items.length,n=0;n<o;n++)this.inline(s.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,i,s,a,l,c=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(c));)e.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(c));)c=c.slice(0,s.index)+"++"+c.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(l=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const i=t[t.length-1];i&&"text"===o.type&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,c,l))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,le))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,le))){if(o=this.tokenizer.inlineText(e,r,ae))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(l=o.raw.slice(-1)),a=!0,i=t[t.length-1],i&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:ue}=S,{cleanUrl:de,escape:fe}=W;var pe=class{constructor(e){this.options=e||ue}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+fe(r,!0)+'">'+(n?e:fe(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:fe(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+fe(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},he=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},me=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:ge}=S,{unescape:be}=W;var we=class e{constructor(e){this.options=e||ge,this.options.renderer=this.options.renderer||new pe,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new he,this.slugger=new me}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,i,s,a,l,c,u,d,f,p,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,be(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(c="",l="",i=d.header.length,r=0;r<i;r++)l+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(c+=this.renderer.tablerow(l),u="",i=d.cells.length,r=0;r<i;r++){for(a=d.tokens.cells[r],l="",s=a.length,o=0;o<s;o++)l+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(l)}v+=this.renderer.table(c,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(f=d.ordered,p=d.start,h=d.loose,i=d.items.length,u="",r=0;r<i;r++)g=d.items[r],b=g.checked,w=g.task,m="",g.task&&(y=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,f,p);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const i=e.length;for(n=0;n<i;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:ye,checkSanitizeDeprecation:ve,escape:ke}=W,{getDefaults:xe,changeDefaults:$e,defaults:_e}=S;function Se(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=ye({},Se.defaults,t||{}),ve(t),n){const r=t.highlight;let o;try{o=ce.lex(e,t)}catch(e){return n(e)}const i=function(e){let i;if(!e)try{i=we.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,i)};if(!r||r.length<3)return i();if(delete t.highlight,!o.length)return i();let s=0;return Se.walkTokens(o,(function(e){"code"===e.type&&(s++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),s--,0===s&&i()}))},0))})),void(0===s&&i())}try{const n=ce.lex(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}}Se.options=Se.setOptions=function(e){return ye(Se.defaults,e),$e(Se.defaults),Se},Se.getDefaults=xe,Se.defaults=_e,Se.use=function(e){const t=ye({},e);if(e.renderer){const n=Se.defaults.renderer||new pe;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let i=e.renderer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.renderer=n}if(e.tokenizer){const n=Se.defaults.tokenizer||new G;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let i=e.tokenizer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.tokenizer=n}if(e.walkTokens){const n=Se.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Se.setOptions(t)},Se.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Se.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Se.walkTokens(n,t);break;case"list":Se.walkTokens(n.items,t);break;default:n.tokens&&Se.walkTokens(n.tokens,t)}},Se.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=ye({},Se.defaults,t||{}),ve(t);try{const n=ce.lexInline(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}},Se.Parser=we,Se.parser=we.parse,Se.Renderer=pe,Se.TextRenderer=he,Se.Lexer=ce,Se.lexer=ce.lex,Se.Tokenizer=G,Se.Slugger=me,Se.parse=Se;var Ee=Se;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ce=function(e){var t={exports:{}};return e(t,t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function i(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function s(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function l(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return s(""===n?e[r-1]:n,o)}))}function c(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var i=r[o];if(i[0].test(t))return l(t,i)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?s(r,o):e.hasOwnProperty(o)?s(r,e[o]):c(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&c(o,o,n)===o}}function f(e,t,n){return(n?t+" ":"")+(1===t?f.singular(e):f.plural(e))}return f.plural=u(o,r,e),f.isPlural=d(o,r,e),f.singular=u(r,o,t),f.isSingular=d(r,o,t),f.addPluralRule=function(t,n){e.push([i(t),n])},f.addSingularRule=function(e,n){t.push([i(e),n])},f.addUncountableRule=function(e){"string"!=typeof e?(f.addPluralRule(e,"$0"),f.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},f.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return f.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return f.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return f.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(f.addUncountableRule),f}))})),Ae=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=i.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},i;function i(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(s,this)}function s(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,i){for(var s=("selectedIndex"in t),a=s;r<o;){var l,c=e(n[r],1);t.insertBefore(c,i),s&&a&&c.selected&&(a=!a,l=t.selectedIndex,t.selectedIndex=l<0?r:d.call(t.querySelectorAll("option"),c)),r++}}function i(e,t){return e==t}function s(e){return e}function a(e,t,n,r,o,i,s){var a=i-o;if(a<1)return-1;for(;a<=n-t;){for(var l=t,c=o;l<n&&c<i&&s(e[l],r[c]);)l++,c++;if(c===i)return t;t=l+1}return-1}function l(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function c(e,t,n,r){for(;n<r;)p(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,f=function(e,t,n){for(var r=1,o=t;r<o;){var i=(r+o)/2>>>0;n<e[i]?o=i:r=1+i}return r},p=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||i,d=r.node||s,p=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,w=0;g<m&&w<b&&u(t[g],n[w]);)g++,w++;for(;g<m&&w<b&&u(t[m-1],n[b-1]);)m--,b--;var y=g===m,v=w===b;if(y&&v)return n;if(y&&w<b)return o(d,e,n,w,b,l(d,t,g,h,p)),n;if(v&&g<m)return c(d,t,g,m),n;var k=m-g,x=b-w,$=-1;if(k<x){if(-1<($=a(n,w,b,t,g,m,u)))return o(d,e,n,w,$,d(t[g],0)),o(d,e,n,$+k,b,l(d,t,m,h,p)),n}else if(x<k&&-1<($=a(t,g,m,n,w,b,u)))return c(d,t,g,$),c(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,w,b,d(t[g],0)),c(d,t,g,m)):k==x&&function(e,t,n,r,o,i){for(;r<o&&i(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,w,b,l(d,t,m,h,p)):function(e,t,n,r,i,s,a,l,u,d,p,h,m){!function(e,t,n,r,i,s,a,l,u){for(var d=[],f=e.length,p=a,h=0;h<f;)switch(e[h++]){case 0:i++,p++;break;case 1:d.push(r[i]),o(t,n,r,i++,i,p<l?t(s[p],0):u);break;case-1:p++}for(h=0;h<f;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(s[a])?a++:c(t,s,a++,a)}}(function(e,t,n,r,o,i,s){var a,l,c,u,d,f,p=n+i,h=[];e:for(b=0;b<=p;b++){if(50<b)return null;for(f=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(l=(c=a===-b||a!==b&&u[f+a-1]<u[f+a+1]?u[f+a+1]:u[f+a-1]+1)-a;c<i&&l<n&&s(r[o+c],e[t+l]);)c++,l++;if(c===i&&l===n)break e;d[b+a]=c}}for(var m=Array(b/2+p/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<c&&0<l&&s(r[o+c-1],e[t+l-1]);)m[g--]=0,c--,l--;if(!b)break;f=b-1,u=b?h[b-1]:[0,0],(a=c-l)==-b||a!==b&&u[f+a-1]<u[f+a+1]?(l--,m[g--]=1):(c--,m[g--]=-1)}return m}(n,r,s,a,l,d,h)||function(e,t,n,r,o,i,s,a){var l=0,c=r<a?r:a,u=Array(c++),d=Array(c);d[0]=-1;for(var p=1;p<c;p++)d[p]=s;for(var h=o.slice(i,s),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(l=f(d,c,g=b+i))&&(d[l]=g,u[l]={newi:m,oldi:g,prev:u[l-1]})}for(l=--c,--s;d[l]>s;)--l;c=a+r-l;var w=Array(c),y=u[l];for(--n;y;){for(var v=y.newi,k=y.oldi;v<n;)w[--c]=1,--n;for(;k<s;)w[--c]=-1,--s;w[--c]=0,--n,--s,y=y.prev}for(;t<=n;)w[--c]=1,--n;for(;i<=s;)w[--c]=-1,--s;return w}(n,r,i,s,a,l,u,d),e,t,n,r,a,l,p,m)}(d,e,n,w,b,x,t,g,m,k,h,u,p),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,w={};try{w.Map=Map}catch(u){w.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var i=r(o);return i&&(t.splice(e,1),n.splice(e,1)),i},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,i){return n[r(o)?e:t.push(o)-1]=i,this}};function r(n){return-1<(e=t.indexOf(n))}}}var y=w.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,_,S,E,C,A,L={},T={},N=[],R=T.hasOwnProperty,z=0,D={attributes:L,define:function(e,t){e.indexOf("-")<0?(e in T||(z=N.push(e)),T[e]=t):L[e]=t},invoke:function(e,t){for(var n=0;n<z;n++){var r=N[n];if(R.call(e,r))return T[r](e[r],t)}}},j=Array.isArray||(_=($={}.toString).call([]),function(e){return $.call(e)===_}),P=(S=e,E="fragment",A="content"in I(C="template")?function(e){var t=I(C);return t.innerHTML=e,t.content}:function(e){var t,n=I(E),r=I(C);return O(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=I(E),n=I("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",O(t,n.firstChild.childNodes),t}:A)(e)});function O(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function I(e){return e===E?S.createDocumentFragment():S.createElementNS("http://www.w3.org/1999/xhtml",e)}var q,M,F,B,W,U,H,Z,V,Y=(M="appendChild",F="cloneNode",B="createTextNode",U=(W="importNode")in(q=e),(H=q.createDocumentFragment())[M](q[B]("g")),H[M](q[B]("")),(U?q[W](H,!0):H[F](!0)).childNodes.length<2?function e(t,n){for(var r=t[F](),o=t.childNodes||[],i=o.length,s=0;n&&s<i;s++)r[M](e(o[s],n));return r}:U?q[W]:function(e,t){return e[F](!!t)}),K="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},G="-"+Math.random().toFixed(6)+"%",J=!1;try{Z=e.createElement("template"),V="tabindex","content"in Z&&(Z.innerHTML="<p "+V+'="'+G+'"></p>',Z.content.childNodes[0].getAttribute(V)==G)||(G="_dt: "+G.slice(1,-1)+";",J=!0)}catch(u){}var X="\x3c!--"+G+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",ie="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",se=new RegExp(oe+re+ie+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+ie+"*)(["+te+"]*/>)","g"),le=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+X+"\\2","gi");function ce(e,t,n,r){return"<"+t+n.replace(le,ue)+r}function ue(e,t,n){return t+(n||'"')+G+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var fe=J?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function pe(t,n,r,o){for(var i=t.childNodes,s=i.length,a=0;a<s;){var l=i[a];switch(l.nodeType){case 1:var c=o.concat(a);!function(t,n,r,o){for(var i,s=t.attributes,a=[],l=[],c=fe(s,r),u=c.length,d=0;d<u;){var f=c[d++],p=f.value===G;if(p||1<(i=f.value.split(X)).length){var h=f.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(p?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=s[m]||s[m.toLowerCase()];if(p)n.push(he(g,o,m,null));else{for(var b=i.length-2;b--;)r.shift();n.push(he(g,o,m,i))}}l.push(f)}}for(var w=((d=0)<(u=l.length)&&J&&!("ownerSVGElement"in t));d<u;){var y=l[d++];w&&(y.value=""),t.removeAttribute(y.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=s.length,d=0;d<u;)k.setAttributeNode(s[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(l,n,r,c),pe(l,n,r,c);break;case 8:var u=l.textContent;if(u===G)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:l,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(l),a--,s--}break;case 3:Q.test(t.nodeName)&&K.call(l.textContent)===X&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function we(e,t){var n=(e.convert||function(e){return e.join(X).replace(ae,de).replace(se,ce)})(t),r=e.transform;r&&(n=r(n));var o=P(n,e.type);ve(o);var i=[];return pe(o,i,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=i.length,s=0,a=0;s<o;){var l=i[s++],c=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,l.path);switch(l.type){case"any":r.push({fn:e.any(c,[]),sparse:!1});break;case"attr":var u=l.sparse,d=e.attribute(c,l.name,l.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(c),sparse:!1}),c.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var i=1,s=1;i<e;){var a=r[i-s];if(a.sparse){var l=a.values,c=l[0],u=1,d=l.length;for(s+=d-2;u<d;)c+=arguments[i++]+l[u++];a.fn(c)}else a.fn(arguments[i++])}return n}}}}var ye=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===K.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),Se(n,!0)}(e,t):Se(e.style,!1)});function _e(e,t,n){return t+"-"+n.toLowerCase()}function Se(e,t){var n,r;return function(o){var i,s,a,l;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(s in r)s in o||(e[s]="")}else t?e.value="":e.cssText="";for(s in i=t?{}:e,o)a="number"!=typeof(l=o[s])||ke.test(s)?l:l+"px",!t&&/^--/.test(s)?i.setProperty(s,a):i[s]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,_e),":",e[t],";");return n.join("")}(r=i):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ee,Ce,Ae=(Ee=[].slice,(Ce=Le.prototype).ELEMENT_NODE=1,Ce.nodeType=111,Ce.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ce.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,i=r.length;o<i;o++)t.appendChild(r[o]);return t},Le);function Le(e){var t=this.childNodes=Ee.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Te(e){return{html:e}}function Ne(e,t){switch(e.nodeType){case Fe:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Ne(e.render(),t);default:return e}}function Re(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Te).then(t):Promise.resolve(D.invoke(e,t)).then(t)}function ze(e){return null!=e&&"then"in e}var De,je,Pe,Oe,Ie,qe="ownerSVGElement",Me=v.prototype.nodeType,Fe=Ae.prototype.nodeType,Be=(je=(De={Event:b,WeakSet:u}).Event,Pe=De.WeakSet,Oe=!0,Ie=null,function(e){return Oe&&(Oe=!Oe,Ie=new Pe,function(e){var t=new Pe,n=new Pe;try{new MutationObserver(s).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],i=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){s(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){i({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){i({addedNodes:[e.target],removedNodes:[]})}),!0)}function s(e){for(var r,o=e.length,i=0;i<o;i++)a((r=e[i]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,i=new je(t),s=e.length,a=0;a<s;1===(o=e[a++]).nodeType&&function e(t,n,r,o,i){Ie.has(t)&&!o.has(t)&&(i.delete(t),o.add(t),t.dispatchEvent(n));for(var s=t.children||[],a=s.length,l=0;l<a;e(s[l++],n,r,o,i));}(o,i,t,n,r));}}(e.ownerDocument)),Ie.add(e),e}),We=/^(?:form|list)$/i,Ue=[].slice;function He(t){return this.type=t,function(t){var n=ye,r=ve;return function(o){var i,s,a;return n!==o&&(i=t,s=n=o,a=be.get(s)||be.set(s,we(i,s)),r=a.updates(Y.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ze=!(He.prototype={attribute:function(e,t,n){var r,o=qe in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return c=e,u=t.slice(1),o?function(e){try{c[u]=e}catch(t){c.setAttribute(u,e)}}:function(e){c[u]=e};if("?"===t.slice(0,1))return s=e,a=t.slice(1),function(e){l!==!!e&&((l=!!e)?s.setAttribute(a,""):s.removeAttribute(a))};if(/^on/.test(t)){var i=t.slice(2);return"connected"===i||"disconnected"===i?Be(e):t.toLowerCase()in e&&(i=i.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(i,r,!1),(r=t)&&e.addEventListener(i,t,!1))}}if("data"===t||!o&&t in e&&!We.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in D.attributes)return function(n){var o=D.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var s,a,l,c,u,d=!1,f=n.cloneNode(!0);return function(t){r!==t&&(r=t,f.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(f)),f.value=t):(f.value=t,d||(d=!0,e.setAttributeNode(f)))))}},any:function(e,t){var n,r={node:Ne,before:e},o=qe in e?"svg":"html",i=!1;return function s(a){switch(typeof a){case"string":case"number":case"boolean":i?n!==a&&(n=a,t[0].textContent=a):(i=!0,n=a,t=h(e.parentNode,t,[(l=a,e.ownerDocument.createTextNode(l))],r));break;case"function":s(a(e));break;case"object":case"undefined":if(null==a){i=!1,t=h(e.parentNode,t,[],r);break}default:if(i=!1,j(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":s({html:a});break;case"object":if(j(a[0])&&(a=a.concat.apply([],a)),ze(a[0])){Promise.all(a).then(s);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?Ue.call(a.childNodes):[a],r):ze(a)?a.then(s):"placeholder"in a?Re(a,s):"text"in a?s(String(a.text)):"any"in a?s(a.any):"html"in a?t=h(e.parentNode,t,Ue.call(P([].concat(a.html).join(""),o).childNodes),r):s("length"in a?Ue.call(a):D.invoke(a,s))}var l}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?ze(r)?r.then(n):"placeholder"in r?Re(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?Ue.call(r).join(""):D.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,i,s,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),l=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||l?(o={},i=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=l?i:(s=new n,function(e){return s.get(e)||(n=i(t=e),s.set(t,n),n);var t,n})):Ze=!0,Ye(t)};function Ye(e){return Ze?e:Ve(e)}function Ke(e){for(var t=arguments.length,n=[Ye(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Ge=new n,Je=function(e){var t,n,r;return function(){var o=Ke.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Xe=function(e,t){var n=t.indexOf(":"),r=Ge.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Ge.set(e,r={}),r[o]||(r[o]=Je(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Ae(t):e},et=new n;function tt(){var e=et.get(this),t=Ke.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(qe in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,it,st=D.define,at=He.prototype;function lt(e){return arguments.length<2?null==e?Je("html"):"string"==typeof e?lt.wire(null,e):"raw"in e?Je("html")(e):"nodeType"in e?lt.bind(e):Xe(e,"html"):("raw"in e?Je("html"):lt.wire).apply(null,arguments)}return lt.Component=v,lt.bind=function(e){return tt.bind(e)},lt.define=st,lt.diff=h,(lt.hyper=lt).observe=Be,lt.tagger=at,lt.wire=function(e,t){return null==e?Je(t||"html"):Xe(e,t||"html")},lt._={WeakMap:n,WeakSet:u},nt=Je,rt=new n,ot=Object.create,it=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var i,s,a,l=t.get(e)||it(e,t);switch(typeof o){case"object":case"function":var c=l.w||(l.w=new n);return c.get(o)||(i=c,s=o,a=new e(r),i.set(s,a),a);default:var u=l.p||(l.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new y,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),lt}(document); -/*! (c) Andrea Giammarchi (ISC) */const Le=$,Te=Ae,Ne=Ee,Re=Ce,ze=qe({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}}),De=new Intl.DateTimeFormat(["en-ca-iso8601"],{timeZone:"UTC",year:"numeric",month:"2-digit",day:"2-digit"});function je(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Pe(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function Oe(e=[],t=(e=>e),n=i){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(ze.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=ze.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function Ie(e){return e.trim().replace(/\s+/g," ")}function qe(e,t=i){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function Me(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){nt(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}function Fe(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Te`${e}, `);return Te`${r}${n[n.length-1]}`}function Be(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function We(e){const t=new Set,n="ltNodefault"in e.dataset?"":Ie(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>Ie(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(Ie(e)))}return[...t]}function Ue(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function He(e,t){const n=t.closest(".informative, .note, .issue, .example, .ednote, .practice, .introductory");let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function Ze(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function Ve(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function Ye(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class Ke extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function Ge(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>Ue(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),Je(t),t}function Je(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...Xe(t)])e.remove()}function*Xe(e){for(;e.nextNode();)yield e.currentNode}class Qe extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class et extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||Be(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:i,title:s,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:i,title:s,details:a,stack:n}}}function tt(e,t,n={}){const r={...n,isWarning:!1};it("error",new et(e,t,r))}function nt(e,t,n={}){const r={...n,isWarning:!0};it("warn",new et(e,t,r))}const rt="core/pubsubhub",ot=new Map;function it(e,...t){if(!ot.has(e))return;if(Array.from(ot.get(e)).forEach(e=>{try{e(...t)}catch(t){tt(`Error when calling function ${e.name}.`,rt,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function st(e,t,n={once:!1}){return n.once?st(e,(function n(...r){!function({topic:e,cb:t}){const n=ot.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(ot.has(e)?ot.get(e).add(t):ot.set(e,new Set([t])),{topic:e,cb:t})}n(rt,{sub:st});const at=["githubToken","githubUser"];class lt{constructor(){this._respecDonePromise=new Promise(e=>{st("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],st("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),st("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}}const ct="core/post-process";const ut="core/pre-process";const dt="core/base-runner";var ft=Object.freeze({__proto__:null,name:dt,runAll:async function(e){!function(){const e=new lt;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(nt("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),it("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),st("amend-user-config",n),st("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of at)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),it("amend-user-config",r)}(respecConfig),performance.mark(dt+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||tt("Every item in `preProcess` must be a JS function.",ut),t}).map(async t=>{try{return await t(e,document)}catch(e){tt(`Function ${t.name} threw an error during \`preProcess\`.`,ut,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const i=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(i),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},it("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||tt("Every item in `postProcess` must be a JS function.",ct),t}).map(async t=>{try{return await t(e,document)}catch(e){tt(`Function ${t.name} threw an error during \`postProcess\`.`,ct,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),it("end-all"),Pe(document),performance.mark(dt+"-end"),performance.measure(dt,dt+"-start",dt+"-end")}});var pt=String.raw`.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0} +window.respecVersion="26.5.0",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return mt})),Promise.resolve().then((function(){return Vt})),Promise.resolve().then((function(){return Yt})),Promise.resolve().then((function(){return s})),Promise.resolve().then((function(){return Fn})),Promise.resolve().then((function(){return Un})),Promise.resolve().then((function(){return Vn})),Promise.resolve().then((function(){return Gn})),Promise.resolve().then((function(){return Lt})),Promise.resolve().then((function(){return wt})),Promise.resolve().then((function(){return Qn})),Promise.resolve().then((function(){return hr})),Promise.resolve().then((function(){return br})),Promise.resolve().then((function(){return wr})),Promise.resolve().then((function(){return kr})),Promise.resolve().then((function(){return Eo})),Promise.resolve().then((function(){return To})),Promise.resolve().then((function(){return zo})),Promise.resolve().then((function(){return Do})),Promise.resolve().then((function(){return Io})),Promise.resolve().then((function(){return Wo})),Promise.resolve().then((function(){return Yo})),Promise.resolve().then((function(){return Jo})),Promise.resolve().then((function(){return Vr})),Promise.resolve().then((function(){return gi})),Promise.resolve().then((function(){return ai})),Promise.resolve().then((function(){return oo})),Promise.resolve().then((function(){return wi})),Promise.resolve().then((function(){return yi})),Promise.resolve().then((function(){return Ai})),Promise.resolve().then((function(){return Ti})),Promise.resolve().then((function(){return Ni})),Promise.resolve().then((function(){return qi})),Promise.resolve().then((function(){return Hi})),Promise.resolve().then((function(){return Zi})),Promise.resolve().then((function(){return Qi})),Promise.resolve().then((function(){return os})),Promise.resolve().then((function(){return us})),Promise.resolve().then((function(){return ps})),Promise.resolve().then((function(){return ms})),Promise.resolve().then((function(){return bs})),Promise.resolve().then((function(){return _s})),Promise.resolve().then((function(){return Ts})),Promise.resolve().then((function(){return mn}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},i=r.lang;var s=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:i,run:function(e){e.l10n=o[i]||o.en}});let a,l;const c=new WeakMap,u=new WeakMap,d=new WeakMap,f=new WeakMap,p=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(l||(l=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(c.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),r()},i=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",i)},o=()=>{t(b(e.result)),r()},i=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",i)});return t.then(t=>{t instanceof IDBCursor&&c.set(t,e)}).catch(()=>{}),p.set(t,e),t}(e);if(f.has(e))return f.get(e);const t=g(e);return t!==e&&(f.set(e,t),p.set(t,e)),t}const w=e=>p.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const i=async function(e,...t){const i=this.transaction(e,o?"readwrite":"readonly");let s=i.store;return r&&(s=s.index(t.shift())),(await Promise.all([s[n](...t),o&&i.done]))[0]};return k.set(t,i),i}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:i}={}){const s=indexedDB.open(e,t),a=b(s);return r&&s.addEventListener("upgradeneeded",e=>{r(b(s.result),e.oldVersion,e.newVersion,b(s.transaction))}),n&&s.addEventListener("blocked",()=>n()),a.then(e=>{i&&e.addEventListener("close",()=>i()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});var _,S=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(_={exports:{}},_.exports),_.exports);const E=/[&<>"']/,C=/[&<>"']/g,A=/[<>"']|&(?!#?\w+;)/,L=/[<>"']|&(?!#?\w+;)/g,T={"&":"&","<":"<",">":">",'"':""","'":"'"},N=e=>T[e];const R=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function z(e){return e.replace(R,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const D=/(^|[^\[])\^/g;const j=/[^\w:]/g,P=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const O={},I=/^[^:]+:\/*[^/]*$/,q=/^([^:]+:)[\s\S]*$/,M=/^([^:]+:\/*[^/]*)[\s\S]*$/;function F(e,t){O[" "+e]||(I.test(e)?O[" "+e]=e+"/":O[" "+e]=B(e,"/",!0));const n=-1===(e=O[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(q,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(M,"$1")+t:e+t}function B(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const i=e.charAt(r-o-1);if(i!==t||n){if(i===t||!n)break;o++}else o++}return e.substr(0,r-o)}var W={escape:function(e,t){if(t){if(E.test(e))return e.replace(C,N)}else if(A.test(e))return e.replace(L,N);return e},unescape:z,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(D,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(z(n)).replace(j,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!P.test(n)&&(n=F(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:F,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:B,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:U}=S,{rtrim:H,splitCells:Z,escape:V,findClosingBracket:Y}=W;function K(e,t,n){const r=t.href,o=t.title?V(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:i}:{type:"image",raw:n,href:r,title:o,text:V(i)}}var G=class{constructor(e){this.options=e||U}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:H(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=H(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:Z(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=Z(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},i=t[0].match(this.rules.block.item);let s,a,l,c,u,d,f,p,h,m=!1,g=i.length;l=this.rules.block.listItemStart.exec(i[0]);for(let t=0;t<g;t++){if(s=i[t],e=s,this.options.pedantic||(h=s.match(new RegExp("\\n\\s*\\n {0,"+(l[0].length-1)+"}\\S")),h&&(u=s.length-h.index+i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),s=s.substring(0,h.index),e=s,g=t+1)),t!==g-1){if(c=this.rules.block.listItemStart.exec(i[t+1]),this.options.pedantic?c[1].length>l[1].length:c[1].length>=l[0].length||c[1].length>3){i.splice(t,2,i[t]+(!this.options.pedantic&&c[1].length<l[0].length&&!i[t].match(/\n$/)?"":"\n")+i[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?c[2][c[2].length-1]!==n[n.length-1]:r===(1===c[2].length))&&(u=i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),l=c}a=s.length,s=s.replace(/^ *([*+-]|\d+[.)]) ?/,""),~s.indexOf("\n ")&&(a-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+a+"}","gm"),"")),s=H(s,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(f=/^\[[ xX]\] /.test(s),p=void 0,f&&(p=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:f,checked:p,loose:d,text:s})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):V(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:Z(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=Z(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:V(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=H(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=Y(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),K(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return K(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,i,s=n,a=0;const l="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=l.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(i=o.length,r[3]||r[4])s+=i;else if(!((r[5]||r[6])&&n%3)||(n+i)%3){if(s-=i,!(s>0)){if(s+a-i<=0&&!t.slice(l.lastIndex).match(l)&&(i=Math.min(i,i+s+a)),Math.min(n,i)%2)return{type:"em",raw:e.slice(0,n+r.index+i+1),text:e.slice(1,n+r.index+i)};if(Math.min(n,i)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+i+1),text:e.slice(2,n+r.index+i-1)}}}else a+=i}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=V(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=V(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=V(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=V(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=V(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]:V(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:J,edit:X,merge:Q}=W,ee={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:J,table:J,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ee.def=X(ee.def).replace("label",ee._label).replace("title",ee._title).getRegex(),ee.bullet=/(?:[*+-]|\d{1,9}[.)])/,ee.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ee.item=X(ee.item,"gm").replace(/bull/g,ee.bullet).getRegex(),ee.listItemStart=X(/^( *)(bull) */).replace("bull",ee.bullet).getRegex(),ee.list=X(ee.list).replace(/bull/g,ee.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ee.def.source+")").getRegex(),ee._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ee.html=X(ee.html,"i").replace("comment",ee._comment).replace("tag",ee._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ee.paragraph=X(ee._paragraph).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.blockquote=X(ee.blockquote).replace("paragraph",ee.paragraph).getRegex(),ee.normal=Q({},ee),ee.gfm=Q({},ee.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ee.gfm.nptable=X(ee.gfm.nptable).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.gfm.table=X(ee.gfm.table).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.pedantic=Q({},ee.normal,{html:X("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ee._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:J,paragraph:X(ee.normal._paragraph).replace("hr",ee.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ee.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const te={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:J,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:J,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};te.punctuation=X(te.punctuation).replace(/punctuation/g,te._punctuation).getRegex(),te.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,te.escapedEmSt=/\\\*|\\_/g,te._comment=X(ee._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),te.emStrong.lDelim=X(te.emStrong.lDelim).replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimAst=X(te.emStrong.rDelimAst,"g").replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimUnd=X(te.emStrong.rDelimUnd,"g").replace(/punct/g,te._punctuation).getRegex(),te._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,te._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,te._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,te.autolink=X(te.autolink).replace("scheme",te._scheme).replace("email",te._email).getRegex(),te._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,te.tag=X(te.tag).replace("comment",te._comment).replace("attribute",te._attribute).getRegex(),te._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,te._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,te._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,te.link=X(te.link).replace("label",te._label).replace("href",te._href).replace("title",te._title).getRegex(),te.reflink=X(te.reflink).replace("label",te._label).getRegex(),te.reflinkSearch=X(te.reflinkSearch,"g").replace("reflink",te.reflink).replace("nolink",te.nolink).getRegex(),te.normal=Q({},te),te.pedantic=Q({},te.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:X(/^!?\[(label)\]\((.*?)\)/).replace("label",te._label).getRegex(),reflink:X(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",te._label).getRegex()}),te.gfm=Q({},te.normal,{escape:X(te.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),te.gfm.url=X(te.gfm.url,"i").replace("email",te.gfm._extended_email).getRegex(),te.breaks=Q({},te.gfm,{br:X(te.br).replace("{2,}","*").getRegex(),text:X(te.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var ne={block:ee,inline:te};const{defaults:re}=S,{block:oe,inline:ie}=ne,{repeatString:se}=W;function ae(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function le(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var ce=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||re,this.options.tokenizer=this.options.tokenizer||new G,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:oe.normal,inline:ie.normal};this.options.pedantic?(t.block=oe.pedantic,t.inline=ie.pedantic):this.options.gfm&&(t.block=oe.gfm,this.options.breaks?t.inline=ie.breaks:t.inline=ie.gfm),this.tokenizer.rules=t}static get rules(){return{block:oe,inline:ie}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,i,s;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"paragraph"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),i=r.items.length,o=0;o<i;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,i,s;const a=e.length;for(t=0;t<a;t++)switch(s=e[t],s.type){case"paragraph":case"text":case"heading":s.tokens=[],this.inlineTokens(s.text,s.tokens);break;case"table":for(s.tokens={header:[],cells:[]},o=s.header.length,n=0;n<o;n++)s.tokens.header[n]=[],this.inlineTokens(s.header[n],s.tokens.header[n]);for(o=s.cells.length,n=0;n<o;n++)for(i=s.cells[n],s.tokens.cells[n]=[],r=0;r<i.length;r++)s.tokens.cells[n][r]=[],this.inlineTokens(i[r],s.tokens.cells[n][r]);break;case"blockquote":this.inline(s.tokens);break;case"list":for(o=s.items.length,n=0;n<o;n++)this.inline(s.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,i,s,a,l,c=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(c));)e.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(c));)c=c.slice(0,s.index)+"++"+c.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(l=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const i=t[t.length-1];i&&"text"===o.type&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,c,l))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,le))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,le))){if(o=this.tokenizer.inlineText(e,r,ae))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(l=o.raw.slice(-1)),a=!0,i=t[t.length-1],i&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:ue}=S,{cleanUrl:de,escape:fe}=W;var pe=class{constructor(e){this.options=e||ue}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+fe(r,!0)+'">'+(n?e:fe(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:fe(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+fe(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},he=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},me=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:ge}=S,{unescape:be}=W;var we=class e{constructor(e){this.options=e||ge,this.options.renderer=this.options.renderer||new pe,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new he,this.slugger=new me}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,i,s,a,l,c,u,d,f,p,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,be(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(c="",l="",i=d.header.length,r=0;r<i;r++)l+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(c+=this.renderer.tablerow(l),u="",i=d.cells.length,r=0;r<i;r++){for(a=d.tokens.cells[r],l="",s=a.length,o=0;o<s;o++)l+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(l)}v+=this.renderer.table(c,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(f=d.ordered,p=d.start,h=d.loose,i=d.items.length,u="",r=0;r<i;r++)g=d.items[r],b=g.checked,w=g.task,m="",g.task&&(y=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,f,p);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const i=e.length;for(n=0;n<i;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:ye,checkSanitizeDeprecation:ve,escape:ke}=W,{getDefaults:xe,changeDefaults:$e,defaults:_e}=S;function Se(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=ye({},Se.defaults,t||{}),ve(t),n){const r=t.highlight;let o;try{o=ce.lex(e,t)}catch(e){return n(e)}const i=function(e){let i;if(!e)try{i=we.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,i)};if(!r||r.length<3)return i();if(delete t.highlight,!o.length)return i();let s=0;return Se.walkTokens(o,(function(e){"code"===e.type&&(s++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),s--,0===s&&i()}))},0))})),void(0===s&&i())}try{const n=ce.lex(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}}Se.options=Se.setOptions=function(e){return ye(Se.defaults,e),$e(Se.defaults),Se},Se.getDefaults=xe,Se.defaults=_e,Se.use=function(e){const t=ye({},e);if(e.renderer){const n=Se.defaults.renderer||new pe;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let i=e.renderer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.renderer=n}if(e.tokenizer){const n=Se.defaults.tokenizer||new G;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let i=e.tokenizer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.tokenizer=n}if(e.walkTokens){const n=Se.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Se.setOptions(t)},Se.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Se.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Se.walkTokens(n,t);break;case"list":Se.walkTokens(n.items,t);break;default:n.tokens&&Se.walkTokens(n.tokens,t)}},Se.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=ye({},Se.defaults,t||{}),ve(t);try{const n=ce.lexInline(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}},Se.Parser=we,Se.parser=we.parse,Se.Renderer=pe,Se.TextRenderer=he,Se.Lexer=ce,Se.lexer=ce.lex,Se.Tokenizer=G,Se.Slugger=me,Se.parse=Se;var Ee=Se;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ce=function(e){var t={exports:{}};return e(t,t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function i(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function s(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function l(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return s(""===n?e[r-1]:n,o)}))}function c(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var i=r[o];if(i[0].test(t))return l(t,i)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?s(r,o):e.hasOwnProperty(o)?s(r,e[o]):c(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&c(o,o,n)===o}}function f(e,t,n){return(n?t+" ":"")+(1===t?f.singular(e):f.plural(e))}return f.plural=u(o,r,e),f.isPlural=d(o,r,e),f.singular=u(r,o,t),f.isSingular=d(r,o,t),f.addPluralRule=function(t,n){e.push([i(t),n])},f.addSingularRule=function(e,n){t.push([i(e),n])},f.addUncountableRule=function(e){"string"!=typeof e?(f.addPluralRule(e,"$0"),f.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},f.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return f.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return f.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return f.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(f.addUncountableRule),f}))})),Ae=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=i.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},i;function i(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(s,this)}function s(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,i){for(var s=("selectedIndex"in t),a=s;r<o;){var l,c=e(n[r],1);t.insertBefore(c,i),s&&a&&c.selected&&(a=!a,l=t.selectedIndex,t.selectedIndex=l<0?r:d.call(t.querySelectorAll("option"),c)),r++}}function i(e,t){return e==t}function s(e){return e}function a(e,t,n,r,o,i,s){var a=i-o;if(a<1)return-1;for(;a<=n-t;){for(var l=t,c=o;l<n&&c<i&&s(e[l],r[c]);)l++,c++;if(c===i)return t;t=l+1}return-1}function l(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function c(e,t,n,r){for(;n<r;)p(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,f=function(e,t,n){for(var r=1,o=t;r<o;){var i=(r+o)/2>>>0;n<e[i]?o=i:r=1+i}return r},p=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||i,d=r.node||s,p=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,w=0;g<m&&w<b&&u(t[g],n[w]);)g++,w++;for(;g<m&&w<b&&u(t[m-1],n[b-1]);)m--,b--;var y=g===m,v=w===b;if(y&&v)return n;if(y&&w<b)return o(d,e,n,w,b,l(d,t,g,h,p)),n;if(v&&g<m)return c(d,t,g,m),n;var k=m-g,x=b-w,$=-1;if(k<x){if(-1<($=a(n,w,b,t,g,m,u)))return o(d,e,n,w,$,d(t[g],0)),o(d,e,n,$+k,b,l(d,t,m,h,p)),n}else if(x<k&&-1<($=a(t,g,m,n,w,b,u)))return c(d,t,g,$),c(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,w,b,d(t[g],0)),c(d,t,g,m)):k==x&&function(e,t,n,r,o,i){for(;r<o&&i(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,w,b,l(d,t,m,h,p)):function(e,t,n,r,i,s,a,l,u,d,p,h,m){!function(e,t,n,r,i,s,a,l,u){for(var d=[],f=e.length,p=a,h=0;h<f;)switch(e[h++]){case 0:i++,p++;break;case 1:d.push(r[i]),o(t,n,r,i++,i,p<l?t(s[p],0):u);break;case-1:p++}for(h=0;h<f;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(s[a])?a++:c(t,s,a++,a)}}(function(e,t,n,r,o,i,s){var a,l,c,u,d,f,p=n+i,h=[];e:for(b=0;b<=p;b++){if(50<b)return null;for(f=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(l=(c=a===-b||a!==b&&u[f+a-1]<u[f+a+1]?u[f+a+1]:u[f+a-1]+1)-a;c<i&&l<n&&s(r[o+c],e[t+l]);)c++,l++;if(c===i&&l===n)break e;d[b+a]=c}}for(var m=Array(b/2+p/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<c&&0<l&&s(r[o+c-1],e[t+l-1]);)m[g--]=0,c--,l--;if(!b)break;f=b-1,u=b?h[b-1]:[0,0],(a=c-l)==-b||a!==b&&u[f+a-1]<u[f+a+1]?(l--,m[g--]=1):(c--,m[g--]=-1)}return m}(n,r,s,a,l,d,h)||function(e,t,n,r,o,i,s,a){var l=0,c=r<a?r:a,u=Array(c++),d=Array(c);d[0]=-1;for(var p=1;p<c;p++)d[p]=s;for(var h=o.slice(i,s),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(l=f(d,c,g=b+i))&&(d[l]=g,u[l]={newi:m,oldi:g,prev:u[l-1]})}for(l=--c,--s;d[l]>s;)--l;c=a+r-l;var w=Array(c),y=u[l];for(--n;y;){for(var v=y.newi,k=y.oldi;v<n;)w[--c]=1,--n;for(;k<s;)w[--c]=-1,--s;w[--c]=0,--n,--s,y=y.prev}for(;t<=n;)w[--c]=1,--n;for(;i<=s;)w[--c]=-1,--s;return w}(n,r,i,s,a,l,u,d),e,t,n,r,a,l,p,m)}(d,e,n,w,b,x,t,g,m,k,h,u,p),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,w={};try{w.Map=Map}catch(u){w.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var i=r(o);return i&&(t.splice(e,1),n.splice(e,1)),i},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,i){return n[r(o)?e:t.push(o)-1]=i,this}};function r(n){return-1<(e=t.indexOf(n))}}}var y=w.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,_,S,E,C,A,L={},T={},N=[],R=T.hasOwnProperty,z=0,D={attributes:L,define:function(e,t){e.indexOf("-")<0?(e in T||(z=N.push(e)),T[e]=t):L[e]=t},invoke:function(e,t){for(var n=0;n<z;n++){var r=N[n];if(R.call(e,r))return T[r](e[r],t)}}},j=Array.isArray||(_=($={}.toString).call([]),function(e){return $.call(e)===_}),P=(S=e,E="fragment",A="content"in I(C="template")?function(e){var t=I(C);return t.innerHTML=e,t.content}:function(e){var t,n=I(E),r=I(C);return O(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=I(E),n=I("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",O(t,n.firstChild.childNodes),t}:A)(e)});function O(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function I(e){return e===E?S.createDocumentFragment():S.createElementNS("http://www.w3.org/1999/xhtml",e)}var q,M,F,B,W,U,H,Z,V,Y=(M="appendChild",F="cloneNode",B="createTextNode",U=(W="importNode")in(q=e),(H=q.createDocumentFragment())[M](q[B]("g")),H[M](q[B]("")),(U?q[W](H,!0):H[F](!0)).childNodes.length<2?function e(t,n){for(var r=t[F](),o=t.childNodes||[],i=o.length,s=0;n&&s<i;s++)r[M](e(o[s],n));return r}:U?q[W]:function(e,t){return e[F](!!t)}),K="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},G="-"+Math.random().toFixed(6)+"%",J=!1;try{Z=e.createElement("template"),V="tabindex","content"in Z&&(Z.innerHTML="<p "+V+'="'+G+'"></p>',Z.content.childNodes[0].getAttribute(V)==G)||(G="_dt: "+G.slice(1,-1)+";",J=!0)}catch(u){}var X="\x3c!--"+G+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",ie="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",se=new RegExp(oe+re+ie+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+ie+"*)(["+te+"]*/>)","g"),le=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+X+"\\2","gi");function ce(e,t,n,r){return"<"+t+n.replace(le,ue)+r}function ue(e,t,n){return t+(n||'"')+G+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var fe=J?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function pe(t,n,r,o){for(var i=t.childNodes,s=i.length,a=0;a<s;){var l=i[a];switch(l.nodeType){case 1:var c=o.concat(a);!function(t,n,r,o){for(var i,s=t.attributes,a=[],l=[],c=fe(s,r),u=c.length,d=0;d<u;){var f=c[d++],p=f.value===G;if(p||1<(i=f.value.split(X)).length){var h=f.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(p?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=s[m]||s[m.toLowerCase()];if(p)n.push(he(g,o,m,null));else{for(var b=i.length-2;b--;)r.shift();n.push(he(g,o,m,i))}}l.push(f)}}for(var w=((d=0)<(u=l.length)&&J&&!("ownerSVGElement"in t));d<u;){var y=l[d++];w&&(y.value=""),t.removeAttribute(y.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=s.length,d=0;d<u;)k.setAttributeNode(s[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(l,n,r,c),pe(l,n,r,c);break;case 8:var u=l.textContent;if(u===G)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:l,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(l),a--,s--}break;case 3:Q.test(t.nodeName)&&K.call(l.textContent)===X&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function we(e,t){var n=(e.convert||function(e){return e.join(X).replace(ae,de).replace(se,ce)})(t),r=e.transform;r&&(n=r(n));var o=P(n,e.type);ve(o);var i=[];return pe(o,i,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=i.length,s=0,a=0;s<o;){var l=i[s++],c=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,l.path);switch(l.type){case"any":r.push({fn:e.any(c,[]),sparse:!1});break;case"attr":var u=l.sparse,d=e.attribute(c,l.name,l.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(c),sparse:!1}),c.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var i=1,s=1;i<e;){var a=r[i-s];if(a.sparse){var l=a.values,c=l[0],u=1,d=l.length;for(s+=d-2;u<d;)c+=arguments[i++]+l[u++];a.fn(c)}else a.fn(arguments[i++])}return n}}}}var ye=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===K.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),Se(n,!0)}(e,t):Se(e.style,!1)});function _e(e,t,n){return t+"-"+n.toLowerCase()}function Se(e,t){var n,r;return function(o){var i,s,a,l;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(s in r)s in o||(e[s]="")}else t?e.value="":e.cssText="";for(s in i=t?{}:e,o)a="number"!=typeof(l=o[s])||ke.test(s)?l:l+"px",!t&&/^--/.test(s)?i.setProperty(s,a):i[s]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,_e),":",e[t],";");return n.join("")}(r=i):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ee,Ce,Ae=(Ee=[].slice,(Ce=Le.prototype).ELEMENT_NODE=1,Ce.nodeType=111,Ce.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ce.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,i=r.length;o<i;o++)t.appendChild(r[o]);return t},Le);function Le(e){var t=this.childNodes=Ee.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Te(e){return{html:e}}function Ne(e,t){switch(e.nodeType){case Fe:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Ne(e.render(),t);default:return e}}function Re(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Te).then(t):Promise.resolve(D.invoke(e,t)).then(t)}function ze(e){return null!=e&&"then"in e}var De,je,Pe,Oe,Ie,qe="ownerSVGElement",Me=v.prototype.nodeType,Fe=Ae.prototype.nodeType,Be=(je=(De={Event:b,WeakSet:u}).Event,Pe=De.WeakSet,Oe=!0,Ie=null,function(e){return Oe&&(Oe=!Oe,Ie=new Pe,function(e){var t=new Pe,n=new Pe;try{new MutationObserver(s).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],i=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){s(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){i({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){i({addedNodes:[e.target],removedNodes:[]})}),!0)}function s(e){for(var r,o=e.length,i=0;i<o;i++)a((r=e[i]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,i=new je(t),s=e.length,a=0;a<s;1===(o=e[a++]).nodeType&&function e(t,n,r,o,i){Ie.has(t)&&!o.has(t)&&(i.delete(t),o.add(t),t.dispatchEvent(n));for(var s=t.children||[],a=s.length,l=0;l<a;e(s[l++],n,r,o,i));}(o,i,t,n,r));}}(e.ownerDocument)),Ie.add(e),e}),We=/^(?:form|list)$/i,Ue=[].slice;function He(t){return this.type=t,function(t){var n=ye,r=ve;return function(o){var i,s,a;return n!==o&&(i=t,s=n=o,a=be.get(s)||be.set(s,we(i,s)),r=a.updates(Y.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ze=!(He.prototype={attribute:function(e,t,n){var r,o=qe in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return c=e,u=t.slice(1),o?function(e){try{c[u]=e}catch(t){c.setAttribute(u,e)}}:function(e){c[u]=e};if("?"===t.slice(0,1))return s=e,a=t.slice(1),function(e){l!==!!e&&((l=!!e)?s.setAttribute(a,""):s.removeAttribute(a))};if(/^on/.test(t)){var i=t.slice(2);return"connected"===i||"disconnected"===i?Be(e):t.toLowerCase()in e&&(i=i.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(i,r,!1),(r=t)&&e.addEventListener(i,t,!1))}}if("data"===t||!o&&t in e&&!We.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in D.attributes)return function(n){var o=D.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var s,a,l,c,u,d=!1,f=n.cloneNode(!0);return function(t){r!==t&&(r=t,f.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(f)),f.value=t):(f.value=t,d||(d=!0,e.setAttributeNode(f)))))}},any:function(e,t){var n,r={node:Ne,before:e},o=qe in e?"svg":"html",i=!1;return function s(a){switch(typeof a){case"string":case"number":case"boolean":i?n!==a&&(n=a,t[0].textContent=a):(i=!0,n=a,t=h(e.parentNode,t,[(l=a,e.ownerDocument.createTextNode(l))],r));break;case"function":s(a(e));break;case"object":case"undefined":if(null==a){i=!1,t=h(e.parentNode,t,[],r);break}default:if(i=!1,j(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":s({html:a});break;case"object":if(j(a[0])&&(a=a.concat.apply([],a)),ze(a[0])){Promise.all(a).then(s);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?Ue.call(a.childNodes):[a],r):ze(a)?a.then(s):"placeholder"in a?Re(a,s):"text"in a?s(String(a.text)):"any"in a?s(a.any):"html"in a?t=h(e.parentNode,t,Ue.call(P([].concat(a.html).join(""),o).childNodes),r):s("length"in a?Ue.call(a):D.invoke(a,s))}var l}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?ze(r)?r.then(n):"placeholder"in r?Re(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?Ue.call(r).join(""):D.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,i,s,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),l=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||l?(o={},i=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=l?i:(s=new n,function(e){return s.get(e)||(n=i(t=e),s.set(t,n),n);var t,n})):Ze=!0,Ye(t)};function Ye(e){return Ze?e:Ve(e)}function Ke(e){for(var t=arguments.length,n=[Ye(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Ge=new n,Je=function(e){var t,n,r;return function(){var o=Ke.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Xe=function(e,t){var n=t.indexOf(":"),r=Ge.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Ge.set(e,r={}),r[o]||(r[o]=Je(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Ae(t):e},et=new n;function tt(){var e=et.get(this),t=Ke.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(qe in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,it,st=D.define,at=He.prototype;function lt(e){return arguments.length<2?null==e?Je("html"):"string"==typeof e?lt.wire(null,e):"raw"in e?Je("html")(e):"nodeType"in e?lt.bind(e):Xe(e,"html"):("raw"in e?Je("html"):lt.wire).apply(null,arguments)}return lt.Component=v,lt.bind=function(e){return tt.bind(e)},lt.define=st,lt.diff=h,(lt.hyper=lt).observe=Be,lt.tagger=at,lt.wire=function(e,t){return null==e?Je(t||"html"):Xe(e,t||"html")},lt._={WeakMap:n,WeakSet:u},nt=Je,rt=new n,ot=Object.create,it=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var i,s,a,l=t.get(e)||it(e,t);switch(typeof o){case"object":case"function":var c=l.w||(l.w=new n);return c.get(o)||(i=c,s=o,a=new e(r),i.set(s,a),a);default:var u=l.p||(l.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new y,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),lt}(document); +/*! (c) Andrea Giammarchi (ISC) */const Le=$,Te=Ae,Ne=Ee,Re=Ce,ze=qe({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}}),De=new Intl.DateTimeFormat(["en-ca-iso8601"],{timeZone:"UTC",year:"numeric",month:"2-digit",day:"2-digit"});function je(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Pe(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function Oe(e=[],t=(e=>e),n=i){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(ze.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=ze.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function Ie(e){return e.trim().replace(/\s+/g," ")}function qe(e,t=i){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function Me(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){nt(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}function Fe(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Te`${e}, `);return Te`${r}${n[n.length-1]}`}function Be(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function We(e){const t=new Set,n="ltNodefault"in e.dataset?"":Ie(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>Ie(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(Ie(e)))}return[...t]}function Ue(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function He(e,t){const n=t.closest(".informative, .note, .issue, .example, .ednote, .practice, .introductory");let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function Ze(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function Ve(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function Ye(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class Ke extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function Ge(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>Ue(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),Je(t),t}function Je(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...Xe(t)])e.remove()}function*Xe(e){for(;e.nextNode();)yield e.currentNode}class Qe extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class et extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||Be(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:i,title:s,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:i,title:s,details:a,stack:n}}}function tt(e,t,n={}){const r={...n,isWarning:!1};it("error",new et(e,t,r))}function nt(e,t,n={}){const r={...n,isWarning:!0};it("warn",new et(e,t,r))}const rt="core/pubsubhub",ot=new Map;function it(e,...t){if(!ot.has(e))return;if(Array.from(ot.get(e)).forEach(e=>{try{e(...t)}catch(t){tt(`Error when calling function ${e.name}.`,rt,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function st(e,t,n={once:!1}){return n.once?st(e,(function n(...r){!function({topic:e,cb:t}){const n=ot.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(ot.has(e)?ot.get(e).add(t):ot.set(e,new Set([t])),{topic:e,cb:t})}n(rt,{sub:st});const at=["githubToken","githubUser"];const lt=new Map([["text/html","html"],["application/xml","xml"]]);function ct(e,t=document){const n=lt.get(e);if(!n){const t=[...lt.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=ut(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}function ut(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;Je(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Pe(r);const o=e.createDocumentFragment(),i=e.querySelector("meta[name='viewport']");i&&t.firstChild!==i&&o.appendChild(i);let s=e.querySelector("meta[charset], meta[content*='charset=']");s||(s=Te`<meta charset="utf-8" />`);o.appendChild(s);const a="ReSpec "+(window.respecVersion||"Developer Channel"),l=Te` + <meta name="generator" content="${a}" /> + `;o.appendChild(l),t.prepend(o),it("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}n("core/exporter",{rsDocToDataURL:ct});class dt{constructor(){this._respecDonePromise=new Promise(e=>{st("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],st("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),st("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}async toHTML(){return ut("html",document)}}const ft="core/post-process";const pt="core/pre-process";const ht="core/base-runner";var mt=Object.freeze({__proto__:null,name:ht,runAll:async function(e){!function(){const e=new dt;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(nt("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),it("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),st("amend-user-config",n),st("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of at)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),it("amend-user-config",r)}(respecConfig),performance.mark(ht+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||tt("Every item in `preProcess` must be a JS function.",pt),t}).map(async t=>{try{return await t(e,document)}catch(e){tt(`Function ${t.name} threw an error during \`preProcess\`.`,pt,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const i=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(i),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},it("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||tt("Every item in `postProcess` must be a JS function.",ft),t}).map(async t=>{try{return await t(e,document)}catch(e){tt(`Function ${t.name} threw an error during \`postProcess\`.`,ft,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),it("end-all"),Pe(document),performance.mark(ht+"-end"),performance.measure(ht,ht+"-start",ht+"-end")}});var gt=String.raw`.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0} #respec-ui{position:fixed;display:flex;flex-direction:row-reverse;top:20px;right:20px;width:202px;text-align:right;z-index:9000} #respec-pill,.respec-info-button{background:#fff;height:2.5em;color:#787878;border:1px solid #ccc;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5)} .respec-info-button{border:none;opacity:.75;border-radius:2em;margin-right:1em;min-width:3.5em} @@ -53,32 +55,32 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e } .respec-iframe{width:100%;min-height:550px;height:100%;overflow:hidden;padding:0;margin:0;border:0} .respec-iframe:not(.ready){background:url(https://respec.org/xref/loader.gif) no-repeat center} -.respec-iframe+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}`;function ht(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var mt=Object.freeze({__proto__:null,name:"core/reindent",reindent:ht,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=ht(e.innerHTML)}});const gt=/>/gm,bt=/&/gm;class wt extends Ne.Renderer{code(e,t,n){const{language:r,...o}=wt.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const i=super.code(e,r,n),{example:s,illegalExample:a}=o;if(!s&&!a)return i;const l=s||a,c=`${r} ${s?"example":"illegal-example"}`;return i.replace("<pre>",`<pre title="${l}" class="${c}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function yt(e){const t=ht(e).replace(gt,">").replace(bt,"&");return Ne(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new wt})}function vt(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=yt(e.innerHTML)}class kt{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function xt(e,t){return function e(n){const r=new kt(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function $t(e){const t=xt(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const _t=(St="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll(St);return t.forEach(vt),Array.from(t)});var St;var Et=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:yt,restructure:$t,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of _t(document.body))$t(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=Ye(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),vt(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const i=xt(o,document);o.append(r,i),document.body.replaceWith(o)}});function Ct(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=pt,e.classList.add("removeOnSave"),document.head.appendChild(e)}();const At=Te`<div id="respec-ui" class="removeOnSave" hidden></div>`,Lt=Te`<ul +.respec-iframe+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}`;function bt(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var wt=Object.freeze({__proto__:null,name:"core/reindent",reindent:bt,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=bt(e.innerHTML)}});const yt=/>/gm,vt=/&/gm;class kt extends Ne.Renderer{code(e,t,n){const{language:r,...o}=kt.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const i=super.code(e,r,n),{example:s,illegalExample:a}=o;if(!s&&!a)return i;const l=s||a,c=`${r} ${s?"example":"illegal-example"}`;return i.replace("<pre>",`<pre title="${l}" class="${c}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function xt(e){const t=bt(e).replace(yt,">").replace(vt,"&");return Ne(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new kt})}function $t(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=xt(e.innerHTML)}class _t{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function St(e,t){return function e(n){const r=new _t(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function Et(e){const t=St(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const Ct=(At="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll(At);return t.forEach($t),Array.from(t)});var At;var Lt=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:xt,restructure:Et,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of Ct(document.body))Et(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=Ye(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),$t(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const i=St(o,document);o.append(r,i),document.body.replaceWith(o)}});function Tt(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=gt,e.classList.add("removeOnSave"),document.head.appendChild(e)}();const Nt=Te`<div id="respec-ui" class="removeOnSave" hidden></div>`,Rt=Te`<ul id="respec-menu" role="menu" aria-labelledby="respec-pill" hidden -></ul>`,Tt=Te`<button +></ul>`,zt=Te`<button class="close-button" - onclick=${()=>Ft.closeModal()} + onclick=${()=>Ut.closeModal()} title="Close" > ❌ -</button>`;let Nt,Rt;window.addEventListener("load",()=>It(Lt));const zt=[],Dt=[],jt={};st("start-all",()=>document.body.prepend(At),{once:!0}),st("end-all",()=>document.body.prepend(At),{once:!0});const Pt=Te`<button id="respec-pill" disabled>ReSpec</button>`;function Ot(){Lt.classList.toggle("respec-hidden"),Lt.classList.toggle("respec-visible"),Lt.hidden=!Lt.hidden}function It(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}At.appendChild(Pt),Pt.addEventListener("click",e=>{e.stopPropagation(),Pt.setAttribute("aria-expanded",String(Lt.hidden)),Ot(),Lt.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{Lt.hidden||Ot()}),At.appendChild(Lt),Lt.addEventListener("keydown",e=>{"Escape"!==e.key||Lt.hidden||(Pt.setAttribute("aria-expanded",String(Lt.hidden)),Ot(),Pt.focus())});const qt=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function Mt(e,t,n,r){t.push(e),jt.hasOwnProperty(n)||(jt[n]=function(e,t,n){const r=Te`<button +</button>`;let Dt,jt;window.addEventListener("load",()=>Ft(Rt));const Pt=[],Ot=[],It={};st("start-all",()=>document.body.prepend(Nt),{once:!0}),st("end-all",()=>document.body.prepend(Nt),{once:!0});const qt=Te`<button id="respec-pill" disabled>ReSpec</button>`;function Mt(){Rt.classList.toggle("respec-hidden"),Rt.classList.toggle("respec-visible"),Rt.hidden=!Rt.hidden}function Ft(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}Nt.appendChild(qt),qt.addEventListener("click",e=>{e.stopPropagation(),qt.setAttribute("aria-expanded",String(Rt.hidden)),Mt(),Rt.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{Rt.hidden||Mt()}),Nt.appendChild(Rt),Rt.addEventListener("keydown",e=>{"Escape"!==e.key||Rt.hidden||(qt.setAttribute("aria-expanded",String(Rt.hidden)),Mt(),qt.focus())});const Bt=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function Wt(e,t,n,r){t.push(e),It.hasOwnProperty(n)||(It[n]=function(e,t,n){const r=Te`<button id="${"respec-pill-"+e}" class="respec-info-button" - ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Te`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(Bt(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}Ft.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return Ct(r,o),r}(n,t,r),At.appendChild(jt[n]));const o=jt[n];o.textContent=t.length;const i=1===t.length?Re.singular(r):r;Ct(o,new Map([["label",`${t.length} ${i}`]]))}Ct(Pt,qt);const Ft={show(){try{At.hidden=!1}catch(e){console.error(e)}},hide(){At.hidden=!0},enable(){Pt.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),i=Te`<button id="${o}" class="respec-option"> + ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Te`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(Ht(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}Ut.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return Tt(r,o),r}(n,t,r),Nt.appendChild(It[n]));const o=It[n];o.textContent=t.length;const i=1===t.length?Re.singular(r):r;Tt(o,new Map([["label",`${t.length} ${i}`]]))}Tt(qt,Bt);const Ut={show(){try{Nt.hidden=!1}catch(e){console.error(e)}},hide(){Nt.hidden=!0},enable(){qt.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),i=Te`<button id="${o}" class="respec-option"> <span class="respec-cmd-icon" aria-hidden="true">${r}</span> ${e}… - </button>`,s=Te`<li role="menuitem">${i}</li>`;return s.addEventListener("click",t),Lt.appendChild(s),i},error(e){Mt(e,zt,"error","ReSpec Errors")},warning(e){Mt(e,Dt,"warning","ReSpec Warnings")},closeModal(e){Rt&&(Rt.classList.remove("respec-show-overlay"),Rt.classList.add("respec-hide-overlay"),Rt.addEventListener("transitionend",()=>{Rt.remove(),Rt=null})),e&&e.setAttribute("aria-expanded","false"),Nt&&(Nt.remove(),Nt=null,Pt.focus())},freshModal(e,t,n){Nt&&Nt.remove(),Rt&&Rt.remove(),Rt=Te`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";Nt=Te`<div + </button>`,s=Te`<li role="menuitem">${i}</li>`;return s.addEventListener("click",t),Rt.appendChild(s),i},error(e){Wt(e,Pt,"error","ReSpec Errors")},warning(e){Wt(e,Ot,"warning","ReSpec Warnings")},closeModal(e){jt&&(jt.classList.remove("respec-show-overlay"),jt.classList.add("respec-hide-overlay"),jt.addEventListener("transitionend",()=>{jt.remove(),jt=null})),e&&e.setAttribute("aria-expanded","false"),Dt&&(Dt.remove(),Dt=null,qt.focus())},freshModal(e,t,n){Dt&&Dt.remove(),jt&&jt.remove(),jt=Te`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";Dt=Te`<div id="${r}" class="respec-modal removeOnSave" role="dialog" aria-labelledby="${o}" > - ${Tt} + ${zt} <h3 id="${o}">${e}</h3> <div class="inside">${t}</div> - </div>`;const i=new Map([["labelledby",o]]);Ct(Nt,i),document.body.append(Rt,Nt),Rt.addEventListener("click",()=>this.closeModal(n)),Rt.classList.toggle("respec-show-overlay"),Nt.hidden=!1,It(Nt)}};function Bt(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${Oe(e.elements.map(Wt))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return yt(`${t}${e.message}${n}${r}${o}`)}function Wt(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&Ft.closeModal()}),window.respecUI=Ft,st("error",e=>Ft.error(e)),st("warn",e=>Ft.warning(e));var Ut=Object.freeze({__proto__:null,name:"core/ui",ui:Ft});var Ht=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const Zt=new WeakMap;class Vt{constructor(e,t){Zt.set(this,{name:e,lintingFunction:t})}get name(){return Zt.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return Zt.get(this).lintingFunction(e,t)}}const Yt="check-charset",Kt={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},Gt=i in Kt?i:"en";const Jt=new Vt(Yt,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:Yt,occurrences:n.length,...Kt[Gt]}})),Xt="check-internal-slots",Qt={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},en=i in Qt?i:"en";const tn=new Vt(Xt,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:Xt,offendingElements:n,occurrences:n.length,...Qt[en]}})),nn="check-punctuation",rn=[".",":","!","?"],on={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${rn.map(e=>`"${e}"`).join(", ")}.`}},sn=i in on?i:"en";const an=new Vt(nn,(function(e,t){const n=new RegExp(`[${rn.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:nn,offendingElements:r,occurrences:r.length,...on[sn]}})),ln="core/linter",cn=new WeakMap;const un=new class{constructor(){cn.set(this,{rules:new Set})}get rules(){return cn.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...cn.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...dn,...t},{description:r,help:o,howToFix:i,name:s,occurrences:a,offendingElements:l}=n,c=l.length?r:`${r} (Count: ${a})`;nt(c,`${ln}/${s}`,{hint:`${i} ${o}`,elements:l})}(n.lint(e,t)));await n}},dn={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var fn=Object.freeze({__proto__:null,name:ln,default:un,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await un.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const pn="local-refs-exist",hn={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},mn=i in hn?i:"en";const gn=new Vt(pn,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(bn);if(n.length)return{name:pn,offendingElements:n,occurrences:n.length,...hn[mn]}}));function bn(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const wn="no-headingless-sections",yn={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},vn=i in yn?i:"en",kn=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const xn=new Vt(wn,(function(e,t){const n=[...t.querySelectorAll("section")].filter(kn);if(n.length)return{name:wn,offendingElements:n,occurrences:n.length,...yn[vn]}})),$n="no-http-props",_n={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},Sn=i in _n?i:"en";const En=new Vt($n,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:$n,occurrences:n.length,..._n[Sn]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),Cn="no-unused-vars",An={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Ln=i in An?i:"en";const Tn=new Vt(Cn,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=Ie(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:Cn,offendingElements:n,occurrences:n.length,...An[Ln]}})),Nn="privsec-section",Rn={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},zn=i in Rn?i:"en";const Dn=new Vt(Nn,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Nn,occurrences:1,...Rn[zn]}}));un.register(En,xn,Tn,an,gn,tn,Jt,Dn);const jn={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0};un.register(Dn);const Pn=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}],["cc-by-sa",{name:"Creative Commons Attribution-ShareAlike 4.0 International Public License",short:"CC-BY-SA",url:"https://creativecommons.org/licenses/by-sa/4.0/legalcode"}]]),On={format:"markdown",isED:!1,isNoTrack:!0,isPR:!1,lint:{"privsec-section":!0,"wpt-tests-exist":!1},logos:[],prependW3C:!1,doJsonLd:!1,license:"cc-by",shortName:"X",showPreviousVersion:!1};var In=Object.freeze({__proto__:null,name:"dini/defaults",run:function(e){const t=!1!==e.lint&&{...jn.lint,...On.lint,...e.lint};Object.assign(e,{...jn,...On,...e,lint:t}),Object.assign(e,function(e){return{licenseInfo:Pn.get(e.license)}}(e))}});var qn=String.raw`@keyframes pop{ + </div>`;const i=new Map([["labelledby",o]]);Tt(Dt,i),document.body.append(jt,Dt),jt.addEventListener("click",()=>this.closeModal(n)),jt.classList.toggle("respec-show-overlay"),Dt.hidden=!1,Ft(Dt)}};function Ht(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${Oe(e.elements.map(Zt))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return xt(`${t}${e.message}${n}${r}${o}`)}function Zt(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&Ut.closeModal()}),window.respecUI=Ut,st("error",e=>Ut.error(e)),st("warn",e=>Ut.warning(e));var Vt=Object.freeze({__proto__:null,name:"core/ui",ui:Ut});var Yt=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const Kt=new WeakMap;class Gt{constructor(e,t){Kt.set(this,{name:e,lintingFunction:t})}get name(){return Kt.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return Kt.get(this).lintingFunction(e,t)}}const Jt="check-charset",Xt={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},Qt=i in Xt?i:"en";const en=new Gt(Jt,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:Jt,occurrences:n.length,...Xt[Qt]}})),tn="check-internal-slots",nn={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},rn=i in nn?i:"en";const on=new Gt(tn,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:tn,offendingElements:n,occurrences:n.length,...nn[rn]}})),sn="check-punctuation",an=[".",":","!","?"],ln={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${an.map(e=>`"${e}"`).join(", ")}.`}},cn=i in ln?i:"en";const un=new Gt(sn,(function(e,t){const n=new RegExp(`[${an.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:sn,offendingElements:r,occurrences:r.length,...ln[cn]}})),dn="core/linter",fn=new WeakMap;const pn=new class{constructor(){fn.set(this,{rules:new Set})}get rules(){return fn.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...fn.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...hn,...t},{description:r,help:o,howToFix:i,name:s,occurrences:a,offendingElements:l}=n,c=l.length?r:`${r} (Count: ${a})`;nt(c,`${dn}/${s}`,{hint:`${i} ${o}`,elements:l})}(n.lint(e,t)));await n}},hn={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var mn=Object.freeze({__proto__:null,name:dn,default:pn,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await pn.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const gn="local-refs-exist",bn={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},wn=i in bn?i:"en";const yn=new Gt(gn,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(vn);if(n.length)return{name:gn,offendingElements:n,occurrences:n.length,...bn[wn]}}));function vn(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const kn="no-headingless-sections",xn={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},$n=i in xn?i:"en",_n=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const Sn=new Gt(kn,(function(e,t){const n=[...t.querySelectorAll("section")].filter(_n);if(n.length)return{name:kn,offendingElements:n,occurrences:n.length,...xn[$n]}})),En="no-http-props",Cn={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},An=i in Cn?i:"en";const Ln=new Gt(En,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:En,occurrences:n.length,...Cn[An]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),Tn="no-unused-vars",Nn={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Rn=i in Nn?i:"en";const zn=new Gt(Tn,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=Ie(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:Tn,offendingElements:n,occurrences:n.length,...Nn[Rn]}})),Dn="privsec-section",jn={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},Pn=i in jn?i:"en";const On=new Gt(Dn,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Dn,occurrences:1,...jn[Pn]}}));pn.register(Ln,Sn,zn,un,yn,on,en,On);const In={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0};pn.register(On);const qn=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}],["cc-by-sa",{name:"Creative Commons Attribution-ShareAlike 4.0 International Public License",short:"CC-BY-SA",url:"https://creativecommons.org/licenses/by-sa/4.0/legalcode"}]]),Mn={format:"markdown",isED:!1,isNoTrack:!0,isPR:!1,lint:{"privsec-section":!0,"wpt-tests-exist":!1},logos:[],prependW3C:!1,doJsonLd:!1,license:"cc-by",shortName:"X",showPreviousVersion:!1};var Fn=Object.freeze({__proto__:null,name:"dini/defaults",run:function(e){const t=!1!==e.lint&&{...In.lint,...Mn.lint,...e.lint};Object.assign(e,{...In,...Mn,...e,lint:t}),Object.assign(e,function(e){return{licenseInfo:qn.get(e.license)}}(e))}});var Bn=String.raw`@keyframes pop{ 0%{transform:scale(1,1)} 25%{transform:scale(1.25,1.25);opacity:.75} 100%{transform:scale(1,1)} @@ -134,19 +136,19 @@ h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left: } @media print{ .removeOnSave{display:none} -}`;const Mn=function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=qn,document.head.appendChild(e),e}();var Fn=Object.freeze({__proto__:null,name:"core/style",run:function(e){e.noReSpecCSS&&Mn.remove()}});const Bn="dini/style";const Wn=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/base.css",as:"style"}],t=document.createDocumentFragment();for(const n of e.map(je))t.appendChild(n);return t}();Wn.appendChild(function(){const e=document.createElement("link");return e.rel="stylesheet",e.href="https://www.w3.org/StyleSheets/TR/2016/base.css",e.classList.add("removeOnSave"),e}()),document.head.querySelector("meta[name=viewport]")||Wn.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(Wn);var Un=Object.freeze({__proto__:null,name:Bn,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'base'.";e.specStatus="base",nt(t,Bn)}let t="";switch(e.specStatus.toUpperCase()){case"UNOFFICIAL":t="W3C-UD";break;case"BASE":t="base.css"}e.noToc||st("end-all",()=>{!function(e,t){const n=e.createElement("script");location.hash&&n.addEventListener("load",()=>{window.location.href=location.hash},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,"2016")},{once:!0});const n="https://www.w3.org/StyleSheets/TR/2016/"+t;var r;!function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,n),st("beforesave",(r=n,e=>{const t=e.querySelector(`head link[href="${r}"]`);e.querySelector("head").append(t)}))}});const Hn="core/data-include";function Zn(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=Me(e,r.dataset.oninclude,n),i="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=yt(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&$t(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:i}),i||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var Vn=Object.freeze({__proto__:null,name:Hn,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);Zn(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),tt(r,Hn,{elements:[e]})}});await Promise.all(t)}});const Yn="core/title",Kn=qe({en:{default_title:"No Title"},de:{default_title:"Kein Titel"},zh:{default_title:"无标题"}});var Gn=Object.freeze({__proto__:null,name:Yn,run:function(e){const t=document.querySelector("h1#title")||Te`<h1 id="title"></h1>`;if(t.isConnected&&""===t.textContent.trim()){tt('The document is missing a title, so using a default title. To fix this, please give your document a `<title>`. If you need special markup in the document\'s title, please use a `<h1 id="title">`.',Yn,{title:"Document is missing a title",elements:[t]})}t.id||(t.id="title"),t.classList.add("title"),function(e,t){t.isConnected||(t.textContent=document.title||""+Kn.default_title);let n=Ie(t.textContent);if(e.isPreview&&e.prNumber){const r=e.prUrl||`${e.github.repoURL}pull/${e.prNumber}`,{childNodes:o}=Te` +}`;const Wn=function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=Bn,document.head.appendChild(e),e}();var Un=Object.freeze({__proto__:null,name:"core/style",run:function(e){e.noReSpecCSS&&Wn.remove()}});const Hn="dini/style";const Zn=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/base.css",as:"style"}],t=document.createDocumentFragment();for(const n of e.map(je))t.appendChild(n);return t}();Zn.appendChild(function(){const e=document.createElement("link");return e.rel="stylesheet",e.href="https://www.w3.org/StyleSheets/TR/2016/base.css",e.classList.add("removeOnSave"),e}()),document.head.querySelector("meta[name=viewport]")||Zn.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(Zn);var Vn=Object.freeze({__proto__:null,name:Hn,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'base'.";e.specStatus="base",nt(t,Hn)}let t="";switch(e.specStatus.toUpperCase()){case"UNOFFICIAL":t="W3C-UD";break;case"BASE":t="base.css"}e.noToc||st("end-all",()=>{!function(e,t){const n=e.createElement("script");location.hash&&n.addEventListener("load",()=>{window.location.href=location.hash},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,"2016")},{once:!0});const n="https://www.w3.org/StyleSheets/TR/2016/"+t;var r;!function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,n),st("beforesave",(r=n,e=>{const t=e.querySelector(`head link[href="${r}"]`);e.querySelector("head").append(t)}))}});const Yn="core/data-include";function Kn(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=Me(e,r.dataset.oninclude,n),i="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=xt(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&Et(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:i}),i||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var Gn=Object.freeze({__proto__:null,name:Yn,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);Kn(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),tt(r,Yn,{elements:[e]})}});await Promise.all(t)}});const Jn="core/title",Xn=qe({en:{default_title:"No Title"},de:{default_title:"Kein Titel"},zh:{default_title:"无标题"}});var Qn=Object.freeze({__proto__:null,name:Jn,run:function(e){const t=document.querySelector("h1#title")||Te`<h1 id="title"></h1>`;if(t.isConnected&&""===t.textContent.trim()){tt('The document is missing a title, so using a default title. To fix this, please give your document a `<title>`. If you need special markup in the document\'s title, please use a `<h1 id="title">`.',Jn,{title:"Document is missing a title",elements:[t]})}t.id||(t.id="title"),t.classList.add("title"),function(e,t){t.isConnected||(t.textContent=document.title||""+Xn.default_title);let n=Ie(t.textContent);if(e.isPreview&&e.prNumber){const r=e.prUrl||`${e.github.repoURL}pull/${e.prNumber}`,{childNodes:o}=Te` Preview of PR <a href="${r}">#${e.prNumber}</a>: - `;t.prepend(...o),n=`Preview of PR #${e.prNumber}: ${n}`}document.title=n,e.title=n}(e,t),document.body.prepend(t)}});function Jn(e){if(!e.key){const t="Found a link without `key` attribute in the configuration. See dev console.";return nt(t,"core/templates/show-link"),void console.warn(t,e)}return Te` + `;t.prepend(...o),n=`Preview of PR #${e.prNumber}: ${n}`}document.title=n,e.title=n}(e,t),document.body.prepend(t)}});function er(e){if(!e.key){const t="Found a link without `key` attribute in the configuration. See dev console.";return nt(t,"core/templates/show-link"),void console.warn(t,e)}return Te` <dt class="${e.class?e.class:null}">${e.key}</dt> - ${e.data?e.data.map(Xn):Xn(e)} - `}function Xn(e){return Te`<dd class="${e.class?e.class:null}"> + ${e.data?e.data.map(tr):tr(e)} + `}function tr(e){return Te`<dd class="${e.class?e.class:null}"> ${e.href?Te`<a href="${e.href}">${e.value||e.href}</a>`:e.value} - </dd>`}function Qn(e){const t=Te`<a href="${e.url||""}" class="logo"></a>`;if(!e.alt){nt("Found spec logo without an `alt` attribute.","core/templates/show-logo",{elements:[t]})}const n=Te`<img + </dd>`}function nr(e){const t=Te`<a href="${e.url||""}" class="logo"></a>`;if(!e.alt){nt("Found spec logo without an `alt` attribute.","core/templates/show-logo",{elements:[t]})}const n=Te`<img id="${e.id}" alt="${e.alt}" width="${e.width}" height="${e.height}" - />`;return n.src=e.src,t.append(n),t}const er={en:{until:e=>Te` Until ${e} `},es:{until:e=>Te` Hasta ${e} `},ko:{until:e=>Te` ${e} 이전 `},ja:{until:e=>Te` ${e} 以前 `},de:{until:e=>Te` bis ${e} `},zh:{until:e=>Te` 直到 ${e} `}},tr=i in er?i:"en",nr=Te`<svg + />`;return n.src=e.src,t.append(n),t}const rr={en:{until:e=>Te` Until ${e} `},es:{until:e=>Te` Hasta ${e} `},ko:{until:e=>Te` ${e} 이전 `},ja:{until:e=>Te` ${e} 以前 `},de:{until:e=>Te` bis ${e} `},zh:{until:e=>Te` 直到 ${e} `}},or=i in rr?i:"en",ir=Te`<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" @@ -165,7 +167,7 @@ h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left: class="st1" d="M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z" /> -</svg>`;function rr(e=[]){const t=er[tr];return e.map((function(e){const r=[e.name],o=[e.company],i=e.w3cid?parseInt(e.w3cid,10):null,s=Te`<dd +</svg>`;function sr(e=[]){const t=rr[or];return e.map((function(e){const r=[e.name],o=[e.company],i=e.w3cid?parseInt(e.w3cid,10):null,s=Te`<dd class="p-author h-card vcard" data-editor-id="${i}" ></dd>`,a=document.createDocumentFragment(),l=[];e.mailto?l.push(Te`<a @@ -173,13 +175,13 @@ h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left: href="${"mailto:"+e.mailto}" >${r}</a >`):e.url?l.push(Te`<a class="u-url url p-name fn" href="${e.url}">${r}</a>`):l.push(Te`<span class="p-name fn">${r}</span>`);e.orcid&&l.push(Te`<a class="p-name orcid" href="${e.orcid}" - >${nr.cloneNode(!0)} + >${ir.cloneNode(!0)} </a>`);e.company&&(e.companyURL?l.push(Te` (<a class="p-org org h-org h-card" href="${e.companyURL}" >${o}</a >) - `):l.push(Te` (${o}) `));e.note&&l.push(document.createTextNode(` (${e.note})`));if(e.extras){const t=e.extras.filter(e=>e.name&&e.name.trim()).map(n);for(const e of t)l.push(document.createTextNode(", "),e)}if(e.retiredDate){const n=new Date(e.retiredDate),r="Invalid Date"!==n.toString(),o=document.createElement("time");if(o.textContent=r?function(e=new Date,t=document.documentElement.lang||"en"){e instanceof Date||(e=new Date(e));const n=[t,"en"];return`${e.toLocaleString(n,{day:"2-digit",timeZone:"UTC"})} ${e.toLocaleString(n,{month:"long",timeZone:"UTC"})} ${e.toLocaleString(n,{year:"numeric",timeZone:"UTC"})}`}(n):"Invalid Date",!r){tt("The date is invalid. The expected format is YYYY-MM-DD.","core/templates/show-people",{title:"Invalid date",elements:[o]})}o.dateTime=(c=n,De.format(c)),l.push(Te` - ${t.until(o)} `)}var c;return Te.bind(a)`${l}`,s.appendChild(a),s}));function n(e){const t=Te`<span class="${e.class||null}"></span>`;let n=t;return e.href&&(n=Te`<a href="${e.href}"></a>`,t.appendChild(n)),n.textContent=e.name,t}}const or="dini/templates/headers",ir="https://creativecommons.org/licenses/by/4.0/legalcode",sr=qe({en:{author:"Author:",authors:"Authors:",editor:"Editor:",editors:"Editors:",former_editor:"Former editor:",former_editors:"Former editors:",latest_editors_draft:"Latest editor's draft:",latest_published_version:"Latest published version:",this_version:"This version:"},ko:{author:"저자:",authors:"저자:",editor:"편집자:",editors:"편집자:",former_editor:"이전 편집자:",former_editors:"이전 편집자:",latest_editors_draft:"최신 편집 초안:",latest_published_version:"최신 버전:",this_version:"현재 버전:"},zh:{author:"作者:",authors:"作者:",editor:"编辑:",editors:"编辑:",former_editor:"原编辑:",former_editors:"原编辑:",latest_editors_draft:"最新编辑草稿:",latest_published_version:"最新发布版本:",this_version:"本版本:"},ja:{author:"著者:",authors:"著者:",editor:"編者:",editors:"編者:",former_editor:"以前の版の編者:",former_editors:"以前の版の編者:",latest_editors_draft:"最新の編集用草案:",latest_published_version:"最新バージョン:",this_version:"このバージョン:"},nl:{author:"Auteur:",authors:"Auteurs:",editor:"Redacteur:",editors:"Redacteurs:",latest_editors_draft:"Laatste werkversie:",latest_published_version:"Laatst gepubliceerde versie:",this_version:"Deze versie:"},es:{author:"Autor:",authors:"Autores:",editor:"Editor:",editors:"Editores:",latest_editors_draft:"Borrador de editor mas reciente:",latest_published_version:"Versión publicada mas reciente:",this_version:"Ésta versión:"},de:{author:"Autor/in:",authors:"Autor/innen:",editor:"Redaktion:",editors:"Redaktion:",former_editor:"Frühere Mitwirkende:",former_editors:"Frühere Mitwirkende:",latest_editors_draft:"Letzter Entwurf:",latest_published_version:"Letzte publizierte Fassung:",this_version:"Diese Fassung:"}});var ar=e=>Te`<div class="head"> - ${e.logos.map(Qn)} ${document.querySelector("h1#title")} + `):l.push(Te` (${o}) `));e.note&&l.push(document.createTextNode(` (${e.note})`));if(e.extras){const t=e.extras.filter(e=>e.name&&e.name.trim()).map(n);for(const e of t)l.push(document.createTextNode(", "),e)}if(e.retiredDate){const n=new Date(e.retiredDate),r="Invalid Date"!==n.toString(),o=document.createElement("time");if(o.textContent=r?function(e=new Date,t=document.documentElement.lang||"en"){e instanceof Date||(e=new Date(e));const n=[t,"en"];return`${e.toLocaleString(n,{day:"2-digit",timeZone:"UTC"})} ${e.toLocaleString(n,{month:"long",timeZone:"UTC"})} ${e.toLocaleString(n,{year:"numeric",timeZone:"UTC"})}`}(n):"Invalid Date",!r){tt("The date is invalid. The expected format is YYYY-MM-DD.","core/templates/show-people",{title:"Invalid date",elements:[o]})}o.dateTime=(c=n,De.format(c)),l.push(Te` - ${t.until(o)} `)}var c;return Te.bind(a)`${l}`,s.appendChild(a),s}));function n(e){const t=Te`<span class="${e.class||null}"></span>`;let n=t;return e.href&&(n=Te`<a href="${e.href}"></a>`,t.appendChild(n)),n.textContent=e.name,t}}const ar="dini/templates/headers",lr="https://creativecommons.org/licenses/by/4.0/legalcode",cr=qe({en:{author:"Author:",authors:"Authors:",editor:"Editor:",editors:"Editors:",former_editor:"Former editor:",former_editors:"Former editors:",latest_editors_draft:"Latest editor's draft:",latest_published_version:"Latest published version:",this_version:"This version:"},ko:{author:"저자:",authors:"저자:",editor:"편집자:",editors:"편집자:",former_editor:"이전 편집자:",former_editors:"이전 편집자:",latest_editors_draft:"최신 편집 초안:",latest_published_version:"최신 버전:",this_version:"현재 버전:"},zh:{author:"作者:",authors:"作者:",editor:"编辑:",editors:"编辑:",former_editor:"原编辑:",former_editors:"原编辑:",latest_editors_draft:"最新编辑草稿:",latest_published_version:"最新发布版本:",this_version:"本版本:"},ja:{author:"著者:",authors:"著者:",editor:"編者:",editors:"編者:",former_editor:"以前の版の編者:",former_editors:"以前の版の編者:",latest_editors_draft:"最新の編集用草案:",latest_published_version:"最新バージョン:",this_version:"このバージョン:"},nl:{author:"Auteur:",authors:"Auteurs:",editor:"Redacteur:",editors:"Redacteurs:",latest_editors_draft:"Laatste werkversie:",latest_published_version:"Laatst gepubliceerde versie:",this_version:"Deze versie:"},es:{author:"Autor:",authors:"Autores:",editor:"Editor:",editors:"Editores:",latest_editors_draft:"Borrador de editor mas reciente:",latest_published_version:"Versión publicada mas reciente:",this_version:"Ésta versión:"},de:{author:"Autor/in:",authors:"Autor/innen:",editor:"Redaktion:",editors:"Redaktion:",former_editor:"Frühere Mitwirkende:",former_editors:"Frühere Mitwirkende:",latest_editors_draft:"Letzter Entwurf:",latest_published_version:"Letzte publizierte Fassung:",this_version:"Diese Fassung:"}});var ur=e=>Te`<div class="head"> + ${e.logos.map(nr)} ${document.querySelector("h1#title")} ${function(e){let t=document.querySelector("h2#subtitle");return t&&t.parentElement?(t.remove(),e.subtitle=t.textContent.trim()):e.subtitle&&(t=document.createElement("h2"),t.textContent=e.subtitle,t.id="subtitle"),t&&t.classList.add("subtitle"),t}(e)} <h2> ${e.textStatus} @@ -188,120 +190,120 @@ h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left: > </h2> <dl> - <dt>${e.multipleEditors?sr.editors:sr.editor}</dt> - ${rr(e.editors)} + <dt>${e.multipleEditors?cr.editors:cr.editor}</dt> + ${sr(e.editors)} ${Array.isArray(e.formerEditors)&&e.formerEditors.length>0?Te` <dt> - ${e.multipleFormerEditors?sr.former_editors:sr.former_editor} + ${e.multipleFormerEditors?cr.former_editors:cr.former_editor} </dt> - ${rr(e.formerEditors)} + ${sr(e.formerEditors)} `:""} ${e.authors?Te` - <dt>${e.multipleAuthors?sr.authors:sr.author}</dt> - ${rr(e.authors)} + <dt>${e.multipleAuthors?cr.authors:cr.author}</dt> + ${sr(e.authors)} `:""} - ${e.otherLinks?e.otherLinks.map(Jn):""} + ${e.otherLinks?e.otherLinks.map(er):""} </dl> - ${function(e){const t=document.querySelector(".copyright");if(t)return t.remove(),t;if(e.hasOwnProperty("overrideCopyright")){nt("The `overrideCopyright` configuration option is deprecated.",or,{hint:'Please use `<p class="copyright">` instead.'})}return e.overrideCopyright?[e.overrideCopyright]:Te`<p class="copyright"> + ${function(e){const t=document.querySelector(".copyright");if(t)return t.remove(),t;if(e.hasOwnProperty("overrideCopyright")){nt("The `overrideCopyright` configuration option is deprecated.",ar,{hint:'Please use `<p class="copyright">` instead.'})}return e.overrideCopyright?[e.overrideCopyright]:Te`<p class="copyright"> Dieses Dokument ist lizensiert unter - ${n="Creative Commons Attribution 4.0 International Public License",r=ir,o="subfoot",Te`<a rel="license" href="${r}" class="${o}">${n}</a>`}. + ${n="Creative Commons Attribution 4.0 International Public License",r=lr,o="subfoot",Te`<a rel="license" href="${r}" class="${o}">${n}</a>`}. </p>`;var n,r,o}(e)} <hr /> - </div>`;const lr="dini/headers",cr=new Intl.DateTimeFormat(["de-DE"],{timeZone:"UTC",year:"numeric",month:"long",day:"2-digit"}),ur={unofficial:"Entwurf vom",base:"Spezifikation vom"};var dr=Object.freeze({__proto__:null,name:lr,run:function(e){if(e.isUnofficial="unofficial"===e.specStatus,e.isBasic="base"===e.specStatus,!e.specStatus){tt("Missing required configuration: `specStatus`",lr)}e.title=document.title||"Kein Titel",e.subtitle||(e.subtitle=""),e.publishDate=function(e,t,n=new Date){const r=e[t]?new Date(e[t]):new Date(n);if(Number.isFinite(r.valueOf())){const e=De.format(r);return new Date(e)}return tt(`[\`${t}\`](https://github.com/w3c/respec/wiki/${t}) is not a valid date: "${e[t]}". Expected format 'YYYY-MM-DD'.`,lr),new Date(De.format(new Date))}(e,"publishDate",document.lastModified),e.publishYear=e.publishDate.getUTCFullYear(),e.publishHumanDate=cr.format(e.publishDate);const t=function(e){if(!e.name){tt("All authors and editors must have a name.",lr)}if(e.orcid)try{e.orcid=function(e){const t=new URL(e,"https://orcid.org/");if("https://orcid.org"!==t.origin)throw new Error(`The origin should be "https://orcid.org", not "${t.origin}".`);const n=t.pathname.slice(1).replace(/\/$/,"");if(!/^\d{4}-\d{4}-\d{4}-\d{3}(\d|X)$/.test(n))throw new Error(`ORCIDs have the format "1234-1234-1234-1234", not "${n}"`);const r=n[n.length-1],o=(12-n.split("").slice(0,-1).filter(e=>/\d/.test(e)).map(Number).reduce((e,t)=>2*(e+t),0)%11)%11,i=10===o?"X":String(o);if(r!==i)throw new Error(`"${n}" has an invalid checksum.`);return t.href}(e.orcid)}catch(t){tt(`"${e.orcid}" is not an ORCID. ${t.message}`,lr),delete e.orcid}};if(e.formerEditors||(e.formerEditors=[]),e.editors){e.editors.forEach(t);for(let t=0;t<e.editors.length;t++){const n=e.editors[t];"retiredDate"in n&&(e.formerEditors.push(n),e.editors.splice(t--,1))}}if(!e.editors||0===e.editors.length){tt("At least one editor is required",lr)}e.formerEditors.length&&e.formerEditors.forEach(t),e.authors&&e.authors.forEach(t),e.multipleEditors=e.editors&&e.editors.length>1,e.multipleFormerEditors=e.formerEditors.length>1,e.multipleAuthors=e.authors&&e.authors.length>1,(e.alternateFormats||[]).forEach(e=>{if(!e.uri||!e.label){tt("All alternate formats must have a uri and a label.",lr)}}),e.copyrightStart&&e.copyrightStart==e.publishYear&&(e.copyrightStart=""),e.textStatus=ur[e.specStatus],e.dashDate=De.format(e.publishDate),e.publishISODate=e.publishDate.toISOString();const n=ar(e);document.body.prepend(n),document.body.classList.add("h-entry"),it("amend-user-config",{publishISODate:e.publishISODate,generatedSubtitle:`${e.longStatus} ${e.publishHumanDate}`})}});const fr="dini/abstract",pr=qe({en:{abstract:"Abstract"},ko:{abstract:"요약"},zh:{abstract:"摘要"},ja:{abstract:"要約"},nl:{abstract:"Samenvatting"},es:{abstract:"Resumen"},de:{abstract:"Zusammenfassung"}});var hr=Object.freeze({__proto__:null,name:fr,run:async function(){const e=document.getElementById("abstract");if(!e){return void tt('Document must have one element with `id="abstract"',fr)}e.classList.add("introductory");let t=document.querySelector("#abstract>h2");t||(t=document.createElement("h2"),t.textContent=pr.abstract,e.prepend(t))}});var mr=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=Me(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const gr="core/dfn-abbr";function br(e){const t=(n=e).dataset.abbr?n.dataset.abbr:n.textContent.match(/\b([a-z])/gi).join("").toUpperCase();var n;const r=e.textContent.replace(/\s\s+/g," ").trim();e.insertAdjacentHTML("afterend",` (<abbr title="${r}">${t}</abbr>)`);const o=e.dataset.lt||"";e.dataset.lt=o.split("|").filter(e=>e.trim()).concat(t).join("|")}var wr=Object.freeze({__proto__:null,name:gr,run:function(){const e=document.querySelectorAll("[data-abbr]");for(const t of e){const{localName:e}=t;switch(e){case"dfn":br(t);break;default:tt(`\`data-abbr\` attribute not supported on \`${e}\` elements.`,gr,{elements:[t],title:"Error: unsupported."})}}}});const yr=/^[a-z]+(\s+[a-z]+)+$/,vr=/\B"([^"]*)"\B/,kr=/(\w+)\((.*)\)$/,xr=/^\[\[(\w+)\]\]$/,$r=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,_r=/^(\w+)\["([\w- ]*)"\]$/,Sr=/\.?(\w+\(.*\)$)/;function Er(e){const{identifier:t,renderParent:n}=e;if(n)return Te`<a data-xref-type="_IDL_" data-link-type="idl" + </div>`;const dr="dini/headers",fr=new Intl.DateTimeFormat(["de-DE"],{timeZone:"UTC",year:"numeric",month:"long",day:"2-digit"}),pr={unofficial:"Entwurf vom",base:"Spezifikation vom"};var hr=Object.freeze({__proto__:null,name:dr,run:function(e){if(e.isUnofficial="unofficial"===e.specStatus,e.isBasic="base"===e.specStatus,!e.specStatus){tt("Missing required configuration: `specStatus`",dr)}e.title=document.title||"Kein Titel",e.subtitle||(e.subtitle=""),e.publishDate=function(e,t,n=new Date){const r=e[t]?new Date(e[t]):new Date(n);if(Number.isFinite(r.valueOf())){const e=De.format(r);return new Date(e)}return tt(`[\`${t}\`](https://github.com/w3c/respec/wiki/${t}) is not a valid date: "${e[t]}". Expected format 'YYYY-MM-DD'.`,dr),new Date(De.format(new Date))}(e,"publishDate",document.lastModified),e.publishYear=e.publishDate.getUTCFullYear(),e.publishHumanDate=fr.format(e.publishDate);const t=function(e){if(!e.name){tt("All authors and editors must have a name.",dr)}if(e.orcid)try{e.orcid=function(e){const t=new URL(e,"https://orcid.org/");if("https://orcid.org"!==t.origin)throw new Error(`The origin should be "https://orcid.org", not "${t.origin}".`);const n=t.pathname.slice(1).replace(/\/$/,"");if(!/^\d{4}-\d{4}-\d{4}-\d{3}(\d|X)$/.test(n))throw new Error(`ORCIDs have the format "1234-1234-1234-1234", not "${n}"`);const r=n[n.length-1],o=(12-n.split("").slice(0,-1).filter(e=>/\d/.test(e)).map(Number).reduce((e,t)=>2*(e+t),0)%11)%11,i=10===o?"X":String(o);if(r!==i)throw new Error(`"${n}" has an invalid checksum.`);return t.href}(e.orcid)}catch(t){tt(`"${e.orcid}" is not an ORCID. ${t.message}`,dr),delete e.orcid}};if(e.formerEditors||(e.formerEditors=[]),e.editors){e.editors.forEach(t);for(let t=0;t<e.editors.length;t++){const n=e.editors[t];"retiredDate"in n&&(e.formerEditors.push(n),e.editors.splice(t--,1))}}if(!e.editors||0===e.editors.length){tt("At least one editor is required",dr)}e.formerEditors.length&&e.formerEditors.forEach(t),e.authors&&e.authors.forEach(t),e.multipleEditors=e.editors&&e.editors.length>1,e.multipleFormerEditors=e.formerEditors.length>1,e.multipleAuthors=e.authors&&e.authors.length>1,(e.alternateFormats||[]).forEach(e=>{if(!e.uri||!e.label){tt("All alternate formats must have a uri and a label.",dr)}}),e.copyrightStart&&e.copyrightStart==e.publishYear&&(e.copyrightStart=""),e.textStatus=pr[e.specStatus],e.dashDate=De.format(e.publishDate),e.publishISODate=e.publishDate.toISOString();const n=ur(e);document.body.prepend(n),document.body.classList.add("h-entry"),it("amend-user-config",{publishISODate:e.publishISODate,generatedSubtitle:`${e.longStatus} ${e.publishHumanDate}`})}});const mr="dini/abstract",gr=qe({en:{abstract:"Abstract"},ko:{abstract:"요약"},zh:{abstract:"摘要"},ja:{abstract:"要約"},nl:{abstract:"Samenvatting"},es:{abstract:"Resumen"},de:{abstract:"Zusammenfassung"}});var br=Object.freeze({__proto__:null,name:mr,run:async function(){const e=document.getElementById("abstract");if(!e){return void tt('Document must have one element with `id="abstract"',mr)}e.classList.add("introductory");let t=document.querySelector("#abstract>h2");t||(t=document.createElement("h2"),t.textContent=gr.abstract,e.prepend(t))}});var wr=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=Me(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const yr="core/dfn-abbr";function vr(e){const t=(n=e).dataset.abbr?n.dataset.abbr:n.textContent.match(/\b([a-z])/gi).join("").toUpperCase();var n;const r=e.textContent.replace(/\s\s+/g," ").trim();e.insertAdjacentHTML("afterend",` (<abbr title="${r}">${t}</abbr>)`);const o=e.dataset.lt||"";e.dataset.lt=o.split("|").filter(e=>e.trim()).concat(t).join("|")}var kr=Object.freeze({__proto__:null,name:yr,run:function(){const e=document.querySelectorAll("[data-abbr]");for(const t of e){const{localName:e}=t;switch(e){case"dfn":vr(t);break;default:tt(`\`data-abbr\` attribute not supported on \`${e}\` elements.`,yr,{elements:[t],title:"Error: unsupported."})}}}});const xr=/^[a-z]+(\s+[a-z]+)+$/,$r=/\B"([^"]*)"\B/,_r=/(\w+)\((.*)\)$/,Sr=/^\[\[(\w+)\]\]$/,Er=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,Cr=/^(\w+)\["([\w- ]*)"\]$/,Ar=/\.?(\w+\(.*\)$)/;function Lr(e){const{identifier:t,renderParent:n}=e;if(n)return Te`<a data-xref-type="_IDL_" data-link-type="idl" ><code>${t}</code></a - >`}function Cr(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Te`${n&&r?".":""}<a + >`}function Tr(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Te`${n&&r?".":""}<a data-xref-type="attribute" data-link-for=${o} data-xref-for=${o} data-lt="${`[[${t}]]`}" ><code>[[${t}]]</code></a - >`}function Ar(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Te`${r?".":""}<a + >`}function Nr(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Te`${r?".":""}<a data-link-type="idl" data-xref-type="attribute|dict-member" data-link-for="${o}" data-xref-for="${o}" ><code>${n}</code></a - >`}function Lr(e){const{args:t,identifier:n,type:r,parent:o,renderParent:i}=e,{identifier:s}=o||{},a=Fe(t,e=>Te`<var>${e}</var>`),l=`${n}(${t.join(", ")})`;return Te`${o&&i?".":""}<a + >`}function Rr(e){const{args:t,identifier:n,type:r,parent:o,renderParent:i}=e,{identifier:s}=o||{},a=Fe(t,e=>Te`<var>${e}</var>`),l=`${n}(${t.join(", ")})`;return Te`${o&&i?".":""}<a data-link-type="idl" data-xref-type="${r}" data-link-for="${s}" data-xref-for="${s}" data-lt="${l}" ><code>${n}</code></a - ><code>(${a})</code>`}function Tr(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Te`"<a + ><code>(${a})</code>`}function zr(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Te`"<a data-link-type="idl" data-xref-type="enum-value" data-link-for="${o}" data-xref-for="${o}" data-lt="${n?null:"the-empty-string"}" ><code>${n}</code></a - >"`}function Nr(e){const{identifier:t}=e;return Te`"<a + >"`}function Dr(e){const{identifier:t}=e;return Te`"<a data-link-type="idl" data-cite="WebIDL" data-xref-type="exception" ><code>${t}</code></a - >"`}function Rr(e){const{identifier:t}=e;return Te`<a + >"`}function jr(e){const{identifier:t}=e;return Te`<a data-link-type="idl" data-cite="WebIDL" data-xref-type="interface" ><code>${t}</code></a - >`}function zr(e){let t;try{t=function(e){const[t,n]=e.split(Sr),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),i=[];for(;r.length;){const t=r.pop();if(kr.test(t)){const[,e,n]=t.match(kr),r=n.split(/,\s*/).filter(e=>e);i.push({type:"method",identifier:e,args:r,renderParent:o})}else if(_r.test(t)){const[,e,n]=t.match(_r);i.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(vr.test(t)){const[,e]=t.match(vr);o?i.push({type:"exception",identifier:e}):i.push({type:"enum",enumValue:e,renderParent:o})}else if(xr.test(t)){const[,e]=t.match(xr);i.push({type:"internal-slot",identifier:e,renderParent:o})}else if($r.test(t)&&r.length){const[,e]=t.match($r);i.push({type:"attribute",identifier:e,renderParent:o})}else if(yr.test(t))i.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!$r.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);i.push({type:"base",identifier:t,renderParent:o})}}return i.forEach((e,t,n)=>{e.parent=n[t+1]||null}),i.reverse()}(e)}catch(t){const n=Te`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return tt(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Te(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=Er(e);t&&r.push(t);break}case"attribute":r.push(Ar(e));break;case"internal-slot":r.push(Cr(e));break;case"method":r.push(Lr(e));break;case"enum":r.push(Tr(e));break;case"exception":r.push(Nr(e));break;case"idl-primitive":r.push(Rr(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const Dr=new Set(["alias","reference"]),jr=async function(){return await Le.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const Pr={get ready(){return jr},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!Dr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!Dr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...Dr].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!Dr.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...Dr],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},Or={},Ir=new URL("https://api.specref.org/bibrefs?refs="),qr=je({hint:"dns-prefetch",href:Ir.origin});let Mr;document.head.appendChild(qr);const Fr=new Promise(e=>{Mr=e});async function Br(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(Ir.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await Pr.addAll(o)}catch(e){console.error(e)}return o}async function Wr(e){const t=await Fr;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await Wr(n.aliasOf):n}var Ur=Object.freeze({__proto__:null,biblio:Or,name:"core/biblio",updateFromNetwork:Br,resolveRef:Wr,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=Or;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await Pr.ready;const n=e.map(async e=>({id:e,data:await Pr.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{Or[e.id]=e.data});const i=o.noData.map(e=>e.id);if(i.length){const e=await Br(i,{forceUpdate:!0});Object.assign(Or,e)}Object.assign(Or,this.conf.localBiblio),(()=>{Mr(this.conf.biblio)})()}}});const Hr="core/render-biblio",Zr=qe({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),Vr=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),Yr=(Kr=".",e=>{const t=e.trim();return!t||t.endsWith(Kr)?t:t+Kr});var Kr;function Gr(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(Jr)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),i=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),s=Te`<section> + >`}function Pr(e){let t;try{t=function(e){const[t,n]=e.split(Ar),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),i=[];for(;r.length;){const t=r.pop();if(_r.test(t)){const[,e,n]=t.match(_r),r=n.split(/,\s*/).filter(e=>e);i.push({type:"method",identifier:e,args:r,renderParent:o})}else if(Cr.test(t)){const[,e,n]=t.match(Cr);i.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if($r.test(t)){const[,e]=t.match($r);o?i.push({type:"exception",identifier:e}):i.push({type:"enum",enumValue:e,renderParent:o})}else if(Sr.test(t)){const[,e]=t.match(Sr);i.push({type:"internal-slot",identifier:e,renderParent:o})}else if(Er.test(t)&&r.length){const[,e]=t.match(Er);i.push({type:"attribute",identifier:e,renderParent:o})}else if(xr.test(t))i.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!Er.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);i.push({type:"base",identifier:t,renderParent:o})}}return i.forEach((e,t,n)=>{e.parent=n[t+1]||null}),i.reverse()}(e)}catch(t){const n=Te`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return tt(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Te(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=Lr(e);t&&r.push(t);break}case"attribute":r.push(Nr(e));break;case"internal-slot":r.push(Tr(e));break;case"method":r.push(Rr(e));break;case"enum":r.push(zr(e));break;case"exception":r.push(Dr(e));break;case"idl-primitive":r.push(jr(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const Or=new Set(["alias","reference"]),Ir=async function(){return await Le.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const qr={get ready(){return Ir},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!Or.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!Or.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...Or].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!Or.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...Or],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},Mr={},Fr=new URL("https://api.specref.org/bibrefs?refs="),Br=je({hint:"dns-prefetch",href:Fr.origin});let Wr;document.head.appendChild(Br);const Ur=new Promise(e=>{Wr=e});async function Hr(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(Fr.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await qr.addAll(o)}catch(e){console.error(e)}return o}async function Zr(e){const t=await Ur;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await Zr(n.aliasOf):n}var Vr=Object.freeze({__proto__:null,biblio:Mr,name:"core/biblio",updateFromNetwork:Hr,resolveRef:Zr,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=Mr;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await qr.ready;const n=e.map(async e=>({id:e,data:await qr.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{Mr[e.id]=e.data});const i=o.noData.map(e=>e.id);if(i.length){const e=await Hr(i,{forceUpdate:!0});Object.assign(Mr,e)}Object.assign(Mr,this.conf.localBiblio),(()=>{Wr(this.conf.biblio)})()}}});const Yr="core/render-biblio",Kr=qe({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),Gr=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),Jr=(Xr=".",e=>{const t=e.trim();return!t||t.endsWith(Xr)?t:t+Xr});var Xr;function Qr(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(eo)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),i=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),s=Te`<section> <h3>${t}</h3> - <dl class="bibliography">${i.map(Qr)}</dl> - </section>`;Be(s,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());tt(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,Hr),console.warn("Bad references: ",t)})}(r),s}function Jr(e){let t=Or[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;tt(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,Hr)}else n=t.aliasOf,t=Or[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function Xr(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Te`<cite + <dl class="bibliography">${i.map(no)}</dl> + </section>`;Be(s,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());tt(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,Yr),console.warn("Bad references: ",t)})}(r),s}function eo(e){let t=Mr[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;tt(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,Yr)}else n=t.aliasOf,t=Mr[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function to(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Te`<cite ><a class="bibref" href="${r}" data-link-type="biblio">${t||n}</a></cite - >`;return t?o:Te`[${o}]`}function Qr({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Te` + >`;return t?o:Te`[${o}]`}function no({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Te` <dt id="${n}">[${e}]</dt> - <dd>${{html:eo(t)}}</dd> + <dd>${{html:ro(t)}}</dd> `:Te` <dt id="${n}">[${e}]</dt> <dd><em class="respec-offending-element">Reference not found.</em></dd> - `}function eo(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${Yr(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(Vr.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var to=Object.freeze({__proto__:null,name:Hr,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Te`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Te`<h2>${Zr.references}</h2>`),r.classList.add("appendix"),n.length){const e=Gr(n,Zr.norm_references);r.appendChild(e)}if(t.length){const e=Gr(t,Zr.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:Xr});const no="core/inlines",ro={},oo=qe({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),io=/(?:`[^`]+`)(?!`)/,so=/(?:{{[^}]+}})/,ao=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,lo=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,co=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,uo=/(?:\[=[^=]+=\])/,fo=/(?:\[\^[^^]+\^\])/;function po(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[i,s,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Te`<code + `}function ro(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${Jr(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(Gr.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var oo=Object.freeze({__proto__:null,name:Yr,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Te`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Te`<h2>${Kr.references}</h2>`),r.classList.add("appendix"),n.length){const e=Qr(n,Kr.norm_references);r.appendChild(e)}if(t.length){const e=Qr(t,Kr.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:to});const io="core/inlines",so={},ao=qe({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),lo=/(?:`[^`]+`)(?!`)/,co=/(?:{{[^}]+}})/,uo=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,fo=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,po=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,ho=/(?:\[=[^=]+=\])/,mo=/(?:\[\^[^^]+\^\])/;function go(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[i,s,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Te`<code ><a data-xref-type="${i}" data-xref-for="${s}" >${a}</a ></code - >`}function ho(e){const t=Ie(e),n=Te`<em class="rfc2119">${t}</em>`;return ro[t]=!0,n}function mo(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Te`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Te`<a href="${t}"></a>`;const n=Te`<span>${e}</span>`;return tt(`Wasn't able to expand ${e} as it didn't match any id in the document.`,no,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function go(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):zr(Ie(t))}function bo(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,i]=r.split("|").map(Ie),{type:s,illegal:a}=He(o,t.parentNode),l=Xr(o,i),c=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(c)){const e=l.childNodes[1]||l;nt("Normative references in informative sections are not allowed. ",no,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==s||a?n.normativeReferences.add(c):n.informativeReferences.add(c),l.childNodes[1]?l.childNodes:[l]}function wo(e,t,n){return"ABBR"===t.parentElement.tagName?e:Te`<abbr title="${n.get(e)}">${e}</abbr>`}function yo(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Te`<var data-type="${r}">${n}</var>`}function vo(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,i]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],s=xo(i),a=n?Ie(n):null;return Te`<a + >`}function bo(e){const t=Ie(e),n=Te`<em class="rfc2119">${t}</em>`;return so[t]=!0,n}function wo(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Te`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Te`<a href="${t}"></a>`;const n=Te`<span>${e}</span>`;return tt(`Wasn't able to expand ${e} as it didn't match any id in the document.`,io,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function yo(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):Pr(Ie(t))}function vo(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,i]=r.split("|").map(Ie),{type:s,illegal:a}=He(o,t.parentNode),l=to(o,i),c=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(c)){const e=l.childNodes[1]||l;nt("Normative references in informative sections are not allowed. ",io,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==s||a?n.normativeReferences.add(c):n.informativeReferences.add(c),l.childNodes[1]?l.childNodes:[l]}function ko(e,t,n){return"ABBR"===t.parentElement.tagName?e:Te`<abbr title="${n.get(e)}">${e}</abbr>`}function xo(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Te`<var data-type="${r}">${n}</var>`}function $o(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,i]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],s=So(i),a=n?Ie(n):null;return Te`<a data-link-type="dfn" data-link-for="${a}" data-xref-for="${a}" data-lt="${o}" >${s}</a - >`}function ko(e){const t=e.slice(1,-1);return Te`<code>${t}</code>`}function xo(e){return io.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?ko(e):xo(e)):document.createTextNode(e)}var $o=Object.freeze({__proto__:null,name:no,rfc2119Usage:ro,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new Ke,e.informativeReferences=new Ke,e.respecRFC2119||(e.respecRFC2119=ro);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,i=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),i=[];let s;for(;s=o.nextNode();)i.push(s);return i}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),s=oo.rfc2119Keywords(),a=new RegExp(`(${[s.source,so.source,ao.source,lo.source,co.source,uo.source,io.source,fo.source,...o?[o]:[]].join("|")})`);for(const n of i){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let i=!0;for(const a of r)if(i=!i,i)if(a.startsWith("{{")){const e=go(a);o.append(e)}else if(a.startsWith("[[[")){const e=mo(a);o.append(e)}else if(a.startsWith("[[")){const t=bo(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=yo(a);o.append(e)}else if(a.startsWith("[=")){const e=vo(a);o.append(e)}else if(a.startsWith("`")){const e=ko(a);o.append(e)}else if(a.startsWith("[^")){const e=po(a);o.append(e)}else if(t.has(a)){const e=wo(a,n,t);o.append(e)}else{if(!s.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=ho(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const _o="dini/conformance",So=qe({en:{conformance:"Conformance",normativity:"As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.",keywordInterpretation:(e,t)=>Te`<p> + >`}function _o(e){const t=e.slice(1,-1);return Te`<code>${t}</code>`}function So(e){return lo.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?_o(e):So(e)):document.createTextNode(e)}var Eo=Object.freeze({__proto__:null,name:io,rfc2119Usage:so,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new Ke,e.informativeReferences=new Ke,e.respecRFC2119||(e.respecRFC2119=so);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,i=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),i=[];let s;for(;s=o.nextNode();)i.push(s);return i}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),s=ao.rfc2119Keywords(),a=new RegExp(`(${[s.source,co.source,uo.source,fo.source,po.source,ho.source,lo.source,mo.source,...o?[o]:[]].join("|")})`);for(const n of i){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let i=!0;for(const a of r)if(i=!i,i)if(a.startsWith("{{")){const e=yo(a);o.append(e)}else if(a.startsWith("[[[")){const e=wo(a);o.append(e)}else if(a.startsWith("[[")){const t=vo(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=xo(a);o.append(e)}else if(a.startsWith("[=")){const e=$o(a);o.append(e)}else if(a.startsWith("`")){const e=_o(a);o.append(e)}else if(a.startsWith("[^")){const e=go(a);o.append(e)}else if(t.has(a)){const e=ko(a,n,t);o.append(e)}else{if(!s.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=bo(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const Co="dini/conformance",Ao=qe({en:{conformance:"Conformance",normativity:"As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.",keywordInterpretation:(e,t)=>Te`<p> The key word${t?"s":""} ${e} in this document ${t?"are":"is"} to be interpreted as described in <a href="https://datatracker.ietf.org/doc/html/bcp14">BCP 14</a> - ${Xr("RFC2119")} ${Xr("RFC8174")} + ${to("RFC2119")} ${to("RFC8174")} when, and only when, they appear in all capitals, as shown here. </p>`},de:{conformance:"Anforderungen",normativity:"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument nicht normativ. Alle anderen Angaben sind normativ.",keywordInterpretation:(e,t)=>Te`<p> ${t?"Die Schlüsselwörter":"Das Schlüsselwort"} ${e} in diesem Dokument ${t?"sind":"ist"} gemäß <a href="https://datatracker.ietf.org/doc/html/bcp14">BCP 14</a> - ${Xr("RFC2119")} ${Xr("RFC8174")} + ${to("RFC2119")} ${to("RFC8174")} und unter Berücksichtigung von <a href="https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst" >2119de</a > zu interpretieren, wenn und nur wenn ${t?"sie":"es"} wie hier gezeigt durchgehend groß geschrieben wurde${t?"n":""}. - </p>`}});function Eo(e,t){const n=[...Object.keys(ro)];n.length&&(t.normativeReferences.add("RFC2119"),t.normativeReferences.add("RFC8174"));const r=function(e,t=(e=>e)){const n=e.map(t);switch(n.length){case 0:case 1:return n[0];case 2:return Te`${n[0]}${ze.x_and_y}${n[1]}`;default:{const e=Fe(n.slice(0,-1));return Te`${e}${ze.x_y_and_z}${n[n.length-1]}`}}}(n.sort(),e=>Te`<em class="rfc2119">${e}</em>`),o=n.length>1,i=Te` - <h2>${So.conformance}</h2> - <p>${So.normativity}</p> - ${n.length?So.keywordInterpretation(r,o):null} - `;e.prepend(...i.childNodes)}var Co=Object.freeze({__proto__:null,name:_o,run:function(e){const t=document.querySelector("section#conformance");if(t&&!t.classList.contains("override")&&Eo(t,e),!t&&Object.keys(ro).length){nt("Document uses RFC2119 keywords but lacks a conformance section.",_o,{hint:'Please add a `<section id="conformance">`.'})}}});const Ao=new Qe;function Lo(e,t){for(const n of t)Ao.has(n)||Ao.set(n,new Set),Ao.get(n).add(e)}var To=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=We(e);Lo(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===Ie(e.textContent)||(e.dataset.lt=t.join("|"))})}});var No=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=Ie(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=Ie(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=Ie(n).toLowerCase(),o=Re.isSingular(r)?Re.plural(r):Re.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),Lo(e,n)}})}});var Ro=String.raw`span.example-title{text-transform:none} + </p>`}});function Lo(e,t){const n=[...Object.keys(so)];n.length&&(t.normativeReferences.add("RFC2119"),t.normativeReferences.add("RFC8174"));const r=function(e,t=(e=>e)){const n=e.map(t);switch(n.length){case 0:case 1:return n[0];case 2:return Te`${n[0]}${ze.x_and_y}${n[1]}`;default:{const e=Fe(n.slice(0,-1));return Te`${e}${ze.x_y_and_z}${n[n.length-1]}`}}}(n.sort(),e=>Te`<em class="rfc2119">${e}</em>`),o=n.length>1,i=Te` + <h2>${Ao.conformance}</h2> + <p>${Ao.normativity}</p> + ${n.length?Ao.keywordInterpretation(r,o):null} + `;e.prepend(...i.childNodes)}var To=Object.freeze({__proto__:null,name:Co,run:function(e){const t=document.querySelector("section#conformance");if(t&&!t.classList.contains("override")&&Lo(t,e),!t&&Object.keys(so).length){nt("Document uses RFC2119 keywords but lacks a conformance section.",Co,{hint:'Please add a `<section id="conformance">`.'})}}});const No=new Qe;function Ro(e,t){for(const n of t)No.has(n)||No.set(n,new Set),No.get(n).add(e)}var zo=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=We(e);Ro(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===Ie(e.textContent)||(e.dataset.lt=t.join("|"))})}});var Do=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=Ie(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=Ie(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=Ie(n).toLowerCase(),o=Re.isSingular(r)?Re.plural(r):Re.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),Ro(e,n)}})}});var jo=String.raw`span.example-title{text-transform:none} aside.example,div.example,div.illegal-example{padding:.5em;margin:1em 0;position:relative;clear:both} div.illegal-example{color:red} div.illegal-example p{color:#000} aside.example,div.example{padding:.5em;border-left-width:.5em;border-left-style:solid;border-color:#e0cb52;background:#fcfaee} aside.example div.example{border-left-width:.1em;border-color:#999;background:#fff} aside.example div.example span.example-title{color:#999} -.example pre{background-color:rgba(0,0,0,.03)}`;const zo=qe({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}});function Do(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Te`<span class="example-title">: ${n.title}</span>`:"";return Te`<div class="marker"> - <a class="self-link">${zo.example}<bdi>${r}</bdi></a +.example pre{background-color:rgba(0,0,0,.03)}`;const Po=qe({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}});function Oo(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Te`<span class="example-title">: ${n.title}</span>`:"";return Te`<div class="marker"> + <a class="self-link">${Po.example}<bdi>${r}</bdi></a >${o} - </div>`}var jo=Object.freeze({__proto__:null,name:"core/examples",run:function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;document.head.insertBefore(Te`<style> - ${Ro} - </style>`,document.querySelector("link"));let t=0;e.forEach(e=>{const n=e.classList.contains("illegal-example"),r={number:t,illegal:n},{title:o}=e;if("aside"===e.localName){++t;const n=Do(e,t,r);e.prepend(n),o?Be(e,"example-"+t,o):Be(e,"example",String(t));const{id:i}=e;n.querySelector("a.self-link").href="#"+i,it("example",r)}else{const n=!!e.closest("aside");n||++t,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const i=e.id?e.id:null;i&&e.removeAttribute("id");const s=Do(e,n?0:t,r),a=Te`<div class="example" id="${i}"> + </div>`}var Io=Object.freeze({__proto__:null,name:"core/examples",run:function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;document.head.insertBefore(Te`<style> + ${jo} + </style>`,document.querySelector("link"));let t=0;e.forEach(e=>{const n=e.classList.contains("illegal-example"),r={number:t,illegal:n},{title:o}=e;if("aside"===e.localName){++t;const n=Oo(e,t,r);e.prepend(n),o?Be(e,"example-"+t,o):Be(e,"example",String(t));const{id:i}=e;n.querySelector("a.self-link").href="#"+i,it("example",r)}else{const n=!!e.closest("aside");n||++t,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const i=e.id?e.id:null;i&&e.removeAttribute("id");const s=Oo(e,n?0:t,r),a=Te`<div class="example" id="${i}"> ${s} ${e.cloneNode(!0)} - </div>`;o&&Be(a,"example-"+t,o),Be(a,"example",String(t));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),n||it("example",r)}})}});var Po=String.raw`.issue-label{text-transform:initial} + </div>`;o&&Be(a,"example-"+t,o),Be(a,"example",String(t));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),n||it("example",r)}})}});var qo=String.raw`.issue-label{text-transform:initial} .warning>p:first-child{margin-top:0} .warning{padding:.5em;border-left-width:.5em;border-left-style:solid} span.warning{padding:.1em .5em .15em} @@ -310,38 +312,36 @@ span.warning{padding:.1em .5em .15em} .warning-title:before{content:"⚠";font-size:1.3em;float:left;padding-right:.3em;margin-top:-.3em} li.task-list-item{list-style:none} input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} -.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}`;const Oo="core/issues-notes",Io=qe({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function qo(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:i,displayType:s,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),i=t?"issue":n?"warning":r?"ednote":"note",s=t?o?Io.feature_at_risk:Io.issue:n?Io.warning:r?Io.editors_note:Io.note;return{type:i,displayType:s,isFeatureAtRisk:o}}(e),l="issue"===i,c="span"===e.localName,{number:u}=e.dataset,d={type:i,inline:c,title:e.title,number:r(e)};if(!c){const r=Te`<div class="${a?i+" atrisk":i}" role="${"note"===i?"note":null}"></div>`,c=document.createElement("span"),f=Te`<div role="heading" class="${i+"-title marker"}">${c}</div>`;Be(f,"h",i);let p,h=s;if(e.id?(r.id=e.id,e.removeAttribute("id")):Be(r,"issue-container",d.number?"number-"+d.number:""),l){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Te`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Te`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(c.before(e),e.append(c)),c.classList.add("issue-number"),p=t.get(u),!p){nt(`Failed to fetch issue number ${u}.`,Oo)}p&&!d.title&&(d.title=p.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Te`<span style="text-transform: none">: ${t.title}</span>`:"";return Te`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(Io.issue,d,r.id))}if(c.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=p?p.labels:[];p&&"CLOSED"===p.state&&r.classList.add("closed"),f.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const i=(s=n,parseInt(s,16)>8388607.5?"#000":"#fff");var s;return Te`<a +.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}`;const Mo="core/issues-notes",Fo=qe({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function Bo(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:i,displayType:s,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),i=t?"issue":n?"warning":r?"ednote":"note",s=t?o?Fo.feature_at_risk:Fo.issue:n?Fo.warning:r?Fo.editors_note:Fo.note;return{type:i,displayType:s,isFeatureAtRisk:o}}(e),l="issue"===i,c="span"===e.localName,{number:u}=e.dataset,d={type:i,inline:c,title:e.title,number:r(e)};if(!c){const r=Te`<div class="${a?i+" atrisk":i}" role="${"note"===i?"note":null}"></div>`,c=document.createElement("span"),f=Te`<div role="heading" class="${i+"-title marker"}">${c}</div>`;Be(f,"h",i);let p,h=s;if(e.id?(r.id=e.id,e.removeAttribute("id")):Be(r,"issue-container",d.number?"number-"+d.number:""),l){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Te`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Te`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(c.before(e),e.append(c)),c.classList.add("issue-number"),p=t.get(u),!p){nt(`Failed to fetch issue number ${u}.`,Mo)}p&&!d.title&&(d.title=p.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Te`<span style="text-transform: none">: ${t.title}</span>`:"";return Te`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(Fo.issue,d,r.id))}if(c.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=p?p.labels:[];p&&"CLOSED"===p.state&&r.classList.add("closed"),f.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const i=(s=n,parseInt(s,16)>8388607.5?"#000":"#fff");var s;return Te`<a class="respec-gh-label" style="${`background-color: #${n}; color: ${i}`}" href="${o.href}" >${r}</a >`}(e,n)),o=e.map(e=>e.name),i=Oe(o);r.length&&r.unshift(document.createTextNode(" "));if(o.length){return Te`<span class="issue-label" aria-label="${`This issue is labelled as ${i}.`}" >: ${t}${r}</span - >`}return Te`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(i),m.removeAttribute("data-number"),p&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(p.bodyHTML)),r.append(f,m);const g=Ve(f,"section").length+2;f.setAttribute("aria-level",g)}it(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Te`<p>${Io.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${Io.issue_summary}</h2>`)}(o)}var Mo=Object.freeze({__proto__:null,name:Oo,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return tt(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,Oo),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),{head:r}=document;r.insertBefore(Te`<style> - ${Po} - </style>`,r.querySelector("link")),qo(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const Fo="core/best-practices",Bo={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},Wo=qe(Bo),Uo=i in Bo?i:"en";var Ho=Object.freeze({__proto__:null,name:Fo,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=Be(e,"bp"),o=Te`<a class="marker self-link" href="${"#"+r}" - ><bdi lang="${Uo}">${Wo.best_practice}${t+1}</bdi></a - >`;if(n){const t=Te`<li>${o}: ${Ge(e)}</li>`;n.appendChild(t)}const i=e.closest("div");if(!i)return void e.classList.add("advisement");i.classList.add("advisement");const s=Te`${o.cloneNode(!0)}: ${e}`;i.prepend(...s.childNodes)}),e.length)t&&(t.appendChild(Te`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){nt("Using best practices summary (#bp-summary) but no best practices found.",Fo),t.remove()}}});const Zo="core/figures",Vo=qe({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var Yo=Object.freeze({__proto__:null,name:Zo,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;Be(e,"fig",r),Ze(t,Te`<span class="fig-title"></span>`),t.prepend(Vo.fig,Te`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{Ue(e,"span").removeAttribute("href")}),Te`<li class="tofline"> + >`}return Te`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(i),m.removeAttribute("data-number"),p&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(p.bodyHTML)),r.append(f,m);const g=Ve(f,"section").length+2;f.setAttribute("aria-level",g)}it(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Te`<p>${Fo.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${Fo.issue_summary}</h2>`)}(o)}var Wo=Object.freeze({__proto__:null,name:Mo,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return tt(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,Mo),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),{head:r}=document;r.insertBefore(Te`<style> + ${qo} + </style>`,r.querySelector("link")),Bo(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const Uo="core/best-practices",Ho={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},Zo=qe(Ho),Vo=i in Ho?i:"en";var Yo=Object.freeze({__proto__:null,name:Uo,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=Be(e,"bp"),o=Te`<a class="marker self-link" href="${"#"+r}" + ><bdi lang="${Vo}">${Zo.best_practice}${t+1}</bdi></a + >`;if(n){const t=Te`<li>${o}: ${Ge(e)}</li>`;n.appendChild(t)}const i=e.closest("div");if(!i)return void e.classList.add("advisement");i.classList.add("advisement");const s=Te`${o.cloneNode(!0)}: ${e}`;i.prepend(...s.childNodes)}),e.length)t&&(t.appendChild(Te`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){nt("Using best practices summary (#bp-summary) but no best practices found.",Uo),t.remove()}}});const Ko="core/figures",Go=qe({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var Jo=Object.freeze({__proto__:null,name:Ko,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;Be(e,"fig",r),Ze(t,Te`<span class="fig-title"></span>`),t.prepend(Go.fig,Te`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{Ue(e,"span").removeAttribute("href")}),Te`<li class="tofline"> <a class="tocxref" href="${"#"+e}">${n.childNodes}</a> - </li>`}(t.id,r));else{nt("Found a `<figure>` without a `<figcaption>`.",Zo,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Te`<h2>${Vo.list_of_figures}</h2>`,Te`<ul class="tof"> + </li>`}(t.id,r));else{nt("Found a `<figure>` without a `<figcaption>`.",Ko,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Te`<h2>${Go.list_of_figures}</h2>`,Te`<ul class="tof"> ${e} - </ul>`))}});const Ko="core/data-cite",Go="__SPEC__";async function Jo(e){const{key:t,frag:n,path:r}=e;let o="",i="";if(t===Go)o=document.location.href;else{const e=await Wr(t);if(!e)return null;o=e.href,i=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:i}}function Xo(e,t,n){const{href:r,title:o}=t,i=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?Ze(e,t):(t.textContent=o,e.append(t)),i){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){tt("Exporting an linked external definition is not allowed.",Ko,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,i){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function Qo(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const ei=Qo("#"),ti=Qo("/");function ni(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:i}=r?ni(r):{key:Go,isNormative:!1};return t.cite=i?o:"?"+o,t.citeFrag=n.replace("#",""),ni(e)}const i=r?"#"+r:ei(n),s=o||ti(n).split("#")[0],{type:a}=He(n,e),l="normative"===a,c=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(c)),isNormative:l,frag:i,path:s}}function ri(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var oi=Object.freeze({__proto__:null,name:Ko,THIS_SPEC:Go,toCiteDetails:ni,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(ni).map(async e=>({entry:e,result:await Wr(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await Br(n);r&&Object.assign(Or,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=ni(t),r=await Jo(n);if(r)Xo(t,r,n);else{nt(`Couldn't find a match for "${e}"`,Ko,{elements:[t]})}}st("beforesave",ri)}});const ii="core/link-to-dfn",si=[],ai=qe({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function li(e){const t=new Map,n=[];for(const r of Ao.get(e)){const{dfnFor:o="",dfnType:i="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(i)){const e=t.get(o).get(i),s="dfn"===e.localName,a="dfn"===r.localName,l=i===(e.dataset.dfnType||"dfn"),c=o===(e.dataset.dfnFor||"");if(s&&a&&l&&c){n.push(r);continue}}const s="idl"in r.dataset||"dfn"!==i?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(s,r),Be(r,"dfn",e)}return{result:t,duplicates:n}}function ci(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return We(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function ui(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:i}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==i)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=di(e)&&di(t,n);r&&!o||Ze(e,document.createElement("code"))}(e,t),!r}function di(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function fi(e){e.forEach(e=>{nt(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,ii,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var pi=Object.freeze({__proto__:null,name:ii,possibleExternalLinks:si,run:async function(e){const t=function(){const e=new Qe;for(const t of Ao.keys()){const{result:n,duplicates:r}=li(t);e.set(t,n),r.length>0&&tt(ai.duplicateMsg(t),ii,{title:ai.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=ci(e,t);if(r){ui(e,r,t)||si.push(e)}else""===e.dataset.cite?n.push(e):si.push(e)}fi(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=ni(t);r!==Go&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||fi(si)}});const hi="core/contrib";var mi=Object.freeze({__proto__:null,name:hi,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void tt("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",hi)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Te(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=Oe(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await async function(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,i;if("caches"in window)try{if(o=await caches.open(r.origin),i=await o.match(n),i&&new Date(i.headers.get("Expires"))>new Date)return i}catch(e){console.error("Failed to use Cache API.",e)}const s=await fetch(n);if(!s.ok&&i)return console.warn("Returning a stale cached response for "+r),i;if(o&&s.ok){const e=s.clone(),r=new Headers(s.headers),i=new Date(Date.now()+t);r.set("Expires",i.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return s}(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return tt("Error loading contributors from GitHub.",hi),console.error(e),null}}}(t,n)}});var gi=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{Ue(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const bi=["h2","h3","h4","h5","h6"],wi=["h1",...bi],yi="core/structure",vi=qe({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function ki(e,t,{prefix:n=""}={}){let r=!1,o=0,i=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const s=Te`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=i,r=!0);let e=a.isIntro?"":r?xi(i-o+1):n+i;const l=e.split(".").length;if(1===l&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(i+=1,a.header.prepend(Te`<bdi class="secno">${e} </bdi>`)),l<=t){const n=a.header.id||a.element.id,r=_i(a.header,n),o=ki(a.subsections,t,{prefix:e});o&&r.append(o),s.append(r)}}return s}function xi(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function $i(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!bi.includes(o.localName))continue;const i=o.textContent;Be(e,null,i),r.push({element:e,header:o,title:i,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:$i(e,{tocIntroductory:t})})}return r}function _i(e,t){const n=Te`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=Ue(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{Ue(e,"span").removeAttribute("id")}),Te`<li class="tocline">${n}</li>`}var Si=Object.freeze({__proto__:null,name:yi,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=wi.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(Ve(e,"section").length+1,6);e.localName!==t&&Ue(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){tt("`data-max-toc` must have a value between 0-6 (inclusive).",yi,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=ki($i(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Te`<nav id="toc"></nav>`,n=Te`<h2 class="introductory">${vi.toc}</h2>`;Be(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Te`<p role="navigation" id="back-to-top"> + </ul>`))}});const Xo="core/data-cite",Qo="__SPEC__";async function ei(e){const{key:t,frag:n,path:r}=e;let o="",i="";if(t===Qo)o=document.location.href;else{const e=await Zr(t);if(!e)return null;o=e.href,i=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:i}}function ti(e,t,n){const{href:r,title:o}=t,i=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?Ze(e,t):(t.textContent=o,e.append(t)),i){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){tt("Exporting an linked external definition is not allowed.",Xo,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,i){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function ni(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const ri=ni("#"),oi=ni("/");function ii(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:i}=r?ii(r):{key:Qo,isNormative:!1};return t.cite=i?o:"?"+o,t.citeFrag=n.replace("#",""),ii(e)}const i=r?"#"+r:ri(n),s=o||oi(n).split("#")[0],{type:a}=He(n,e),l="normative"===a,c=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(c)),isNormative:l,frag:i,path:s}}function si(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var ai=Object.freeze({__proto__:null,name:Xo,THIS_SPEC:Qo,toCiteDetails:ii,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(ii).map(async e=>({entry:e,result:await Zr(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await Hr(n);r&&Object.assign(Mr,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=ii(t),r=await ei(n);if(r)ti(t,r,n);else{nt(`Couldn't find a match for "${e}"`,Xo,{elements:[t]})}}st("beforesave",si)}});const li="core/link-to-dfn",ci=[],ui=qe({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function di(e){const t=new Map,n=[];for(const r of No.get(e)){const{dfnFor:o="",dfnType:i="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(i)){const e=t.get(o).get(i),s="dfn"===e.localName,a="dfn"===r.localName,l=i===(e.dataset.dfnType||"dfn"),c=o===(e.dataset.dfnFor||"");if(s&&a&&l&&c){n.push(r);continue}}const s="idl"in r.dataset||"dfn"!==i?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(s,r),Be(r,"dfn",e)}return{result:t,duplicates:n}}function fi(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return We(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function pi(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:i}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==i)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=hi(e)&&hi(t,n);r&&!o||Ze(e,document.createElement("code"))}(e,t),!r}function hi(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function mi(e){e.forEach(e=>{nt(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,li,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var gi=Object.freeze({__proto__:null,name:li,possibleExternalLinks:ci,run:async function(e){const t=function(){const e=new Qe;for(const t of No.keys()){const{result:n,duplicates:r}=di(t);e.set(t,n),r.length>0&&tt(ui.duplicateMsg(t),li,{title:ui.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=fi(e,t);if(r){pi(e,r,t)||ci.push(e)}else""===e.dataset.cite?n.push(e):ci.push(e)}mi(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=ii(t);r!==Qo&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||mi(ci)}});const bi="core/contrib";var wi=Object.freeze({__proto__:null,name:bi,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void tt("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",bi)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Te(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=Oe(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await async function(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,i;if("caches"in window)try{if(o=await caches.open(r.origin),i=await o.match(n),i&&new Date(i.headers.get("Expires"))>new Date)return i}catch(e){console.error("Failed to use Cache API.",e)}const s=await fetch(n);if(!s.ok&&i)return console.warn("Returning a stale cached response for "+r),i;if(o&&s.ok){const e=s.clone(),r=new Headers(s.headers),i=new Date(Date.now()+t);r.set("Expires",i.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return s}(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return tt("Error loading contributors from GitHub.",bi),console.error(e),null}}}(t,n)}});var yi=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{Ue(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const vi=["h2","h3","h4","h5","h6"],ki=["h1",...vi],xi="core/structure",$i=qe({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function _i(e,t,{prefix:n=""}={}){let r=!1,o=0,i=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const s=Te`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=i,r=!0);let e=a.isIntro?"":r?Si(i-o+1):n+i;const l=e.split(".").length;if(1===l&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(i+=1,a.header.prepend(Te`<bdi class="secno">${e} </bdi>`)),l<=t){const n=a.header.id||a.element.id,r=Ci(a.header,n),o=_i(a.subsections,t,{prefix:e});o&&r.append(o),s.append(r)}}return s}function Si(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function Ei(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!vi.includes(o.localName))continue;const i=o.textContent;Be(e,null,i),r.push({element:e,header:o,title:i,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:Ei(e,{tocIntroductory:t})})}return r}function Ci(e,t){const n=Te`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=Ue(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{Ue(e,"span").removeAttribute("id")}),Te`<li class="tocline">${n}</li>`}var Ai=Object.freeze({__proto__:null,name:xi,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=ki.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(Ve(e,"section").length+1,6);e.localName!==t&&Ue(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){tt("`data-max-toc` must have a value between 0-6 (inclusive).",xi,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=_i(Ei(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Te`<nav id="toc"></nav>`,n=Te`<h2 class="introductory">${$i.toc}</h2>`;Be(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Te`<p role="navigation" id="back-to-top"> <a href="#title"><abbr title="Back to Top">↑</abbr></a> - </p>`;document.body.append(o)}(t)}it("toc")}});const Ei=qe({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var Ci=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Te`<p><em>${Ei.informative}</em></p>`)})}});var Ai=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(Be(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Te` + </p>`;document.body.append(o)}(t)}it("toc")}});const Li=qe({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var Ti=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Te`<p><em>${Li.informative}</em></p>`)})}});var Ni=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(Be(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Te` <a href="${"#"+t}" class="self-link" aria-label="§"></a> - `)}}});const Li=new Map([["text/html","html"],["application/xml","xml"]]);function Ti(e,t=document){const n=Li.get(e);if(!n){const t=[...Li.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=function(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;Je(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Pe(r);const o=e.createDocumentFragment(),i=e.querySelector("meta[name='viewport']");i&&t.firstChild!==i&&o.appendChild(i);let s=e.querySelector("meta[charset], meta[content*='charset=']");s||(s=Te`<meta charset="utf-8" />`);o.appendChild(s);const a="ReSpec "+(window.respecVersion||"Developer Channel"),l=Te` - <meta name="generator" content="${a}" /> - `;o.appendChild(l),t.prepend(o),it("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}n("core/exporter",{rsDocToDataURL:Ti});const Ni="ui/save-html",Ri=qe({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),zi=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return Ti(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return Ti(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function Di(e){const{id:t,href:n,fileName:r,title:o,type:i}=e;return Te`<a + `)}}});const Ri="ui/save-html",zi=qe({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),Di=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return ct(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return ct(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function ji(e){const{id:t,href:n,fileName:r,title:o,type:i}=e;return Te`<a href="${n}" id="${t}" download="${r}" type="${i}" class="respec-save-button" - onclick=${()=>Ft.closeModal()} + onclick=${()=>Ut.closeModal()} >${o}</a - >`}const ji={async show(e){await document.respec.ready;const t=Te`<div class="respec-save-buttons"> - ${zi.map(Di)} - </div>`;Ft.freshModal(Ri.save_snapshot,t,e)}},Pi="download"in HTMLAnchorElement.prototype;let Oi;Pi&&(Oi=Ft.addCommand(Ri.save_snapshot,(function(){if(!Pi)return;ji.show(Oi)}),"Ctrl+Shift+Alt+S","💾"));var Ii=Object.freeze({__proto__:null,name:Ni,exportDocument:function(e,t){return nt("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",Ni,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),Ti(t)}});const qi=qe({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const Mi=document.createElement("div"),Fi=Te.bind(Mi),Bi=Ft.addCommand(`${qi.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(Wi).forEach(t=>{e.push(t)});Fi` + >`}const Pi={async show(e){await document.respec.ready;const t=Te`<div class="respec-save-buttons"> + ${Di.map(ji)} + </div>`;Ut.freshModal(zi.save_snapshot,t,e)}},Oi="download"in HTMLAnchorElement.prototype;let Ii;Oi&&(Ii=Ut.addCommand(zi.save_snapshot,(function(){if(!Oi)return;Pi.show(Ii)}),"Ctrl+Shift+Alt+S","💾"));var qi=Object.freeze({__proto__:null,name:Ri,exportDocument:function(e,t){return nt("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",Ri,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),ct(t)}});const Mi=qe({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const Fi=document.createElement("div"),Bi=Te.bind(Fi),Wi=Ut.addCommand(`${Mi.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(Ui).forEach(t=>{e.push(t)});Bi` <p> ReSpec is a document production toolchain, with a notable focus on W3C specifications. </p> @@ -365,12 +365,12 @@ input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} </thead> <tbody>${e}</tbody> </table> -`,Ft.freshModal(`${qi.about_respec} - ${window.respecVersion}`,Mi,Bi)}),"Ctrl+Shift+Alt+A","ℹ️");function Wi({name:e,duration:t}){return Te` +`,Ut.freshModal(`${Mi.about_respec} - ${window.respecVersion}`,Fi,Wi)}),"Ctrl+Shift+Alt+A","ℹ️");function Ui({name:e,duration:t}){return Te` <tr> <td><a href="${`https://github.com/w3c/respec/blob/develop/src/${e}.js`}">${e}</a></td> <td>${t}</td> </tr> - `}var Ui=Object.freeze({__proto__:null});var Hi=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});var Zi=String.raw`.hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa} + `}var Hi=Object.freeze({__proto__:null});var Zi=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});var Vi=String.raw`.hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa} .hljs-comment,.hljs-quote{color:#717277;font-style:italic} .hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4} .hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#ca4706;font-weight:700} @@ -381,9 +381,9 @@ input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} .hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#336ae3} .hljs-emphasis{font-style:italic} .hljs-strong{font-weight:700} -.hljs-link{text-decoration:underline}`;async function Vi(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-dini.js",document.baseURI).href));return await t.text()}const Yi=je({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(Yi);const Ki=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return Ts}))).default}catch{return Vi("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",Ki.then(e=>({worker:e})));const Gi=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight");async function Ji(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Gi(),languages:t},r=await Ki;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(i){const{data:{id:s,language:a,value:l}}=i;s===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:l}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:i}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${i}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=i,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Xi=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Ji);document.head.appendChild(Te`<style> - ${Zi} - </style>`),await Promise.all(n)}});const Qi="core/list-sorter";function es(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function ts(e,t){return[...e.querySelectorAll(":scope > li")].sort(es(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function ns(e,t){return[...e.querySelectorAll(":scope > dt")].sort(es(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:i}=t;for(;i&&i.nextSibling;){o.appendChild(i.cloneNode(!0));const{nodeType:e,nodeName:t}=i.nextSibling;if(e===n&&t===r)break;i=i.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var rs=Object.freeze({__proto__:null,name:Qi,sortListItems:ts,sortDefinitionTerms:ns,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=ns(t,n);break;case"ol":case"ul":e=ts(t,n);break;default:nt(`ReSpec can't sort ${t.localName} elements.`,Qi,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});var os=String.raw`var:hover{text-decoration:underline;cursor:pointer} +.hljs-link{text-decoration:underline}`;async function Yi(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-dini.js",document.baseURI).href));return await t.text()}const Ki=je({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(Ki);const Gi=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return Ns}))).default}catch{return Yi("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",Gi.then(e=>({worker:e})));const Ji=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight");async function Xi(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Ji(),languages:t},r=await Gi;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(i){const{data:{id:s,language:a,value:l}}=i;s===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:l}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:i}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${i}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=i,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Qi=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Xi);document.head.appendChild(Te`<style> + ${Vi} + </style>`),await Promise.all(n)}});const es="core/list-sorter";function ts(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function ns(e,t){return[...e.querySelectorAll(":scope > li")].sort(ts(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function rs(e,t){return[...e.querySelectorAll(":scope > dt")].sort(ts(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:i}=t;for(;i&&i.nextSibling;){o.appendChild(i.cloneNode(!0));const{nodeType:e,nodeName:t}=i.nextSibling;if(e===n&&t===r)break;i=i.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var os=Object.freeze({__proto__:null,name:es,sortListItems:ns,sortDefinitionTerms:rs,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=rs(t,n);break;case"ol":case"ul":e=ns(t,n);break;default:nt(`ReSpec can't sort ${t.localName} elements.`,es,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});var is=String.raw`var:hover{text-decoration:underline;cursor:pointer} var.respec-hl{color:var(--color,#000);background-color:var(--bg-color);box-shadow:0 0 0 2px var(--bg-color)} var.respec-hl-c1{--bg-color:#f4d200} var.respec-hl-c2{--bg-color:#ff87a2} @@ -394,7 +394,7 @@ var.respec-hl-c6{--bg-color:#82ddff} var.respec-hl-c7{--bg-color:#ffbcf2} @media print{ var.respec-hl{background:0 0;color:#000;box-shadow:unset} -}`;function is(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=Ie(e.textContent),n=e.closest("section"),r=as(e),o=[...n.querySelectorAll("var")].filter(e=>Ie(e.textContent)===t&&e.closest("section")===n),i=o[0].classList.contains("respec-hl");if(ss.set(r,i),i)return o.forEach(e=>ls(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=as(t);n.forEach(t=>ls(t,e)),[...ss.keys()].forEach(e=>ss.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const ss=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function as(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===ss.get("respec-hl-c1")?"respec-hl-c1":[...ss.keys()].find(e=>ss.get(e))||"respec-hl-c1"}function ls(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var cs=Object.freeze({__proto__:null,name:"core/highlight-vars",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=os,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",is)),st("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(ls)})}});var us=String.raw`dfn{cursor:pointer} +}`;function ss(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=Ie(e.textContent),n=e.closest("section"),r=ls(e),o=[...n.querySelectorAll("var")].filter(e=>Ie(e.textContent)===t&&e.closest("section")===n),i=o[0].classList.contains("respec-hl");if(as.set(r,i),i)return o.forEach(e=>cs(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=ls(t);n.forEach(t=>cs(t,e)),[...as.keys()].forEach(e=>as.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const as=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function ls(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===as.get("respec-hl-c1")?"respec-hl-c1":[...as.keys()].find(e=>as.get(e))||"respec-hl-c1"}function cs(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var us=Object.freeze({__proto__:null,name:"core/highlight-vars",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=is,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",ss)),st("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(cs)})}});var ds=String.raw`dfn{cursor:pointer} .dfn-panel{position:absolute;z-index:35;min-width:300px;max-width:500px;padding:.5em .75em;margin-top:.6em;font:small Helvetica Neue,sans-serif,Droid Sans Fallback;background:#fff;color:#000;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px} .dfn-panel:not(.docked)>.caret{position:absolute;top:-9px} .dfn-panel:not(.docked)>.caret::after,.dfn-panel:not(.docked)>.caret::before{content:"";position:absolute;border:10px solid transparent;border-top:0;border-bottom:10px solid #fff;top:0} @@ -411,7 +411,7 @@ var.respec-hl{background:0 0;color:#000;box-shadow:unset} .dfn-panel a[href]:hover{border-bottom-width:1px} .dfn-panel ul{padding:0} .dfn-panel li{margin-left:1em} -.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}`;function ds(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Te` +.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}`;function fs(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Te` <aside class="dfn-panel" id="${o}" hidden> <span class="caret"></span> <div> @@ -436,15 +436,15 @@ var.respec-hl{background:0 0;color:#000;box-shadow:unset} ${[...n].map(o)} </ul>`}(t,r)} </aside> - `}var fs=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){document.head.insertBefore(Te`<style> - ${us} - </style>`,document.querySelector("link"));const e=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),t=document.createDocumentFragment();for(const n of e)t.append(ds(n));document.body.append(t);const n=document.createElement("script");n.id="respec-dfn-panel",n.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Ns}))).default}catch{return Vi("./src/core/dfn-panel.runtime.js")}}(),document.body.append(n)}});var ps=String.raw`var{position:relative;cursor:pointer} + `}var ps=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){document.head.insertBefore(Te`<style> + ${ds} + </style>`,document.querySelector("link"));const e=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),t=document.createDocumentFragment();for(const n of e)t.append(fs(n));document.body.append(t);const n=document.createElement("script");n.id="respec-dfn-panel",n.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Rs}))).default}catch{return Yi("./src/core/dfn-panel.runtime.js")}}(),document.body.append(n)}});var hs=String.raw`var{position:relative;cursor:pointer} var[data-type]::after,var[data-type]::before{position:absolute;left:50%;top:-6px;opacity:0;transition:opacity .4s;pointer-events:none} var[data-type]::before{content:"";transform:translateX(-50%);border-width:4px 6px 0 6px;border-style:solid;border-color:transparent;border-top-color:#000} var[data-type]::after{content:attr(data-type);transform:translateX(-50%) translateY(-100%);background:#000;text-align:center;font-family:"Dank Mono","Fira Code",monospace;font-style:normal;padding:6px;border-radius:3px;color:#daca88;text-indent:0;font-weight:400} -var[data-type]:hover::after,var[data-type]:hover::before{opacity:1}`;var hs=Object.freeze({__proto__:null,name:"core/data-type",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=ps,document.head.appendChild(t);let n=null;const r=new Map,o=document.querySelectorAll("section var");for(const e of o){const t=e.closest("section");if(n!==t&&(n=t,r.clear()),e.dataset.type){r.set(e.textContent.trim(),e.dataset.type);continue}const o=r.get(e.textContent.trim());o&&(e.dataset.type=o)}}});var ms=String.raw`.assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}`;var gs=Object.freeze({__proto__:null,name:"core/algorithms",run:function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=ms,document.head.appendChild(e)}}});const bs="core/anchor-expander";function ws(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void tt(`Found matching element "${t}", but it has no title or marker.`,bs,{title:"Missing title.",elements:[n]})}const o=Ge(r);n.append(...o.childNodes),n.classList.add("box-ref")}function ys(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void tt(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,bs,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...Ge(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const i=r.querySelector(".fig-title");!n.hasAttribute("title")&&i&&(n.title=Ie(i.textContent))}function vs(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)ks(r,n),xs(r,n);else{n.textContent=n.getAttribute("href");tt("Found matching section, but the section was lacking a heading element.",bs,{title:`No matching id in document: "${t}".`,elements:[n]})}}function ks(e,t){const n=e.querySelector(".self-link"),r=[...Ge(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=Ue(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function xs(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var $s=Object.freeze({__proto__:null,name:bs,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":ks(n,t);break;case"section":vs(n,e,t);break;case"figure":ys(n,e,t);break;case"aside":case"div":ws(n,e,t);break;default:t.textContent=t.getAttribute("href");tt("ReSpec doesn't support expanding this kind of reference.",bs,{title:`Can't expand "#${e}".`,elements:[t]})}xs(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");tt(`Couldn't expand inline reference. The id "${e}" is not in the document.`,bs,{title:`No matching id in document: ${e}.`,elements:[t]})}}}});const _s=new Promise((e,t)=>{});qe({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});const Ss="rs-changelog",Es=class extends HTMLElement{constructor(){super(),this.props={from:this.getAttribute("from"),to:this.getAttribute("to")||"HEAD",filter:"function"==typeof window[this.getAttribute("filter")]?window[this.getAttribute("filter")]:()=>!0}}connectedCallback(){const{from:e,to:t,filter:n}=this.props;Te.bind(this)` +var[data-type]:hover::after,var[data-type]:hover::before{opacity:1}`;var ms=Object.freeze({__proto__:null,name:"core/data-type",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=hs,document.head.appendChild(t);let n=null;const r=new Map,o=document.querySelectorAll("section var");for(const e of o){const t=e.closest("section");if(n!==t&&(n=t,r.clear()),e.dataset.type){r.set(e.textContent.trim(),e.dataset.type);continue}const o=r.get(e.textContent.trim());o&&(e.dataset.type=o)}}});var gs=String.raw`.assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}`;var bs=Object.freeze({__proto__:null,name:"core/algorithms",run:function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=gs,document.head.appendChild(e)}}});const ws="core/anchor-expander";function ys(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void tt(`Found matching element "${t}", but it has no title or marker.`,ws,{title:"Missing title.",elements:[n]})}const o=Ge(r);n.append(...o.childNodes),n.classList.add("box-ref")}function vs(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void tt(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,ws,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...Ge(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const i=r.querySelector(".fig-title");!n.hasAttribute("title")&&i&&(n.title=Ie(i.textContent))}function ks(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)xs(r,n),$s(r,n);else{n.textContent=n.getAttribute("href");tt("Found matching section, but the section was lacking a heading element.",ws,{title:`No matching id in document: "${t}".`,elements:[n]})}}function xs(e,t){const n=e.querySelector(".self-link"),r=[...Ge(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=Ue(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function $s(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var _s=Object.freeze({__proto__:null,name:ws,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":xs(n,t);break;case"section":ks(n,e,t);break;case"figure":vs(n,e,t);break;case"aside":case"div":ys(n,e,t);break;default:t.textContent=t.getAttribute("href");tt("ReSpec doesn't support expanding this kind of reference.",ws,{title:`Can't expand "#${e}".`,elements:[t]})}$s(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");tt(`Couldn't expand inline reference. The id "${e}" is not in the document.`,ws,{title:`No matching id in document: ${e}.`,elements:[t]})}}}});const Ss=new Promise((e,t)=>{});qe({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});const Es="rs-changelog",Cs=class extends HTMLElement{constructor(){super(),this.props={from:this.getAttribute("from"),to:this.getAttribute("to")||"HEAD",filter:"function"==typeof window[this.getAttribute("filter")]?window[this.getAttribute("filter")]:()=>!0}}connectedCallback(){const{from:e,to:t,filter:n}=this.props;Te.bind(this)` <ul> - ${{any:Cs(e,t,n).then(e=>async function(e){const{repoURL:t}=await _s;return e.map(e=>{const[n,r=null]=e.message.split(/\(#(\d+)\)/,2),o=`${t}commit/${e.hash}`,i=r&&Te` (<a href="${r?`${t}pull/${r}`:null}">#${r}</a>)`;return Te`<li><a href="${o}">${n.trim()}</a>${i}</li>`})}(e)).catch(e=>tt(e.message,Ss,{elements:[this]})).finally(()=>{this.dispatchEvent(new CustomEvent("done"))}),placeholder:"Loading list of commits..."}} + ${{any:As(e,t,n).then(e=>async function(e){const{repoURL:t}=await Ss;return e.map(e=>{const[n,r=null]=e.message.split(/\(#(\d+)\)/,2),o=`${t}commit/${e.hash}`,i=r&&Te` (<a href="${r?`${t}pull/${r}`:null}">#${r}</a>)`;return Te`<li><a href="${o}">${n.trim()}</a>${i}</li>`})}(e)).catch(e=>tt(e.message,Es,{elements:[this]})).finally(()=>{this.dispatchEvent(new CustomEvent("done"))}),placeholder:"Loading list of commits..."}} </ul> - `}};async function Cs(e,t,n){let r;try{const o=await _s;if(!o)throw new Error("`respecConfig.github` is not set");const i=new URL("commits",`${o.apiBase}/${o.fullName}/`);i.searchParams.set("from",e),i.searchParams.set("to",t);const s=await fetch(i.href);if(!s.ok)throw new Error(`Request to ${i} failed with status code ${s.status}`);if(r=await s.json(),!r.length)throw new Error(`No commits between ${e}..${t}.`);r=r.filter(n)}catch(e){const t="Error loading commits from GitHub. "+e.message;throw console.error(e),new Error(t)}return r}const As=[Object.freeze({__proto__:null,name:Ss,element:Es})];var Ls=Object.freeze({__proto__:null,name:"core/custom-elements/index",run:async function(){As.forEach(e=>{customElements.define(e.name,e.element)});const e=As.map(e=>e.name).join(", "),t=[...document.querySelectorAll(e)].map(e=>new Promise(t=>e.addEventListener("done",t,{once:!0})));await Promise.all(t)}}),Ts=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),Ns=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'})}(); + `}};async function As(e,t,n){let r;try{const o=await Ss;if(!o)throw new Error("`respecConfig.github` is not set");const i=new URL("commits",`${o.apiBase}/${o.fullName}/`);i.searchParams.set("from",e),i.searchParams.set("to",t);const s=await fetch(i.href);if(!s.ok)throw new Error(`Request to ${i} failed with status code ${s.status}`);if(r=await s.json(),!r.length)throw new Error(`No commits between ${e}..${t}.`);r=r.filter(n)}catch(e){const t="Error loading commits from GitHub. "+e.message;throw console.error(e),new Error(t)}return r}const Ls=[Object.freeze({__proto__:null,name:Es,element:Cs})];var Ts=Object.freeze({__proto__:null,name:"core/custom-elements/index",run:async function(){Ls.forEach(e=>{customElements.define(e.name,e.element)});const e=Ls.map(e=>e.name).join(", "),t=[...document.querySelectorAll(e)].map(e=>new Promise(t=>e.addEventListener("done",t,{once:!0})));await Promise.all(t)}}),Ns=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),Rs=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'})}(); //# sourceMappingURL=respec-dini.js.map diff --git a/builds/respec-dini.js.map b/builds/respec-dini.js.map index 387056d850..ddc815f9a3 100644 --- a/builds/respec-dini.js.map +++ b/builds/respec-dini.js.map @@ -1 +1 @@ -{"version":3,"file":"respec-dini.js","sources":["../profiles/dini.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/styles/ui.css.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/dini/defaults.js","../src/styles/respec.css.js","../src/core/style.js","../src/dini/style.js","../src/core/data-include.js","../src/core/title.js","../src/core/templates/show-link.js","../src/core/templates/show-logo.js","../src/core/templates/show-people.js","../src/dini/templates/headers.js","../src/dini/headers.js","../src/dini/abstract.js","../src/core/data-transform.js","../src/core/data-abbr.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/dini/conformance.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/styles/examples.css.js","../src/core/examples.js","../src/styles/issues-notes.css.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/core/exporter.js","../src/ui/save-html.js","../src/ui/about-respec.js","../src/core/seo.js","../src/styles/highlight.css.js","../src/core/text-loader.js","../src/core/worker.js","../src/core/highlight.js","../src/core/list-sorter.js","../src/styles/var.css.js","../src/core/highlight-vars.js","../src/styles/dfn-panel.css.js","../src/core/dfn-panel.js","../src/styles/datatype.css.js","../src/core/data-type.js","../src/styles/algorithms.css.js","../src/core/algorithms.js","../src/core/anchor-expander.js","../src/core/github.js","../src/core/custom-elements/rs-changelog.js","../src/core/custom-elements/index.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/dini/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/dini/style.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/title.js\"),\n import(\"../src/dini/headers.js\"),\n import(\"../src/dini/abstract.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/data-abbr.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/dini/conformance.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/data-type.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n import(\"../src/core/custom-elements/index.js\"),\n /* Linter must be the last thing to run */\n import(\"../src/core/linter.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/* global define */\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.respec-modal .close-button {\n position: absolute;\n z-index: inherit;\n padding: 0.2em;\n font-weight: bold;\n cursor: pointer;\n margin-left: 5px;\n border: none;\n background: transparent;\n}\n\n#respec-ui {\n position: fixed;\n display: flex;\n flex-direction: row-reverse;\n top: 20px;\n right: 20px;\n width: 202px;\n text-align: right;\n z-index: 9000;\n}\n\n#respec-pill,\n.respec-info-button {\n background: #fff;\n height: 2.5em;\n color: rgb(120, 120, 120);\n border: 1px solid #ccc;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n}\n\n.respec-info-button {\n border: none;\n opacity: 0.75;\n border-radius: 2em;\n margin-right: 1em;\n min-width: 3.5em;\n}\n\n.respec-info-button:focus,\n.respec-info-button:hover {\n opacity: 1;\n transition: opacity 0.2s;\n}\n\n#respec-pill:disabled {\n font-size: 2.8px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(40, 40, 40, 0.2);\n border-right: 1.1em solid rgba(40, 40, 40, 0.2);\n border-bottom: 1.1em solid rgba(40, 40, 40, 0.2);\n border-left: 1.1em solid #ffffff;\n transform: translateZ(0);\n animation: respec-spin 0.5s infinite linear;\n box-shadow: none;\n}\n\n#respec-pill:disabled,\n#respec-pill:disabled:after {\n border-radius: 50%;\n width: 10em;\n height: 10em;\n}\n\n@keyframes respec-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.respec-hidden {\n visibility: hidden;\n opacity: 0;\n transition: visibility 0s 0.2s, opacity 0.2s linear;\n}\n\n.respec-visible {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.2s linear;\n}\n\n#respec-pill:hover,\n#respec-pill:focus {\n color: rgb(0, 0, 0);\n background-color: rgb(245, 245, 245);\n transition: color 0.2s;\n}\n\n#respec-menu {\n position: absolute;\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n background: #fff;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n width: 200px;\n display: none;\n text-align: left;\n margin-top: 32px;\n font-size: 0.8em;\n}\n\n#respec-menu:not([hidden]) {\n display: block;\n}\n\n#respec-menu li {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n.respec-save-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(47%, 2fr));\n grid-gap: 0.5cm;\n padding: 0.5cm;\n}\n\n.respec-save-button:link {\n padding-top: 16px;\n color: rgb(240, 240, 240);\n background: rgb(42, 90, 168);\n justify-self: stretch;\n height: 1cm;\n text-decoration: none;\n text-align: center;\n font-size: inherit;\n border: none;\n border-radius: 0.2cm;\n}\n\n.respec-save-button:link:hover {\n color: white;\n background: rgb(42, 90, 168);\n padding: 0;\n margin: 0;\n border: 0;\n padding-top: 16px;\n}\n\n.respec-save-button:link:focus {\n background: #193766;\n}\n\n#respec-ui button:focus,\n#respec-pill:focus,\n.respec-option:focus {\n outline: 0;\n outline-style: none;\n}\n\n#respec-pill-error {\n background-color: red;\n color: white;\n}\n\n#respec-pill-warning {\n background-color: orange;\n color: white;\n}\n\n.respec-warning-list,\n.respec-error-list {\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: sans-serif;\n background-color: rgb(255, 251, 230);\n font-size: 0.85em;\n}\n\n.respec-warning-list > li,\n.respec-error-list > li {\n padding: 0.4em 0.7em;\n}\n\n.respec-warning-list > li::before {\n content: \"⚠️\";\n padding-right: 0.5em;\n}\n.respec-warning-list p,\n.respec-error-list p {\n padding: 0;\n margin: 0;\n}\n\n.respec-warning-list li {\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 245, 194);\n}\n\n.respec-error-list,\n.respec-error-list li {\n background-color: rgb(255, 240, 240);\n}\n\n.respec-error-list li::before {\n content: \"💥\";\n padding-right: 0.5em;\n}\n\n.respec-error-list li {\n padding: 0.4em 0.7em;\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 215, 215);\n}\n\n.respec-error-list li > p {\n margin: 0;\n padding: 0;\n display: inline-block;\n}\n\n.respec-error-list li > p:first-child,\n.respec-warning-list li > p:first-child {\n display: inline;\n}\n\n.respec-warning-list > li li,\n.respec-error-list > li li {\n margin: 0;\n list-style: disc;\n}\n\n#respec-overlay {\n display: block;\n position: fixed;\n z-index: 10000;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n background: #000;\n}\n\n.respec-show-overlay {\n transition: opacity 0.2s linear;\n opacity: 0.5;\n}\n\n.respec-hide-overlay {\n transition: opacity 0.2s linear;\n opacity: 0;\n}\n\n.respec-modal {\n display: block;\n position: fixed;\n z-index: 11000;\n margin: auto;\n top: 10%;\n background: #fff;\n border: 5px solid #666;\n min-width: 20%;\n width: 79%;\n padding: 0;\n max-height: 80%;\n overflow-y: auto;\n margin: 0 -0.5cm;\n}\n\n@media screen and (min-width: 78em) {\n .respec-modal {\n width: 62%;\n }\n}\n\n.respec-modal h3 {\n margin: 0;\n padding: 0.2em;\n text-align: center;\n color: black;\n background: linear-gradient(\n to bottom,\n rgba(238, 238, 238, 1) 0%,\n rgba(238, 238, 238, 1) 50%,\n rgba(204, 204, 204, 1) 100%\n );\n font-size: 1em;\n}\n\n.respec-modal .inside div p {\n padding-left: 1cm;\n}\n\n#respec-menu button.respec-option {\n background: white;\n padding: 0 0.2cm;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n padding: 1.2em 1.2em;\n}\n\n#respec-menu button.respec-option:hover,\n#respec-menu button:focus {\n background-color: #eeeeee;\n}\n\n.respec-cmd-icon {\n padding-right: 0.5em;\n}\n\n#respec-ui button.respec-option:last-child {\n border: none;\n border-radius: inherit;\n}\n\n.respec-button-copy-paste {\n position: absolute;\n height: 28px;\n width: 40px;\n cursor: pointer;\n background-image: linear-gradient(#fcfcfc, #eee);\n border: 1px solid rgb(144, 184, 222);\n border-left: 0;\n border-radius: 0px 0px 3px 0;\n -webkit-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n top: 0;\n left: 127px;\n}\n\n@media print {\n #respec-ui {\n display: none;\n }\n}\n\n.respec-iframe {\n width: 100%;\n min-height: 550px;\n height: 100%;\n overflow: hidden;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n.respec-iframe:not(.ready) {\n background: url(\"https://respec.org/xref/loader.gif\") no-repeat center;\n}\n\n.respec-iframe + a[href] {\n font-size: 0.9rem;\n float: right;\n margin: 0 0.5em 0.5em;\n border-bottom-width: 1px;\n}\n`;\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport css from \"../styles/ui.css.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Sets the defaults for DINI specs\n */\nexport const name = \"dini/defaults\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\n\nlinter.register(privsecSectionRule);\n\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n [\n \"cc-by-sa\",\n {\n name:\n \"Creative Commons Attribution-ShareAlike 4.0 International Public License\",\n short: \"CC-BY-SA\",\n url: \"https://creativecommons.org/licenses/by-sa/4.0/legalcode\",\n },\n ],\n]);\n\nconst diniDefaults = {\n format: \"markdown\",\n isED: false,\n isNoTrack: true,\n isPR: false,\n lint: {\n \"privsec-section\": true,\n \"wpt-tests-exist\": false,\n },\n logos: [],\n prependW3C: false,\n doJsonLd: false,\n license: \"cc-by\",\n shortName: \"X\",\n showPreviousVersion: false,\n};\n\nfunction computeProps(conf) {\n return {\n licenseInfo: licenses.get(conf.license),\n };\n}\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...diniDefaults.lint,\n ...conf.lint,\n };\n Object.assign(conf, {\n ...coreDefaults,\n ...diniDefaults,\n ...conf,\n lint,\n });\n\n // computed properties\n Object.assign(conf, computeProps(conf));\n}\n","/* ReSpec specific CSS */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n@keyframes pop {\n 0% {\n transform: scale(1, 1);\n }\n 25% {\n transform: scale(1.25, 1.25);\n opacity: 0.75;\n }\n 100% {\n transform: scale(1, 1);\n }\n}\n\n/* Override code highlighter background */\n.hljs {\n background: transparent !important;\n}\n\n/* --- INLINES --- */\nh1 abbr,\nh2 abbr,\nh3 abbr,\nh4 abbr,\nh5 abbr,\nh6 abbr,\na abbr {\n border: none;\n}\n\ndfn {\n font-weight: bold;\n}\n\na.internalDFN {\n color: inherit;\n border-bottom: 1px solid #99c;\n text-decoration: none;\n}\n\na.externalDFN {\n color: inherit;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\na.bibref {\n text-decoration: none;\n}\n\n.respec-offending-element:target {\n animation: pop 0.25s ease-in-out 0s 1;\n}\n\n.respec-offending-element,\na[href].respec-offending-element {\n text-decoration: red wavy underline;\n}\n@supports not (text-decoration: red wavy underline) {\n .respec-offending-element:not(pre) {\n display: inline-block;\n }\n .respec-offending-element {\n /* Red squiggly line */\n background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=)\n bottom repeat-x;\n }\n}\n\n#references :target {\n background: #eaf3ff;\n animation: pop 0.4s ease-in-out 0s 1;\n}\n\ncite .bibref {\n font-style: normal;\n}\n\ncode {\n color: #c63501;\n}\n\nth code {\n color: inherit;\n}\n\na[href].orcid {\n padding-left: 4px;\n padding-right: 4px;\n}\n\na[href].orcid > svg {\n margin-bottom: -2px;\n}\n\n/* --- TOC --- */\n\n.toc a,\n.tof a {\n text-decoration: none;\n}\n\na .secno,\na .figno {\n color: #000;\n}\n\nul.tof,\nol.tof {\n list-style: none outside none;\n}\n\n.caption {\n margin-top: 0.5em;\n font-style: italic;\n}\n\n/* --- TABLE --- */\n\ntable.simple {\n border-spacing: 0;\n border-collapse: collapse;\n border-bottom: 3px solid #005a9c;\n}\n\n.simple th {\n background: #005a9c;\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th a {\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th[scope=\"row\"] {\n background: inherit;\n color: inherit;\n border-top: 1px solid #ddd;\n}\n\n.simple td {\n padding: 3px 10px;\n border-top: 1px solid #ddd;\n}\n\n.simple tr:nth-child(even) {\n background: #f0f6ff;\n}\n\n/* --- DL --- */\n\n.section dd > p:first-child {\n margin-top: 0;\n}\n\n.section dd > p:last-child {\n margin-bottom: 0;\n}\n\n.section dd {\n margin-bottom: 1em;\n}\n\n.section dl.attrs dd,\n.section dl.eldef dd {\n margin-bottom: 0;\n}\n\n#issue-summary > ul {\n column-count: 2;\n}\n\n#issue-summary li {\n list-style: none;\n display: inline-block;\n}\n\ndetails.respec-tests-details {\n margin-left: 1em;\n display: inline-block;\n vertical-align: top;\n}\n\ndetails.respec-tests-details > * {\n padding-right: 2em;\n}\n\ndetails.respec-tests-details[open] {\n z-index: 999999;\n position: absolute;\n border: thin solid #cad3e2;\n border-radius: 0.3em;\n background-color: white;\n padding-bottom: 0.5em;\n}\n\ndetails.respec-tests-details[open] > summary {\n border-bottom: thin solid #cad3e2;\n padding-left: 1em;\n margin-bottom: 1em;\n line-height: 2em;\n}\n\ndetails.respec-tests-details > ul {\n width: 100%;\n margin-top: -0.3em;\n}\n\ndetails.respec-tests-details > li {\n padding-left: 1em;\n}\n\na[href].self-link:hover {\n opacity: 1;\n text-decoration: none;\n background-color: transparent;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n position: relative;\n}\n\naside.example .marker > a.self-link {\n color: inherit;\n}\n\nh2 > a.self-link,\nh3 > a.self-link,\nh4 > a.self-link,\nh5 > a.self-link,\nh6 > a.self-link {\n border: none;\n color: inherit;\n font-size: 83%;\n height: 2em;\n left: -1.6em;\n opacity: 0.5;\n position: absolute;\n text-align: center;\n text-decoration: none;\n top: 0;\n transition: opacity 0.2s;\n width: 2em;\n}\n\nh2 > a.self-link::before,\nh3 > a.self-link::before,\nh4 > a.self-link::before,\nh5 > a.self-link::before,\nh6 > a.self-link::before {\n content: \"§\";\n display: block;\n}\n\n@media (max-width: 767px) {\n dd {\n margin-left: 0;\n }\n\n /* Don't position self-link in headings off-screen */\n h2 > a.self-link,\n h3 > a.self-link,\n h4 > a.self-link,\n h5 > a.self-link,\n h6 > a.self-link {\n left: auto;\n top: auto;\n }\n}\n\n@media print {\n .removeOnSave {\n display: none;\n }\n}\n`;\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport css from \"../styles/respec.css.js\";\n\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = css;\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport function run(conf) {\n if (conf.noReSpecCSS) {\n styleElement.remove();\n }\n}\n","// @ts-check\n// Module dini/style\n// Inserts a link to the appropriate W3C style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"dini/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n if (location.hash) {\n script.addEventListener(\n \"load\",\n () => {\n window.location.href = location.hash;\n },\n { once: true }\n );\n }\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createBaseStyle() {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = \"https://www.w3.org/StyleSheets/TR/2016/base.css\";\n link.classList.add(\"removeOnSave\");\n return link;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C styles and scripts.\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preload\", // all specs include on base.css.\n href: \"https://www.w3.org/StyleSheets/TR/2016/base.css\",\n as: \"style\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// Opportunistically apply base style\nelements.appendChild(createBaseStyle());\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\nfunction styleMover(linkURL) {\n return exportDoc => {\n const w3cStyle = exportDoc.querySelector(`head link[href=\"${linkURL}\"]`);\n exportDoc.querySelector(\"head\").append(w3cStyle);\n };\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'base'.\";\n conf.specStatus = \"base\";\n showWarning(msg, name);\n }\n\n let styleFile = \"\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"UNOFFICIAL\":\n styleFile = \"W3C-UD\";\n break;\n case \"BASE\":\n styleFile = \"base.css\";\n break;\n }\n\n // Attach W3C fixup script after we are done.\n if (!conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, \"2016\");\n },\n { once: true }\n );\n }\n const finalStyleURL = `https://www.w3.org/StyleSheets/TR/2016/${styleFile}`;\n linkCSS(document, finalStyleURL);\n // Make sure the W3C stylesheet is the last stylesheet, as required by W3C Pub Rules.\n const moveStyle = styleMover(finalStyleURL);\n sub(\"beforesave\", moveStyle);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","/**\n * This module handles the creation of the h1#title of a spec and\n * makes sure the <title> always matches the h1.\n *\n * If no h1#title is included, then the <title> becomes the h1#title.\n *\n * When a h1#title is included, it always takes precedence over the\n * <title> of a spec. An error will be displayed in case of\n * any mismatch.\n *\n */\n\nimport { getIntlData, norm, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/title\";\n\nconst localizationStrings = {\n en: {\n default_title: \"No Title\",\n },\n de: {\n default_title: \"Kein Titel\",\n },\n zh: {\n default_title: \"无标题\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n /** @type {HTMLElement} */\n const h1Elem =\n document.querySelector(\"h1#title\") || html`<h1 id=\"title\"></h1>`;\n\n // check existing element is ok to use\n if (h1Elem.isConnected && h1Elem.textContent.trim() === \"\") {\n const msg =\n \"The document is missing a title, so using a default title. \" +\n \"To fix this, please give your document a `<title>`. \" +\n \"If you need special markup in the document's title, \" +\n 'please use a `<h1 id=\"title\">`.';\n const title = \"Document is missing a title\";\n showError(msg, name, { title, elements: [h1Elem] });\n }\n\n // Decorate the spec title\n if (!h1Elem.id) h1Elem.id = \"title\";\n h1Elem.classList.add(\"title\");\n\n setDocumentTitle(conf, h1Elem);\n\n // This will get relocated by a template later.\n document.body.prepend(h1Elem);\n}\n\nfunction setDocumentTitle(conf, h1Elem) {\n // If the h1 is newly created, it won't be connected. In this case\n // we use the <title> or a localized fallback.\n if (!h1Elem.isConnected) {\n h1Elem.textContent = document.title || `${l10n.default_title}`;\n }\n\n let documentTitle = norm(h1Elem.textContent);\n\n if (conf.isPreview && conf.prNumber) {\n const prUrl = conf.prUrl || `${conf.github.repoURL}pull/${conf.prNumber}`;\n const { childNodes } = html`\n Preview of PR <a href=\"${prUrl}\">#${conf.prNumber}</a>:\n `;\n h1Elem.prepend(...childNodes);\n documentTitle = `Preview of PR #${conf.prNumber}: ${documentTitle}`;\n }\n\n document.title = documentTitle;\n\n // conf.title is deperecated - we are keeping this here just to\n // retain backwards compat as we think the ePub generator\n // relies on it.\n conf.title = documentTitle;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-link\";\n\n/**\n * @param {object} link\n * @param {string} link.key\n * @param {string} [link.class]\n * @param {LinkData[]} [link.data]\n */\nexport default function showLink(link) {\n if (!link.key) {\n const msg =\n \"Found a link without `key` attribute in the configuration. See dev console.\";\n showWarning(msg, name);\n console.warn(msg, link);\n return;\n }\n return html`\n <dt class=\"${link.class ? link.class : null}\">${link.key}</dt>\n ${link.data ? link.data.map(showLinkData) : showLinkData(link)}\n `;\n}\n\n/**\n * @typedef {object} LinkData\n * @property {string} [LinkData.class]\n * @property {string} [LinkData.href]\n * @property {string} [LinkData.value]\n * @param {LinkData} data\n */\nfunction showLinkData(data) {\n return html`<dd class=\"${data.class ? data.class : null}\">\n ${data.href\n ? html`<a href=\"${data.href}\">${data.value || data.href}</a>`\n : data.value}\n </dd>`;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-logo\";\n\n/**\n * @param {object} logo\n * @param {string} logo.src\n * @param {string} logo.url\n * @param {string} logo.alt\n * @param {string} [logo.id]\n * @param {number} [logo.width]\n * @param {number} [logo.height]\n */\nexport default function showLogo(logo) {\n /** @type {HTMLAnchorElement} */\n const a = html`<a href=\"${logo.url || \"\"}\" class=\"logo\"></a>`;\n if (!logo.alt) {\n const msg = \"Found spec logo without an `alt` attribute.\";\n showWarning(msg, name, { elements: [a] });\n }\n /** @type {HTMLImageElement} */\n const img = html`<img\n id=\"${logo.id}\"\n alt=\"${logo.alt}\"\n width=\"${logo.width}\"\n height=\"${logo.height}\"\n />`;\n // avoid triggering 404 requests from dynamically generated\n // hyperHTML attribute values\n img.src = logo.src;\n a.append(img);\n return a;\n}\n","// @ts-check\nimport { humanDate, showError, toShortIsoDate } from \"../../core/utils.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst name = \"core/templates/show-people\";\n\nconst localizationStrings = {\n en: {\n until(date) {\n return html` Until ${date} `;\n },\n },\n es: {\n until(date) {\n return html` Hasta ${date} `;\n },\n },\n ko: {\n until(date) {\n return html` ${date} 이전 `;\n },\n },\n ja: {\n until(date) {\n return html` ${date} 以前 `;\n },\n },\n de: {\n until(date) {\n return html` bis ${date} `;\n },\n },\n zh: {\n until(date) {\n return html` 直到 ${date} `;\n },\n },\n};\n\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nconst orcidIcon = html`<svg\n width=\"16\"\n height=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n>\n <style>\n .st1 {\n fill: #fff;\n }\n </style>\n <path\n d=\"M256 128c0 70.7-57.3 128-128 128S0 198.7 0 128 57.3 0 128 0s128 57.3 128 128z\"\n fill=\"#a6ce39\"\n />\n <path\n class=\"st1\"\n d=\"M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z\"\n />\n</svg>`;\n\n/**\n * @typedef {object} Person\n * @property {string} [Person.name]\n * @property {string} [Person.company]\n * @property {string|number} [Person.w3cid]\n * @property {string} [Person.mailto]\n * @property {string} [Person.url]\n * @property {string} [Person.orcid]\n * @property {string} [Person.company]\n * @property {string} [Person.companyURL]\n * @property {string} [Person.note]\n * @property {string} [Person.retiredDate]\n * @property {PersonExtras} [Person.extras]\n *\n * @typedef {object} PersonExtras\n * @property {string} PersonExtras.name\n * @property {string} [PersonExtras.class]\n * @property {string} [PersonExtras.href]\n *\n * @param {Person[]} persons\n */\nexport default function showPeople(persons = []) {\n const l10n = localizationStrings[lang];\n return persons.map(getItem);\n\n function getItem(p) {\n const personName = [p.name]; // treated as opt-in HTML by hyperHTML\n const company = [p.company];\n const editorid = p.w3cid ? parseInt(p.w3cid, 10) : null;\n /** @type {HTMLElement} */\n const dd = html`<dd\n class=\"p-author h-card vcard\"\n data-editor-id=\"${editorid}\"\n ></dd>`;\n const span = document.createDocumentFragment();\n const contents = [];\n if (p.mailto) {\n contents.push(html`<a\n class=\"ed_mailto u-email email p-name\"\n href=\"${`mailto:${p.mailto}`}\"\n >${personName}</a\n >`);\n } else if (p.url) {\n contents.push(\n html`<a class=\"u-url url p-name fn\" href=\"${p.url}\">${personName}</a>`\n );\n } else {\n contents.push(html`<span class=\"p-name fn\">${personName}</span>`);\n }\n if (p.orcid) {\n contents.push(\n html`<a class=\"p-name orcid\" href=\"${p.orcid}\"\n >${orcidIcon.cloneNode(true)}\n </a>`\n );\n }\n if (p.company) {\n if (p.companyURL) {\n contents.push(\n html`\n (<a class=\"p-org org h-org h-card\" href=\"${p.companyURL}\"\n >${company}</a\n >)\n `\n );\n } else {\n contents.push(html` (${company}) `);\n }\n }\n if (p.note) contents.push(document.createTextNode(` (${p.note})`));\n if (p.extras) {\n const results = p.extras\n // Remove empty names\n .filter(extra => extra.name && extra.name.trim())\n // Convert to HTML\n .map(getExtra);\n for (const result of results) {\n contents.push(document.createTextNode(\", \"), result);\n }\n }\n if (p.retiredDate) {\n const retiredDate = new Date(p.retiredDate);\n const isValidDate = retiredDate.toString() !== \"Invalid Date\";\n const timeElem = document.createElement(\"time\");\n timeElem.textContent = isValidDate\n ? humanDate(retiredDate)\n : \"Invalid Date\"; // todo: Localise invalid date\n if (!isValidDate) {\n const msg = \"The date is invalid. The expected format is YYYY-MM-DD.\";\n const title = \"Invalid date\";\n showError(msg, name, { title, elements: [timeElem] });\n }\n timeElem.dateTime = toShortIsoDate(retiredDate);\n contents.push(html` - ${l10n.until(timeElem)} `);\n }\n\n // @ts-ignore: hyperhtml types only support Element but we use a DocumentFragment here\n html.bind(span)`${contents}`;\n dd.appendChild(span);\n return dd;\n }\n\n function getExtra(extra) {\n const span = html`<span class=\"${extra.class || null}\"></span>`;\n let textContainer = span;\n if (extra.href) {\n textContainer = html`<a href=\"${extra.href}\"></a>`;\n span.appendChild(textContainer);\n }\n textContainer.textContent = extra.name;\n return span;\n }\n}\n","// @ts-check\nimport { getIntlData, showWarning } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nconst name = \"dini/templates/headers\";\n\nconst ccLicense = \"https://creativecommons.org/licenses/by/4.0/legalcode\";\n\nconst localizationStrings = {\n en: {\n author: \"Author:\",\n authors: \"Authors:\",\n editor: \"Editor:\",\n editors: \"Editors:\",\n former_editor: \"Former editor:\",\n former_editors: \"Former editors:\",\n latest_editors_draft: \"Latest editor's draft:\",\n latest_published_version: \"Latest published version:\",\n this_version: \"This version:\",\n },\n ko: {\n author: \"저자:\",\n authors: \"저자:\",\n editor: \"편집자:\",\n editors: \"편집자:\",\n former_editor: \"이전 편집자:\",\n former_editors: \"이전 편집자:\",\n latest_editors_draft: \"최신 편집 초안:\",\n latest_published_version: \"최신 버전:\",\n this_version: \"현재 버전:\",\n },\n zh: {\n author: \"作者:\",\n authors: \"作者:\",\n editor: \"编辑:\",\n editors: \"编辑:\",\n former_editor: \"原编辑:\",\n former_editors: \"原编辑:\",\n latest_editors_draft: \"最新编辑草稿:\",\n latest_published_version: \"最新发布版本:\",\n this_version: \"本版本:\",\n },\n ja: {\n author: \"著者:\",\n authors: \"著者:\",\n editor: \"編者:\",\n editors: \"編者:\",\n former_editor: \"以前の版の編者:\",\n former_editors: \"以前の版の編者:\",\n latest_editors_draft: \"最新の編集用草案:\",\n latest_published_version: \"最新バージョン:\",\n this_version: \"このバージョン:\",\n },\n nl: {\n author: \"Auteur:\",\n authors: \"Auteurs:\",\n editor: \"Redacteur:\",\n editors: \"Redacteurs:\",\n latest_editors_draft: \"Laatste werkversie:\",\n latest_published_version: \"Laatst gepubliceerde versie:\",\n this_version: \"Deze versie:\",\n },\n es: {\n author: \"Autor:\",\n authors: \"Autores:\",\n editor: \"Editor:\",\n editors: \"Editores:\",\n latest_editors_draft: \"Borrador de editor mas reciente:\",\n latest_published_version: \"Versión publicada mas reciente:\",\n this_version: \"Ésta versión:\",\n },\n de: {\n author: \"Autor/in:\",\n authors: \"Autor/innen:\",\n editor: \"Redaktion:\",\n editors: \"Redaktion:\",\n former_editor: \"Frühere Mitwirkende:\",\n former_editors: \"Frühere Mitwirkende:\",\n latest_editors_draft: \"Letzter Entwurf:\",\n latest_published_version: \"Letzte publizierte Fassung:\",\n this_version: \"Diese Fassung:\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nfunction getSpecSubTitleElem(conf) {\n let specSubTitleElem = document.querySelector(\"h2#subtitle\");\n\n if (specSubTitleElem && specSubTitleElem.parentElement) {\n specSubTitleElem.remove();\n conf.subtitle = specSubTitleElem.textContent.trim();\n } else if (conf.subtitle) {\n specSubTitleElem = document.createElement(\"h2\");\n specSubTitleElem.textContent = conf.subtitle;\n specSubTitleElem.id = \"subtitle\";\n }\n if (specSubTitleElem) {\n specSubTitleElem.classList.add(\"subtitle\");\n }\n return specSubTitleElem;\n}\n\nexport default conf => {\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${document.querySelector(\"h1#title\")}\n ${getSpecSubTitleElem(conf)}\n <h2>\n ${conf.textStatus}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >\n </h2>\n <dl>\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${renderCopyright(conf)}\n <hr />\n </div>`;\n};\n\n/**\n * @param {string} text\n * @param {string} url\n * @param {string=} cssClass\n */\nfunction linkLicense(text, url, cssClass) {\n return html`<a rel=\"license\" href=\"${url}\" class=\"${cssClass}\">${text}</a>`;\n}\n\nfunction renderCopyright(conf) {\n // If there is already a copyright, let's relocate it.\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n return existingCopyright;\n }\n if (conf.hasOwnProperty(\"overrideCopyright\")) {\n const msg = \"The `overrideCopyright` configuration option is deprecated.\";\n const hint = 'Please use `<p class=\"copyright\">` instead.';\n showWarning(msg, name, { hint });\n }\n return conf.overrideCopyright\n ? [conf.overrideCopyright]\n : html`<p class=\"copyright\">\n Dieses Dokument ist lizensiert unter\n ${linkLicense(\n \"Creative Commons Attribution 4.0 International Public License\",\n ccLicense,\n \"subfoot\"\n )}.\n </p>`;\n}\n","// @ts-check\n// Module dini/headers\n// Generate the headers material based on the provided configuration.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n// - editors: an array of people editing the document (at least one is required). People\n// are defined using:\n// - name: the person's name (required)\n// - url: URI for the person's home page\n// - company: the person's company\n// - companyURL: the URI for the person's company\n// - mailto: the person's email\n// - note: a note on the person (e.g. former editor)\n// - authors: an array of people who are contributing authors of the document.\n// - formerEditors: an array of people that had earlier edited the document but no longer edit.\n// - subtitle: a subtitle for the specification\n// - publishDate: the date to use for the publication, default to document.lastModified, and\n// failing that to now. The format is YYYY-MM-DD or a Date object.\n// - alternateFormats: a list of alternate formats for the document, each of which being\n// defined by:\n// - uri: the URI to the alternate\n// - label: a label for the alternate\n// - lang: optional language\n// - type: optional MIME type\n// - logos: a list of logos to use instead of the W3C logo, each of which being defined by:\n// - src: the URI to the logo (target of <img src=>)\n// - alt: alternate text for the image (<img alt=>), defaults to \"Logo\" or \"Logo 1\", \"Logo 2\", ...\n// if src is not specified, this is the text of the \"logo\"\n// - height: optional height of the logo (<img height=>)\n// - width: optional width of the logo (<img width=>)\n// - url: the URI to the organization represented by the logo (target of <a href=>)\n// - id: optional id for the logo, permits custom CSS (wraps logo in <span id=>)\n// - each logo element must specify either src or alt\n// - otherLinks: an array of other links that you might want in the header (e.g., link github, twitter, etc).\n// Example of usage: [{key: \"foo\", href:\"https://b\"}, {key: \"bar\", href:\"https://\"}].\n// Allowed values are:\n// - key: the key for the <dt> (e.g., \"Bug Tracker\"). Required.\n// - value: The value that will appear in the <dd> (e.g., \"GitHub\"). Optional.\n// - href: a URL for the value (e.g., \"https://foo.com/issues\"). Optional.\n// - class: a string representing CSS classes. Optional.\n// - license: can be one of the following\n// - \"cc-by-sa\"\n// - \"cc-by\"\n// - \"cc0\"\nimport { ISODate, showError } from \"../core/utils.js\";\nimport headersTmpl from \"./templates/headers.js\";\nimport { pub } from \"../core/pubsubhub.js\";\n\nexport const name = \"dini/headers\";\n\nconst DINIDate = new Intl.DateTimeFormat([\"de-DE\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n});\n\nconst status2text = {\n unofficial: \"Entwurf vom\",\n base: \"Spezifikation vom\",\n};\n\n/**\n * @param {*} conf\n * @param {string} prop\n * @param {string | number | Date} fallbackDate\n */\nfunction validateDateAndRecover(conf, prop, fallbackDate = new Date()) {\n const date = conf[prop] ? new Date(conf[prop]) : new Date(fallbackDate);\n // if date is valid\n if (Number.isFinite(date.valueOf())) {\n const formattedDate = ISODate.format(date);\n return new Date(formattedDate);\n }\n const msg =\n `[\\`${prop}\\`](https://github.com/w3c/respec/wiki/${prop}) ` +\n `is not a valid date: \"${conf[prop]}\". Expected format 'YYYY-MM-DD'.`;\n showError(msg, name);\n return new Date(ISODate.format(new Date()));\n}\n\nexport function run(conf) {\n conf.isUnofficial = conf.specStatus === \"unofficial\";\n conf.isBasic = conf.specStatus === \"base\";\n if (!conf.specStatus) {\n const msg = \"Missing required configuration: `specStatus`\";\n showError(msg, name);\n }\n conf.title = document.title || \"Kein Titel\";\n if (!conf.subtitle) conf.subtitle = \"\";\n conf.publishDate = validateDateAndRecover(\n conf,\n \"publishDate\",\n document.lastModified\n );\n conf.publishYear = conf.publishDate.getUTCFullYear();\n conf.publishHumanDate = DINIDate.format(conf.publishDate);\n const peopCheck = function (it) {\n if (!it.name) {\n const msg = \"All authors and editors must have a name.\";\n showError(msg, name);\n }\n if (it.orcid) {\n try {\n it.orcid = normalizeOrcid(it.orcid);\n } catch (e) {\n const msg = `\"${it.orcid}\" is not an ORCID. ${e.message}`;\n showError(msg, name);\n // A failed orcid link could link to something outside of orcid,\n // which would be misleading.\n delete it.orcid;\n }\n }\n };\n if (!conf.formerEditors) conf.formerEditors = [];\n if (conf.editors) {\n conf.editors.forEach(peopCheck);\n // Move any editors with retiredDate to formerEditors.\n for (let i = 0; i < conf.editors.length; i++) {\n const editor = conf.editors[i];\n if (\"retiredDate\" in editor) {\n conf.formerEditors.push(editor);\n conf.editors.splice(i--, 1);\n }\n }\n }\n if (!conf.editors || conf.editors.length === 0) {\n const msg = \"At least one editor is required\";\n showError(msg, name);\n }\n if (conf.formerEditors.length) {\n conf.formerEditors.forEach(peopCheck);\n }\n if (conf.authors) {\n conf.authors.forEach(peopCheck);\n }\n conf.multipleEditors = conf.editors && conf.editors.length > 1;\n conf.multipleFormerEditors = conf.formerEditors.length > 1;\n conf.multipleAuthors = conf.authors && conf.authors.length > 1;\n (conf.alternateFormats || []).forEach(it => {\n if (!it.uri || !it.label) {\n const msg = \"All alternate formats must have a uri and a label.\";\n showError(msg, name);\n }\n });\n if (conf.copyrightStart && conf.copyrightStart == conf.publishYear)\n conf.copyrightStart = \"\";\n conf.textStatus = status2text[conf.specStatus];\n conf.dashDate = ISODate.format(conf.publishDate);\n conf.publishISODate = conf.publishDate.toISOString();\n // configuration done - yay!\n\n // insert into document\n const header = headersTmpl(conf);\n document.body.prepend(header);\n document.body.classList.add(\"h-entry\");\n\n // Requested by https://github.com/w3c/respec/issues/504\n // Makes a record of a few auto-generated things.\n pub(\"amend-user-config\", {\n publishISODate: conf.publishISODate,\n generatedSubtitle: `${conf.longStatus} ${conf.publishHumanDate}`,\n });\n}\n\n/**\n * @param {string} orcid Either an ORCID URL or just the 16-digit ID which comes after the /\n * @return {string} the full ORCID URL. Throws an error if the ID is invalid.\n */\nfunction normalizeOrcid(orcid) {\n const orcidUrl = new URL(orcid, \"https://orcid.org/\");\n if (orcidUrl.origin !== \"https://orcid.org\") {\n throw new Error(\n `The origin should be \"https://orcid.org\", not \"${orcidUrl.origin}\".`\n );\n }\n\n // trailing slash would mess up checksum\n const orcidId = orcidUrl.pathname.slice(1).replace(/\\/$/, \"\");\n if (!/^\\d{4}-\\d{4}-\\d{4}-\\d{3}(\\d|X)$/.test(orcidId)) {\n throw new Error(\n `ORCIDs have the format \"1234-1234-1234-1234\", not \"${orcidId}\"`\n );\n }\n\n // calculate checksum as per https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier\n const lastDigit = orcidId[orcidId.length - 1];\n const remainder = orcidId\n .split(\"\")\n .slice(0, -1)\n .filter(c => /\\d/.test(c))\n .map(Number)\n .reduce((acc, c) => (acc + c) * 2, 0);\n const lastDigitInt = (12 - (remainder % 11)) % 11;\n const lastDigitShould = lastDigitInt === 10 ? \"X\" : String(lastDigitInt);\n if (lastDigit !== lastDigitShould) {\n throw new Error(`\"${orcidId}\" has an invalid checksum.`);\n }\n\n return orcidUrl.href;\n}\n","// @ts-check\n// Module dini/abstract\n// Handle the abstract section properly.\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"dini/abstract\";\n\nconst localizationStrings = {\n en: {\n abstract: \"Abstract\",\n },\n ko: {\n abstract: \"요약\",\n },\n zh: {\n abstract: \"摘要\",\n },\n ja: {\n abstract: \"要約\",\n },\n nl: {\n abstract: \"Samenvatting\",\n },\n es: {\n abstract: \"Resumen\",\n },\n de: {\n abstract: \"Zusammenfassung\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run() {\n const abs = document.getElementById(\"abstract\");\n if (!abs) {\n const msg = `Document must have one element with \\`id=\"abstract\"`;\n showError(msg, name);\n return;\n }\n abs.classList.add(\"introductory\");\n let abstractHeading = document.querySelector(\"#abstract>h2\");\n if (abstractHeading) {\n return;\n }\n abstractHeading = document.createElement(\"h2\");\n abstractHeading.textContent = l10n.abstract;\n abs.prepend(abstractHeading);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Module core/data-abbr\n// - Finds all elements with data-abbr attribute and processes them.\nimport { showError } from \"./utils.js\";\nexport const name = \"core/dfn-abbr\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = document.querySelectorAll(\"[data-abbr]\");\n for (const elem of elements) {\n const { localName } = elem;\n switch (localName) {\n case \"dfn\":\n processDfnElement(elem);\n break;\n default: {\n const msg = `\\`data-abbr\\` attribute not supported on \\`${localName}\\` elements.`;\n showError(msg, name, {\n elements: [elem],\n title: \"Error: unsupported.\",\n });\n }\n }\n }\n}\n/**\n * @param {HTMLElement} dfn\n */\nfunction processDfnElement(dfn) {\n const abbr = generateAbbreviation(dfn);\n // get normalized <dfn> textContent to remove spaces, tabs, new lines.\n const fullForm = dfn.textContent.replace(/\\s\\s+/g, \" \").trim();\n dfn.insertAdjacentHTML(\n \"afterend\",\n ` (<abbr title=\"${fullForm}\">${abbr}</abbr>)`\n );\n const lt = dfn.dataset.lt || \"\";\n dfn.dataset.lt = lt\n .split(\"|\")\n .filter(i => i.trim())\n .concat(abbr)\n .join(\"|\");\n}\n\nfunction generateAbbreviation(elem) {\n if (elem.dataset.abbr) return elem.dataset.abbr;\n // Generates abbreviation from textContent\n // e.g., \"Permanent Account Number\" -> \"PAN\"\n return elem.textContent\n .match(/\\b([a-z])/gi)\n .join(\"\")\n .toUpperCase();\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://api.specref.org/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\n/** @param {BiblioData|string} ref */\nfunction stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\n// Module dini/conformance\n// Handle the conformance section properly.\nimport { getIntlData, htmlJoinAnd, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { renderInlineCitation } from \"../core/render-biblio.js\";\nimport { rfc2119Usage } from \"../core/inlines.js\";\nexport const name = \"dini/conformance\";\n\nconst localizationStrings = {\n en: {\n conformance: \"Conformance\",\n normativity:\n \"As well as sections marked as non-normative, all authoring guidelines, \" +\n \"diagrams, examples, and notes in this specification are non-normative. \" +\n \"Everything else in this specification is normative.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n The key word${plural ? \"s\" : \"\"} ${keywords} in this document\n ${plural ? \"are\" : \"is\"} to be interpreted as described in\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n when, and only when, they appear in all capitals, as shown here.\n </p>`;\n },\n },\n de: {\n conformance: \"Anforderungen\",\n normativity:\n \"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten \" +\n \"sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument \" +\n \"nicht normativ. Alle anderen Angaben sind normativ.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n ${plural ? \"Die Schlüsselwörter\" : \"Das Schlüsselwort\"} ${keywords} in\n diesem Dokument ${plural ? \"sind\" : \"ist\"} gemäß\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n und unter Berücksichtigung von\n <a href=\"https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst\"\n >2119de</a\n >\n zu interpretieren, wenn und nur wenn ${plural ? \"sie\" : \"es\"} wie hier\n gezeigt durchgehend groß geschrieben wurde${plural ? \"n\" : \"\"}.\n </p>`;\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {Element} conformance\n * @param {*} conf\n */\nfunction processConformance(conformance, conf) {\n const terms = [...Object.keys(rfc2119Usage)];\n // Add RFC2119 to bibliography\n if (terms.length) {\n conf.normativeReferences.add(\"RFC2119\");\n conf.normativeReferences.add(\"RFC8174\");\n }\n // Put in the 2119 clause and reference\n const keywords = htmlJoinAnd(\n terms.sort(),\n item => html`<em class=\"rfc2119\">${item}</em>`\n );\n const plural = terms.length > 1;\n const content = html`\n <h2>${l10n.conformance}</h2>\n <p>${l10n.normativity}</p>\n ${terms.length ? l10n.keywordInterpretation(keywords, plural) : null}\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run(conf) {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance && !conformance.classList.contains(\"override\")) {\n processConformance(conformance, conf);\n }\n // Warn when there are RFC2119/RFC8174 keywords, but not conformance section\n if (!conformance && Object.keys(rfc2119Usage).length) {\n const msg = `Document uses RFC2119 keywords but lacks a conformance section.`;\n const hint = 'Please add a `<section id=\"conformance\">`.';\n showWarning(msg, name, { hint });\n }\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","/* --- EXAMPLES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nspan.example-title {\n text-transform: none;\n}\n\naside.example,\ndiv.example,\ndiv.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\n\ndiv.illegal-example {\n color: red;\n}\n\ndiv.illegal-example p {\n color: black;\n}\n\naside.example,\ndiv.example {\n padding: 0.5em;\n border-left-width: 0.5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: 0.1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example span.example-title {\n color: #999;\n}\n\n.example pre {\n background-color: rgba(0, 0, 0, 0.03);\n}\n`;\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport css from \"../styles/examples.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","/* --- ISSUES/NOTES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.issue-label {\n text-transform: initial;\n}\n\n.warning > p:first-child { margin-top: 0 }\n.warning {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n}\nspan.warning { padding: .1em .5em .15em; }\n\n.issue.closed span.issue-number {\n text-decoration: line-through;\n}\n\n.warning {\n border-color: #f11;\n border-width: .2em;\n border-style: solid;\n background: #fbe9e9;\n}\n\n.warning-title:before{\n content: \"⚠\"; /*U+26A0 WARNING SIGN*/\n font-size: 1.3em;\n float: left;\n padding-right: .3em;\n margin-top: -0.3em;\n}\n\nli.task-list-item {\n list-style: none;\n}\n\ninput.task-list-item-checkbox {\n margin: 0 0.35em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.issue a.respec-gh-label {\n padding: 5px;\n margin: 0 2px 0 2px;\n font-size: 10px;\n text-transform: none;\n text-decoration: none;\n font-weight: bold;\n border-radius: 4px;\n position: relative;\n bottom: 2px;\n border: none;\n display: inline-block;\n}\n`;\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport css from \"../styles/issues-notes.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nfunction serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","/*\nAdapted from Atom One Light by Daniel Gamage for ReSpec, with better color contrast\nOriginal One Light Syntax theme from https://github.com/atom/one-light-syntax\nbase: #fafafa\nmono-1: #383a42\nmono-2: #686b77\nmono-3: #a0a1a7\nhue-1: #0184bb\nhue-2: #4078f2\nhue-3: #a626a4\nhue-4: #50a14f\nhue-5: #e45649\nhue-5-2: #c91243\nhue-6: #986801\nhue-6-2: #c18401\n*/\n\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n color: #383a42;\n background: #fafafa;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #717277;\n font-style: italic;\n}\n\n.hljs-doctag,\n.hljs-keyword,\n.hljs-formula {\n color: #a626a4;\n}\n\n.hljs-section,\n.hljs-name,\n.hljs-selector-tag,\n.hljs-deletion,\n.hljs-subst {\n color: #ca4706;\n font-weight: bold;\n}\n\n.hljs-literal {\n color: #0b76c5;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta-string {\n color: #42803C;\n}\n\n.hljs-built_in,\n.hljs-class .hljs-title {\n color: #9a6a01;\n}\n\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-type,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-number {\n color: #986801;\n}\n\n.hljs-symbol,\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-title {\n color: #336ae3;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n.hljs-link {\n text-decoration: underline;\n}\n`;\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport css from \"../styles/highlight.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n document.head.appendChild(\n html`<style>\n ${css}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\nvar.respec-hl {\n color: var(--color, #000);\n background-color: var(--bg-color);\n box-shadow: 0 0 0px 2px var(--bg-color);\n}\n\n/* highlight colors\n https://github.com/w3c/tr-design/issues/152\n*/\nvar.respec-hl-c1 {\n --bg-color: #f4d200;\n}\n\nvar.respec-hl-c2 {\n --bg-color: #ff87a2;\n}\n\nvar.respec-hl-c3 {\n --bg-color: #96e885;\n}\n\nvar.respec-hl-c4 {\n --bg-color: #3eeed2;\n}\n\nvar.respec-hl-c5 {\n --bg-color: #eacfb6;\n}\n\nvar.respec-hl-c6 {\n --bg-color: #82ddff;\n}\n\nvar.respec-hl-c7 {\n --bg-color: #ffbcf2;\n}\n\n@media print {\n var.respec-hl {\n background: none;\n color: #000;\n box-shadow: unset;\n }\n}\n`;\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport css from \"../styles/var.css.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","/* dfn popup panel that list all local references to a dfn */\n/**\n * TODO: Revert changes due to https://github.com/w3c/respec/pull/2888 when\n * https://github.com/w3c/css-validator/pull/111 is fixed.\n */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\ndfn {\n cursor: pointer;\n}\n\n.dfn-panel {\n position: absolute;\n z-index: 35;\n min-width: 300px;\n max-width: 500px;\n padding: 0.5em 0.75em;\n margin-top: 0.6em;\n font: small Helvetica Neue, sans-serif, Droid Sans Fallback;\n background: #fff;\n color: black;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n}\n/* Triangle/caret */\n.dfn-panel:not(.docked) > .caret {\n position: absolute;\n top: -9px;\n}\n.dfn-panel:not(.docked) > .caret::before,\n.dfn-panel:not(.docked) > .caret::after {\n content: \"\";\n position: absolute;\n border: 10px solid transparent;\n border-top: 0;\n border-bottom: 10px solid #fff;\n top: 0;\n}\n.dfn-panel:not(.docked) > .caret::before {\n border-bottom: 9px solid #a2a9b1;\n}\n\n.dfn-panel * {\n margin: 0;\n}\n\n.dfn-panel b {\n display: block;\n color: #000;\n margin-top: 0.25em;\n}\n\n.dfn-panel ul a[href] {\n color: #333;\n}\n\n.dfn-panel > div {\n display: flex;\n}\n\n.dfn-panel a.self-link {\n font-weight: bold;\n margin-right: auto;\n}\n\n.dfn-panel .marker {\n padding: 0.1em;\n margin-left: 0.5em;\n border-radius: 0.2em;\n text-align: center;\n white-space: nowrap;\n font-size: 90%;\n color: #040b1c;\n}\n\n.dfn-panel .marker.dfn-exported {\n background: #d1edfd;\n box-shadow: 0 0 0 0.125em #1ca5f940;\n}\n.dfn-panel .marker.idl-block {\n background: #8ccbf2;\n box-shadow: 0 0 0 0.125em #0670b161;\n}\n\n.dfn-panel a:not(:hover) {\n text-decoration: none !important;\n border-bottom: none !important;\n}\n\n.dfn-panel a[href]:hover {\n border-bottom-width: 1px;\n}\n\n.dfn-panel ul {\n padding: 0;\n}\n\n.dfn-panel li {\n margin-left: 1em;\n}\n\n.dfn-panel.docked {\n position: fixed;\n left: 0.5em;\n top: unset;\n bottom: 2em;\n margin: 0 auto;\n /* 0.75em from padding (x2), 0.5em from left position, 0.2em border (x2) */\n max-width: calc(100vw - 0.75em * 2 - 0.5em - 0.2em * 2);\n max-height: 30vh;\n overflow: auto;\n}\n`;\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport css from \"../styles/dfn-panel.css.js\";\nimport { fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar {\n position: relative;\n cursor: pointer;\n}\n\nvar[data-type]::before,\nvar[data-type]::after {\n position: absolute;\n left: 50%;\n top: -6px;\n opacity: 0;\n transition: opacity 0.4s;\n pointer-events: none;\n}\n\n/* the triangle or arrow or caret or whatever */\nvar[data-type]::before {\n content: \"\";\n transform: translateX(-50%);\n border-width: 4px 6px 0 6px;\n border-style: solid;\n border-color: transparent;\n border-top-color: #000;\n}\n\n/* actual text */\nvar[data-type]::after {\n content: attr(data-type);\n transform: translateX(-50%) translateY(-100%);\n background: #000;\n text-align: center;\n /* additional styling */\n font-family: \"Dank Mono\", \"Fira Code\", monospace;\n font-style: normal;\n padding: 6px;\n border-radius: 3px;\n color: #daca88;\n text-indent: 0;\n font-weight: normal;\n}\n\nvar[data-type]:hover::after,\nvar[data-type]:hover::before {\n opacity: 1;\n}\n`;\n","// @ts-check\n/**\n * Module core/data-type\n * Propagates data type of a <var> to subsequent instances within a section.\n * Also adds the CSS for the data type tooltip.\n * Set `conf.highlightVars = true` to enable.\n */\nimport css from \"../styles/datatype.css.js\";\n\nexport const name = \"core/data-type\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n let section = null;\n const varMap = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const variables = document.querySelectorAll(\"section var\");\n for (const varElem of variables) {\n const currentSection = varElem.closest(\"section\");\n if (section !== currentSection) {\n section = currentSection;\n varMap.clear();\n }\n if (varElem.dataset.type) {\n varMap.set(varElem.textContent.trim(), varElem.dataset.type);\n continue;\n }\n const type = varMap.get(varElem.textContent.trim());\n if (type) varElem.dataset.type = type;\n }\n}\n","/* For assertions in lists containing algorithms */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.assert {\n background: #eee;\n border-left: 0.5em solid #aaa;\n padding: 0.3em;\n}\n`;\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\nimport css from \"../styles/algorithms.css.js\";\n\nexport const name = \"core/algorithms\";\n\nexport function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n/**\n * Fetches commits between two commitish (tag or commit) - `from` and `to=HEAD`\n * and shows them as a list of \"changes during\" those commitish. If a filter\n * function is provided by the user, it is used to filter the commits that are\n * to be shown. Otherwise, all commits are shown.\n *\n * @typedef {{message: string, hash: string}} Commit\n */\nimport { github } from \"../github.js\";\nimport { html } from \"../import-maps.js\";\nimport { showError } from \"../utils.js\";\n\nexport const name = \"rs-changelog\";\n\nexport const element = class ChangelogElement extends HTMLElement {\n constructor() {\n super();\n this.props = {\n from: this.getAttribute(\"from\"),\n to: this.getAttribute(\"to\") || \"HEAD\",\n /** @type {(commit: Commit) => boolean} */\n filter:\n typeof window[this.getAttribute(\"filter\")] === \"function\"\n ? window[this.getAttribute(\"filter\")]\n : () => true,\n };\n }\n\n connectedCallback() {\n const { from, to, filter } = this.props;\n html.bind(this)`\n <ul>\n ${{\n any: fetchCommits(from, to, filter)\n .then(commits => toHTML(commits))\n .catch(error => showError(error.message, name, { elements: [this] }))\n .finally(() => {\n this.dispatchEvent(new CustomEvent(\"done\"));\n }),\n placeholder: \"Loading list of commits...\",\n }}\n </ul>\n `;\n }\n};\n\nasync function fetchCommits(from, to, filter) {\n /** @type {Commit[]} */\n let commits;\n try {\n const gh = await github;\n if (!gh) {\n throw new Error(\"`respecConfig.github` is not set\");\n }\n const url = new URL(\"commits\", `${gh.apiBase}/${gh.fullName}/`);\n url.searchParams.set(\"from\", from);\n url.searchParams.set(\"to\", to);\n\n const res = await fetch(url.href);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n commits = await res.json();\n if (!commits.length) {\n throw new Error(`No commits between ${from}..${to}.`);\n }\n commits = commits.filter(filter);\n } catch (error) {\n const msg = `Error loading commits from GitHub. ${error.message}`;\n console.error(error);\n throw new Error(msg);\n }\n return commits;\n}\n\nasync function toHTML(commits) {\n const { repoURL } = await github;\n return commits.map(commit => {\n const [message, prNumber = null] = commit.message.split(/\\(#(\\d+)\\)/, 2);\n const commitURL = `${repoURL}commit/${commit.hash}`;\n const prURL = prNumber ? `${repoURL}pull/${prNumber}` : null;\n const pr = prNumber && html` (<a href=\"${prURL}\">#${prNumber}</a>)`;\n return html`<li><a href=\"${commitURL}\">${message.trim()}</a>${pr}</li>`;\n });\n}\n","// @ts-check\n/**\n * Registers custom elements and waits for them to finish their processing.\n *\n * Every custom element file exports:\n * - `name`: registered name of the custom element, prefixed with `rs-`.\n * - `element`: class defintion of the custom element.\n *\n * Every custom element must dispatch a CustomEvent 'done' that tells the\n * element has finished its processing, with or without errors.\n *\n * @typedef {{ name: string, element: CustomElementConstructor }} CustomElementDfn\n */\n\nimport * as changelog from \"./rs-changelog.js\";\n/** @type {CustomElementDfn[]} */\nconst CUSTOM_ELEMENTS = [changelog];\n\nexport const name = \"core/custom-elements/index\";\n\nexport async function run() {\n // prepare and register elements\n CUSTOM_ELEMENTS.forEach(el => {\n customElements.define(el.name, el.element);\n });\n\n // wait for each element to be ready\n const selectors = CUSTOM_ELEMENTS.map(el => el.name).join(\", \");\n const elems = document.querySelectorAll(selectors);\n const readyPromises = [...elems].map(\n el => new Promise(res => el.addEventListener(\"done\", res, { once: true }))\n );\n await Promise.all(readyPromises);\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","test","rtrim","relativeBase","indexOf","str","invert","l","length","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","source","obj","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","key","i","arguments","Object","hasOwnProperty","splitCells","tableRow","count","cells","match","offset","escaped","curr","split","splice","push","trim","findClosingBracket","b","level","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","raw","title","text","type","Tokenizer_1","options","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","slice","join","indentCodeCompensation","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","def","tag","table","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","nextChar","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","lastIndex","Math","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","tokens","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","token","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","body","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parse","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","unshift","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","t","defineProperty","r","a","delete","configurable","o","s","WeakSet","add","m","u","insertBefore","selected","selectedIndex","f","querySelectorAll","y","w","x","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","v","p","g","Array","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","constructor","_wire$","defineProperties","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","isArray","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","concat","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","attribute","values","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","it","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","dispatch","component","setState","idb","_idb","_marked","_pluralize","getIntlData","x_and_y","x_y_and_z","ISODate","Intl","DateTimeFormat","timeZone","year","month","day","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","array","mapper","docLang","ListFormat","format","lastComma","and","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","data","runTransforms","flist","funcArgs","methods","meth","showWarning","htmlJoinComma","joined","addId","pfx","txt","noLC","id","normalize","getElementById","nextId","getDfnTitles","titleSet","Set","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","ref","element","closestInformative","closest","isInformative","querySelector","startsWith","illegal","wrapInner","outer","wrapper","parents","selector","parent","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","super","getCanonicalKey","existingKey","find","makeSafeCopy","clone","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","comment","walkTree","nextNode","CaseInsensitiveMap","entries","RespecError","plugin","isWarning","assign","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","subscriptions","topic","from","cb","arg","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","respecVersion","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","head","includeConfig","params","URLSearchParams","search","overrideEntries","filter","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","reindent","lines","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","prepend","Builder","current","tagName","position","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","indentation","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","css","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hash","hasLink","isLegacyFrag","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","zh","defaultLang","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","nl","hasNoHeading","offendingMembers","getOwnPropertyNames","endsWith","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","isRecTrack","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","specStatus","highlightVars","addSectionLinks","privsecSectionRule","licenses","short","diniDefaults","isED","isNoTrack","isPR","wpt-tests-exist","logos","prependW3C","doJsonLd","license","shortName","showPreviousVersion","licenseInfo","computeProps","insertStyle","noReSpecCSS","resourceHints","createResourceHints","createBaseStyle","delimiter","separator","toKeyValuePairs","width","initial-scale","shrink-to-fit","createMetaViewport","styleFile","noToc","attachFixupScript","finalStyleURL","linkURL","styles","frag","reduce","nextLink","linkCSS","exportDoc","w3cStyle","processResponse","rawData","el","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","include","includeId","response","fetch","default_title","h1Elem","isConnected","documentTitle","isPreview","prNumber","prUrl","github","repoURL","setDocumentTitle","showLink","class","showLinkData","showLogo","logo","alt","img","height","until","date","es","ko","ja","orcidIcon","showPeople","persons","personName","company","editorid","w3cid","dd","span","contents","mailto","orcid","companyURL","note","extras","extra","getExtra","retiredDate","Date","isValidDate","timeElem","langs","toLocaleString","humanDate","dateTime","textContainer","ccLicense","author","authors","editor","editors","former_editor","former_editors","latest_editors_draft","latest_published_version","this_version","specSubTitleElem","subtitle","getSpecSubTitleElem","textStatus","dashDate","publishHumanDate","multipleEditors","formerEditors","multipleFormerEditors","multipleAuthors","otherLinks","existingCopyright","overrideCopyright","cssClass","renderCopyright","DINIDate","status2text","unofficial","isUnofficial","isBasic","publishDate","fallbackDate","Number","isFinite","formattedDate","validateDateAndRecover","lastModified","publishYear","getUTCFullYear","peopCheck","orcidUrl","orcidId","pathname","lastDigit","lastDigitInt","acc","lastDigitShould","normalizeOrcid","alternateFormats","uri","copyrightStart","publishISODate","toISOString","headersTmpl","generatedSubtitle","longStatus","abstract","abs","abstractHeading","processDfnElement","abbr","fullForm","insertAdjacentHTML","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","identifier","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","pop","allArgs","SyntaxError","reverse","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","unique","openIdb","biblioDB","isAlias","resolveAlias","TypeError","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","reference","promisesToAdd","flatMap","isInDB","put","close","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","ok","status","json","addAll","resolveRef","entry","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","etAl","publisher","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","conformance","normativity","keywordInterpretation","processConformance","terms","htmlJoinAnd","contains","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","plurals","size","userDefinedPlurals","uniquePlurals","makeTitle","num","report","number","examples","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","handleIssues","ins","ghIssues","getIssueNumber","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","issueBase","atRiskBase","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","searchParams","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","hasChildNodes","makeIssueSectionSummary","issuesAndNotes","apiBase","issueNumbers","fullName","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","container","list_of_figures","fig","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","every","decorateTableOfFigures","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","cleanup","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","duplicates","dfnFor","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","idl","first","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","xref","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","res","input","maxAge","Request","cache","cachedResponse","caches","headers","clonedResponse","customHeaders","Headers","expiryDate","now","cacheResponse","Response","blob","fetchAndCache","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","prefix","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","isNaN","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","mimeTypes","rsDocToDataURL","mimeType","validTypes","cloneDoc","insertions","metaViewport","metaCharset","metaGenerator","XMLSerializer","serializeToString","outerHTML","prettify","doctype","encodeURIComponent","save_snapshot","downloadLinks","fileName","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","fetchBase","workerPromise","workerScript","default","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","namespace","counter","gen","idGenerator","msgIdGenerator","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","re","activeClass","outputDoc","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","varMap","variables","currentSection","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors","file_a_bug","participate","commit_history","HTMLElement","props","to","fetchCommits","commits","commit","commitURL","pr","finally","gh","CUSTOM_ELEMENTS","customElements","readyPromises"],"mappings":"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C,oBAAqB,QACtB,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC5f6BkC,GAAU,SAASC,GAAgB,IAAIC,EAAE,GAAG,IAAIA,EAAE5b,QAAQA,QAAQ,MAAMuK,GAAGqR,EAAE5b,QAAQ,SAAS4b,EAAErR,GAAG,IAAI1C,EAAE0C,EAAEsR,eAAeC,EAAEvR,EAAES,eAAeH,EAAEkR,EAAEza,UAAU,OAAOuJ,EAAEmR,OAAO,SAASzR,GAAG,OAAOvI,KAAKd,IAAIqJ,WAAWA,EAAEvI,KAAK4F,IAAIiD,EAAElK,IAAI,SAAS4J,GAAG,OAAOvI,KAAKd,IAAIqJ,G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"} \ No newline at end of file +{"version":3,"file":"respec-dini.js","sources":["../profiles/dini.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/exporter.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/styles/ui.css.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/dini/defaults.js","../src/styles/respec.css.js","../src/core/style.js","../src/dini/style.js","../src/core/data-include.js","../src/core/title.js","../src/core/templates/show-link.js","../src/core/templates/show-logo.js","../src/core/templates/show-people.js","../src/dini/templates/headers.js","../src/dini/headers.js","../src/dini/abstract.js","../src/core/data-transform.js","../src/core/data-abbr.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/dini/conformance.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/styles/examples.css.js","../src/core/examples.js","../src/styles/issues-notes.css.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/ui/save-html.js","../src/ui/about-respec.js","../src/core/seo.js","../src/styles/highlight.css.js","../src/core/text-loader.js","../src/core/worker.js","../src/core/highlight.js","../src/core/list-sorter.js","../src/styles/var.css.js","../src/core/highlight-vars.js","../src/styles/dfn-panel.css.js","../src/core/dfn-panel.js","../src/styles/datatype.css.js","../src/core/data-type.js","../src/styles/algorithms.css.js","../src/core/algorithms.js","../src/core/anchor-expander.js","../src/core/github.js","../src/core/custom-elements/rs-changelog.js","../src/core/custom-elements/index.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/dini/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/dini/style.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/title.js\"),\n import(\"../src/dini/headers.js\"),\n import(\"../src/dini/abstract.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/data-abbr.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/dini/conformance.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/data-type.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n import(\"../src/core/custom-elements/index.js\"),\n /* Linter must be the last thing to run */\n import(\"../src/core/linter.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/* global define */\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nexport function serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { serialize } from \"../core/exporter.js\";\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n\n async toHTML() {\n return serialize(\"html\", document);\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.respec-modal .close-button {\n position: absolute;\n z-index: inherit;\n padding: 0.2em;\n font-weight: bold;\n cursor: pointer;\n margin-left: 5px;\n border: none;\n background: transparent;\n}\n\n#respec-ui {\n position: fixed;\n display: flex;\n flex-direction: row-reverse;\n top: 20px;\n right: 20px;\n width: 202px;\n text-align: right;\n z-index: 9000;\n}\n\n#respec-pill,\n.respec-info-button {\n background: #fff;\n height: 2.5em;\n color: rgb(120, 120, 120);\n border: 1px solid #ccc;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n}\n\n.respec-info-button {\n border: none;\n opacity: 0.75;\n border-radius: 2em;\n margin-right: 1em;\n min-width: 3.5em;\n}\n\n.respec-info-button:focus,\n.respec-info-button:hover {\n opacity: 1;\n transition: opacity 0.2s;\n}\n\n#respec-pill:disabled {\n font-size: 2.8px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(40, 40, 40, 0.2);\n border-right: 1.1em solid rgba(40, 40, 40, 0.2);\n border-bottom: 1.1em solid rgba(40, 40, 40, 0.2);\n border-left: 1.1em solid #ffffff;\n transform: translateZ(0);\n animation: respec-spin 0.5s infinite linear;\n box-shadow: none;\n}\n\n#respec-pill:disabled,\n#respec-pill:disabled:after {\n border-radius: 50%;\n width: 10em;\n height: 10em;\n}\n\n@keyframes respec-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.respec-hidden {\n visibility: hidden;\n opacity: 0;\n transition: visibility 0s 0.2s, opacity 0.2s linear;\n}\n\n.respec-visible {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.2s linear;\n}\n\n#respec-pill:hover,\n#respec-pill:focus {\n color: rgb(0, 0, 0);\n background-color: rgb(245, 245, 245);\n transition: color 0.2s;\n}\n\n#respec-menu {\n position: absolute;\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n background: #fff;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n width: 200px;\n display: none;\n text-align: left;\n margin-top: 32px;\n font-size: 0.8em;\n}\n\n#respec-menu:not([hidden]) {\n display: block;\n}\n\n#respec-menu li {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n.respec-save-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(47%, 2fr));\n grid-gap: 0.5cm;\n padding: 0.5cm;\n}\n\n.respec-save-button:link {\n padding-top: 16px;\n color: rgb(240, 240, 240);\n background: rgb(42, 90, 168);\n justify-self: stretch;\n height: 1cm;\n text-decoration: none;\n text-align: center;\n font-size: inherit;\n border: none;\n border-radius: 0.2cm;\n}\n\n.respec-save-button:link:hover {\n color: white;\n background: rgb(42, 90, 168);\n padding: 0;\n margin: 0;\n border: 0;\n padding-top: 16px;\n}\n\n.respec-save-button:link:focus {\n background: #193766;\n}\n\n#respec-ui button:focus,\n#respec-pill:focus,\n.respec-option:focus {\n outline: 0;\n outline-style: none;\n}\n\n#respec-pill-error {\n background-color: red;\n color: white;\n}\n\n#respec-pill-warning {\n background-color: orange;\n color: white;\n}\n\n.respec-warning-list,\n.respec-error-list {\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: sans-serif;\n background-color: rgb(255, 251, 230);\n font-size: 0.85em;\n}\n\n.respec-warning-list > li,\n.respec-error-list > li {\n padding: 0.4em 0.7em;\n}\n\n.respec-warning-list > li::before {\n content: \"⚠️\";\n padding-right: 0.5em;\n}\n.respec-warning-list p,\n.respec-error-list p {\n padding: 0;\n margin: 0;\n}\n\n.respec-warning-list li {\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 245, 194);\n}\n\n.respec-error-list,\n.respec-error-list li {\n background-color: rgb(255, 240, 240);\n}\n\n.respec-error-list li::before {\n content: \"💥\";\n padding-right: 0.5em;\n}\n\n.respec-error-list li {\n padding: 0.4em 0.7em;\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 215, 215);\n}\n\n.respec-error-list li > p {\n margin: 0;\n padding: 0;\n display: inline-block;\n}\n\n.respec-error-list li > p:first-child,\n.respec-warning-list li > p:first-child {\n display: inline;\n}\n\n.respec-warning-list > li li,\n.respec-error-list > li li {\n margin: 0;\n list-style: disc;\n}\n\n#respec-overlay {\n display: block;\n position: fixed;\n z-index: 10000;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n background: #000;\n}\n\n.respec-show-overlay {\n transition: opacity 0.2s linear;\n opacity: 0.5;\n}\n\n.respec-hide-overlay {\n transition: opacity 0.2s linear;\n opacity: 0;\n}\n\n.respec-modal {\n display: block;\n position: fixed;\n z-index: 11000;\n margin: auto;\n top: 10%;\n background: #fff;\n border: 5px solid #666;\n min-width: 20%;\n width: 79%;\n padding: 0;\n max-height: 80%;\n overflow-y: auto;\n margin: 0 -0.5cm;\n}\n\n@media screen and (min-width: 78em) {\n .respec-modal {\n width: 62%;\n }\n}\n\n.respec-modal h3 {\n margin: 0;\n padding: 0.2em;\n text-align: center;\n color: black;\n background: linear-gradient(\n to bottom,\n rgba(238, 238, 238, 1) 0%,\n rgba(238, 238, 238, 1) 50%,\n rgba(204, 204, 204, 1) 100%\n );\n font-size: 1em;\n}\n\n.respec-modal .inside div p {\n padding-left: 1cm;\n}\n\n#respec-menu button.respec-option {\n background: white;\n padding: 0 0.2cm;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n padding: 1.2em 1.2em;\n}\n\n#respec-menu button.respec-option:hover,\n#respec-menu button:focus {\n background-color: #eeeeee;\n}\n\n.respec-cmd-icon {\n padding-right: 0.5em;\n}\n\n#respec-ui button.respec-option:last-child {\n border: none;\n border-radius: inherit;\n}\n\n.respec-button-copy-paste {\n position: absolute;\n height: 28px;\n width: 40px;\n cursor: pointer;\n background-image: linear-gradient(#fcfcfc, #eee);\n border: 1px solid rgb(144, 184, 222);\n border-left: 0;\n border-radius: 0px 0px 3px 0;\n -webkit-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n top: 0;\n left: 127px;\n}\n\n@media print {\n #respec-ui {\n display: none;\n }\n}\n\n.respec-iframe {\n width: 100%;\n min-height: 550px;\n height: 100%;\n overflow: hidden;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n.respec-iframe:not(.ready) {\n background: url(\"https://respec.org/xref/loader.gif\") no-repeat center;\n}\n\n.respec-iframe + a[href] {\n font-size: 0.9rem;\n float: right;\n margin: 0 0.5em 0.5em;\n border-bottom-width: 1px;\n}\n`;\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport css from \"../styles/ui.css.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Sets the defaults for DINI specs\n */\nexport const name = \"dini/defaults\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\n\nlinter.register(privsecSectionRule);\n\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n [\n \"cc-by-sa\",\n {\n name:\n \"Creative Commons Attribution-ShareAlike 4.0 International Public License\",\n short: \"CC-BY-SA\",\n url: \"https://creativecommons.org/licenses/by-sa/4.0/legalcode\",\n },\n ],\n]);\n\nconst diniDefaults = {\n format: \"markdown\",\n isED: false,\n isNoTrack: true,\n isPR: false,\n lint: {\n \"privsec-section\": true,\n \"wpt-tests-exist\": false,\n },\n logos: [],\n prependW3C: false,\n doJsonLd: false,\n license: \"cc-by\",\n shortName: \"X\",\n showPreviousVersion: false,\n};\n\nfunction computeProps(conf) {\n return {\n licenseInfo: licenses.get(conf.license),\n };\n}\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...diniDefaults.lint,\n ...conf.lint,\n };\n Object.assign(conf, {\n ...coreDefaults,\n ...diniDefaults,\n ...conf,\n lint,\n });\n\n // computed properties\n Object.assign(conf, computeProps(conf));\n}\n","/* ReSpec specific CSS */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n@keyframes pop {\n 0% {\n transform: scale(1, 1);\n }\n 25% {\n transform: scale(1.25, 1.25);\n opacity: 0.75;\n }\n 100% {\n transform: scale(1, 1);\n }\n}\n\n/* Override code highlighter background */\n.hljs {\n background: transparent !important;\n}\n\n/* --- INLINES --- */\nh1 abbr,\nh2 abbr,\nh3 abbr,\nh4 abbr,\nh5 abbr,\nh6 abbr,\na abbr {\n border: none;\n}\n\ndfn {\n font-weight: bold;\n}\n\na.internalDFN {\n color: inherit;\n border-bottom: 1px solid #99c;\n text-decoration: none;\n}\n\na.externalDFN {\n color: inherit;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\na.bibref {\n text-decoration: none;\n}\n\n.respec-offending-element:target {\n animation: pop 0.25s ease-in-out 0s 1;\n}\n\n.respec-offending-element,\na[href].respec-offending-element {\n text-decoration: red wavy underline;\n}\n@supports not (text-decoration: red wavy underline) {\n .respec-offending-element:not(pre) {\n display: inline-block;\n }\n .respec-offending-element {\n /* Red squiggly line */\n background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=)\n bottom repeat-x;\n }\n}\n\n#references :target {\n background: #eaf3ff;\n animation: pop 0.4s ease-in-out 0s 1;\n}\n\ncite .bibref {\n font-style: normal;\n}\n\ncode {\n color: #c63501;\n}\n\nth code {\n color: inherit;\n}\n\na[href].orcid {\n padding-left: 4px;\n padding-right: 4px;\n}\n\na[href].orcid > svg {\n margin-bottom: -2px;\n}\n\n/* --- TOC --- */\n\n.toc a,\n.tof a {\n text-decoration: none;\n}\n\na .secno,\na .figno {\n color: #000;\n}\n\nul.tof,\nol.tof {\n list-style: none outside none;\n}\n\n.caption {\n margin-top: 0.5em;\n font-style: italic;\n}\n\n/* --- TABLE --- */\n\ntable.simple {\n border-spacing: 0;\n border-collapse: collapse;\n border-bottom: 3px solid #005a9c;\n}\n\n.simple th {\n background: #005a9c;\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th a {\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th[scope=\"row\"] {\n background: inherit;\n color: inherit;\n border-top: 1px solid #ddd;\n}\n\n.simple td {\n padding: 3px 10px;\n border-top: 1px solid #ddd;\n}\n\n.simple tr:nth-child(even) {\n background: #f0f6ff;\n}\n\n/* --- DL --- */\n\n.section dd > p:first-child {\n margin-top: 0;\n}\n\n.section dd > p:last-child {\n margin-bottom: 0;\n}\n\n.section dd {\n margin-bottom: 1em;\n}\n\n.section dl.attrs dd,\n.section dl.eldef dd {\n margin-bottom: 0;\n}\n\n#issue-summary > ul {\n column-count: 2;\n}\n\n#issue-summary li {\n list-style: none;\n display: inline-block;\n}\n\ndetails.respec-tests-details {\n margin-left: 1em;\n display: inline-block;\n vertical-align: top;\n}\n\ndetails.respec-tests-details > * {\n padding-right: 2em;\n}\n\ndetails.respec-tests-details[open] {\n z-index: 999999;\n position: absolute;\n border: thin solid #cad3e2;\n border-radius: 0.3em;\n background-color: white;\n padding-bottom: 0.5em;\n}\n\ndetails.respec-tests-details[open] > summary {\n border-bottom: thin solid #cad3e2;\n padding-left: 1em;\n margin-bottom: 1em;\n line-height: 2em;\n}\n\ndetails.respec-tests-details > ul {\n width: 100%;\n margin-top: -0.3em;\n}\n\ndetails.respec-tests-details > li {\n padding-left: 1em;\n}\n\na[href].self-link:hover {\n opacity: 1;\n text-decoration: none;\n background-color: transparent;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n position: relative;\n}\n\naside.example .marker > a.self-link {\n color: inherit;\n}\n\nh2 > a.self-link,\nh3 > a.self-link,\nh4 > a.self-link,\nh5 > a.self-link,\nh6 > a.self-link {\n border: none;\n color: inherit;\n font-size: 83%;\n height: 2em;\n left: -1.6em;\n opacity: 0.5;\n position: absolute;\n text-align: center;\n text-decoration: none;\n top: 0;\n transition: opacity 0.2s;\n width: 2em;\n}\n\nh2 > a.self-link::before,\nh3 > a.self-link::before,\nh4 > a.self-link::before,\nh5 > a.self-link::before,\nh6 > a.self-link::before {\n content: \"§\";\n display: block;\n}\n\n@media (max-width: 767px) {\n dd {\n margin-left: 0;\n }\n\n /* Don't position self-link in headings off-screen */\n h2 > a.self-link,\n h3 > a.self-link,\n h4 > a.self-link,\n h5 > a.self-link,\n h6 > a.self-link {\n left: auto;\n top: auto;\n }\n}\n\n@media print {\n .removeOnSave {\n display: none;\n }\n}\n`;\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport css from \"../styles/respec.css.js\";\n\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = css;\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport function run(conf) {\n if (conf.noReSpecCSS) {\n styleElement.remove();\n }\n}\n","// @ts-check\n// Module dini/style\n// Inserts a link to the appropriate W3C style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"dini/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n if (location.hash) {\n script.addEventListener(\n \"load\",\n () => {\n window.location.href = location.hash;\n },\n { once: true }\n );\n }\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createBaseStyle() {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = \"https://www.w3.org/StyleSheets/TR/2016/base.css\";\n link.classList.add(\"removeOnSave\");\n return link;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C styles and scripts.\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preload\", // all specs include on base.css.\n href: \"https://www.w3.org/StyleSheets/TR/2016/base.css\",\n as: \"style\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// Opportunistically apply base style\nelements.appendChild(createBaseStyle());\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\nfunction styleMover(linkURL) {\n return exportDoc => {\n const w3cStyle = exportDoc.querySelector(`head link[href=\"${linkURL}\"]`);\n exportDoc.querySelector(\"head\").append(w3cStyle);\n };\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'base'.\";\n conf.specStatus = \"base\";\n showWarning(msg, name);\n }\n\n let styleFile = \"\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"UNOFFICIAL\":\n styleFile = \"W3C-UD\";\n break;\n case \"BASE\":\n styleFile = \"base.css\";\n break;\n }\n\n // Attach W3C fixup script after we are done.\n if (!conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, \"2016\");\n },\n { once: true }\n );\n }\n const finalStyleURL = `https://www.w3.org/StyleSheets/TR/2016/${styleFile}`;\n linkCSS(document, finalStyleURL);\n // Make sure the W3C stylesheet is the last stylesheet, as required by W3C Pub Rules.\n const moveStyle = styleMover(finalStyleURL);\n sub(\"beforesave\", moveStyle);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","/**\n * This module handles the creation of the h1#title of a spec and\n * makes sure the <title> always matches the h1.\n *\n * If no h1#title is included, then the <title> becomes the h1#title.\n *\n * When a h1#title is included, it always takes precedence over the\n * <title> of a spec. An error will be displayed in case of\n * any mismatch.\n *\n */\n\nimport { getIntlData, norm, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/title\";\n\nconst localizationStrings = {\n en: {\n default_title: \"No Title\",\n },\n de: {\n default_title: \"Kein Titel\",\n },\n zh: {\n default_title: \"无标题\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n /** @type {HTMLElement} */\n const h1Elem =\n document.querySelector(\"h1#title\") || html`<h1 id=\"title\"></h1>`;\n\n // check existing element is ok to use\n if (h1Elem.isConnected && h1Elem.textContent.trim() === \"\") {\n const msg =\n \"The document is missing a title, so using a default title. \" +\n \"To fix this, please give your document a `<title>`. \" +\n \"If you need special markup in the document's title, \" +\n 'please use a `<h1 id=\"title\">`.';\n const title = \"Document is missing a title\";\n showError(msg, name, { title, elements: [h1Elem] });\n }\n\n // Decorate the spec title\n if (!h1Elem.id) h1Elem.id = \"title\";\n h1Elem.classList.add(\"title\");\n\n setDocumentTitle(conf, h1Elem);\n\n // This will get relocated by a template later.\n document.body.prepend(h1Elem);\n}\n\nfunction setDocumentTitle(conf, h1Elem) {\n // If the h1 is newly created, it won't be connected. In this case\n // we use the <title> or a localized fallback.\n if (!h1Elem.isConnected) {\n h1Elem.textContent = document.title || `${l10n.default_title}`;\n }\n\n let documentTitle = norm(h1Elem.textContent);\n\n if (conf.isPreview && conf.prNumber) {\n const prUrl = conf.prUrl || `${conf.github.repoURL}pull/${conf.prNumber}`;\n const { childNodes } = html`\n Preview of PR <a href=\"${prUrl}\">#${conf.prNumber}</a>:\n `;\n h1Elem.prepend(...childNodes);\n documentTitle = `Preview of PR #${conf.prNumber}: ${documentTitle}`;\n }\n\n document.title = documentTitle;\n\n // conf.title is deperecated - we are keeping this here just to\n // retain backwards compat as we think the ePub generator\n // relies on it.\n conf.title = documentTitle;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-link\";\n\n/**\n * @param {object} link\n * @param {string} link.key\n * @param {string} [link.class]\n * @param {LinkData[]} [link.data]\n */\nexport default function showLink(link) {\n if (!link.key) {\n const msg =\n \"Found a link without `key` attribute in the configuration. See dev console.\";\n showWarning(msg, name);\n console.warn(msg, link);\n return;\n }\n return html`\n <dt class=\"${link.class ? link.class : null}\">${link.key}</dt>\n ${link.data ? link.data.map(showLinkData) : showLinkData(link)}\n `;\n}\n\n/**\n * @typedef {object} LinkData\n * @property {string} [LinkData.class]\n * @property {string} [LinkData.href]\n * @property {string} [LinkData.value]\n * @param {LinkData} data\n */\nfunction showLinkData(data) {\n return html`<dd class=\"${data.class ? data.class : null}\">\n ${data.href\n ? html`<a href=\"${data.href}\">${data.value || data.href}</a>`\n : data.value}\n </dd>`;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-logo\";\n\n/**\n * @param {object} logo\n * @param {string} logo.src\n * @param {string} logo.url\n * @param {string} logo.alt\n * @param {string} [logo.id]\n * @param {number} [logo.width]\n * @param {number} [logo.height]\n */\nexport default function showLogo(logo) {\n /** @type {HTMLAnchorElement} */\n const a = html`<a href=\"${logo.url || \"\"}\" class=\"logo\"></a>`;\n if (!logo.alt) {\n const msg = \"Found spec logo without an `alt` attribute.\";\n showWarning(msg, name, { elements: [a] });\n }\n /** @type {HTMLImageElement} */\n const img = html`<img\n id=\"${logo.id}\"\n alt=\"${logo.alt}\"\n width=\"${logo.width}\"\n height=\"${logo.height}\"\n />`;\n // avoid triggering 404 requests from dynamically generated\n // hyperHTML attribute values\n img.src = logo.src;\n a.append(img);\n return a;\n}\n","// @ts-check\nimport { humanDate, showError, toShortIsoDate } from \"../../core/utils.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst name = \"core/templates/show-people\";\n\nconst localizationStrings = {\n en: {\n until(date) {\n return html` Until ${date} `;\n },\n },\n es: {\n until(date) {\n return html` Hasta ${date} `;\n },\n },\n ko: {\n until(date) {\n return html` ${date} 이전 `;\n },\n },\n ja: {\n until(date) {\n return html` ${date} 以前 `;\n },\n },\n de: {\n until(date) {\n return html` bis ${date} `;\n },\n },\n zh: {\n until(date) {\n return html` 直到 ${date} `;\n },\n },\n};\n\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nconst orcidIcon = html`<svg\n width=\"16\"\n height=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n>\n <style>\n .st1 {\n fill: #fff;\n }\n </style>\n <path\n d=\"M256 128c0 70.7-57.3 128-128 128S0 198.7 0 128 57.3 0 128 0s128 57.3 128 128z\"\n fill=\"#a6ce39\"\n />\n <path\n class=\"st1\"\n d=\"M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z\"\n />\n</svg>`;\n\n/**\n * @typedef {object} Person\n * @property {string} [Person.name]\n * @property {string} [Person.company]\n * @property {string|number} [Person.w3cid]\n * @property {string} [Person.mailto]\n * @property {string} [Person.url]\n * @property {string} [Person.orcid]\n * @property {string} [Person.company]\n * @property {string} [Person.companyURL]\n * @property {string} [Person.note]\n * @property {string} [Person.retiredDate]\n * @property {PersonExtras} [Person.extras]\n *\n * @typedef {object} PersonExtras\n * @property {string} PersonExtras.name\n * @property {string} [PersonExtras.class]\n * @property {string} [PersonExtras.href]\n *\n * @param {Person[]} persons\n */\nexport default function showPeople(persons = []) {\n const l10n = localizationStrings[lang];\n return persons.map(getItem);\n\n function getItem(p) {\n const personName = [p.name]; // treated as opt-in HTML by hyperHTML\n const company = [p.company];\n const editorid = p.w3cid ? parseInt(p.w3cid, 10) : null;\n /** @type {HTMLElement} */\n const dd = html`<dd\n class=\"p-author h-card vcard\"\n data-editor-id=\"${editorid}\"\n ></dd>`;\n const span = document.createDocumentFragment();\n const contents = [];\n if (p.mailto) {\n contents.push(html`<a\n class=\"ed_mailto u-email email p-name\"\n href=\"${`mailto:${p.mailto}`}\"\n >${personName}</a\n >`);\n } else if (p.url) {\n contents.push(\n html`<a class=\"u-url url p-name fn\" href=\"${p.url}\">${personName}</a>`\n );\n } else {\n contents.push(html`<span class=\"p-name fn\">${personName}</span>`);\n }\n if (p.orcid) {\n contents.push(\n html`<a class=\"p-name orcid\" href=\"${p.orcid}\"\n >${orcidIcon.cloneNode(true)}\n </a>`\n );\n }\n if (p.company) {\n if (p.companyURL) {\n contents.push(\n html`\n (<a class=\"p-org org h-org h-card\" href=\"${p.companyURL}\"\n >${company}</a\n >)\n `\n );\n } else {\n contents.push(html` (${company}) `);\n }\n }\n if (p.note) contents.push(document.createTextNode(` (${p.note})`));\n if (p.extras) {\n const results = p.extras\n // Remove empty names\n .filter(extra => extra.name && extra.name.trim())\n // Convert to HTML\n .map(getExtra);\n for (const result of results) {\n contents.push(document.createTextNode(\", \"), result);\n }\n }\n if (p.retiredDate) {\n const retiredDate = new Date(p.retiredDate);\n const isValidDate = retiredDate.toString() !== \"Invalid Date\";\n const timeElem = document.createElement(\"time\");\n timeElem.textContent = isValidDate\n ? humanDate(retiredDate)\n : \"Invalid Date\"; // todo: Localise invalid date\n if (!isValidDate) {\n const msg = \"The date is invalid. The expected format is YYYY-MM-DD.\";\n const title = \"Invalid date\";\n showError(msg, name, { title, elements: [timeElem] });\n }\n timeElem.dateTime = toShortIsoDate(retiredDate);\n contents.push(html` - ${l10n.until(timeElem)} `);\n }\n\n // @ts-ignore: hyperhtml types only support Element but we use a DocumentFragment here\n html.bind(span)`${contents}`;\n dd.appendChild(span);\n return dd;\n }\n\n function getExtra(extra) {\n const span = html`<span class=\"${extra.class || null}\"></span>`;\n let textContainer = span;\n if (extra.href) {\n textContainer = html`<a href=\"${extra.href}\"></a>`;\n span.appendChild(textContainer);\n }\n textContainer.textContent = extra.name;\n return span;\n }\n}\n","// @ts-check\nimport { getIntlData, showWarning } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nconst name = \"dini/templates/headers\";\n\nconst ccLicense = \"https://creativecommons.org/licenses/by/4.0/legalcode\";\n\nconst localizationStrings = {\n en: {\n author: \"Author:\",\n authors: \"Authors:\",\n editor: \"Editor:\",\n editors: \"Editors:\",\n former_editor: \"Former editor:\",\n former_editors: \"Former editors:\",\n latest_editors_draft: \"Latest editor's draft:\",\n latest_published_version: \"Latest published version:\",\n this_version: \"This version:\",\n },\n ko: {\n author: \"저자:\",\n authors: \"저자:\",\n editor: \"편집자:\",\n editors: \"편집자:\",\n former_editor: \"이전 편집자:\",\n former_editors: \"이전 편집자:\",\n latest_editors_draft: \"최신 편집 초안:\",\n latest_published_version: \"최신 버전:\",\n this_version: \"현재 버전:\",\n },\n zh: {\n author: \"作者:\",\n authors: \"作者:\",\n editor: \"编辑:\",\n editors: \"编辑:\",\n former_editor: \"原编辑:\",\n former_editors: \"原编辑:\",\n latest_editors_draft: \"最新编辑草稿:\",\n latest_published_version: \"最新发布版本:\",\n this_version: \"本版本:\",\n },\n ja: {\n author: \"著者:\",\n authors: \"著者:\",\n editor: \"編者:\",\n editors: \"編者:\",\n former_editor: \"以前の版の編者:\",\n former_editors: \"以前の版の編者:\",\n latest_editors_draft: \"最新の編集用草案:\",\n latest_published_version: \"最新バージョン:\",\n this_version: \"このバージョン:\",\n },\n nl: {\n author: \"Auteur:\",\n authors: \"Auteurs:\",\n editor: \"Redacteur:\",\n editors: \"Redacteurs:\",\n latest_editors_draft: \"Laatste werkversie:\",\n latest_published_version: \"Laatst gepubliceerde versie:\",\n this_version: \"Deze versie:\",\n },\n es: {\n author: \"Autor:\",\n authors: \"Autores:\",\n editor: \"Editor:\",\n editors: \"Editores:\",\n latest_editors_draft: \"Borrador de editor mas reciente:\",\n latest_published_version: \"Versión publicada mas reciente:\",\n this_version: \"Ésta versión:\",\n },\n de: {\n author: \"Autor/in:\",\n authors: \"Autor/innen:\",\n editor: \"Redaktion:\",\n editors: \"Redaktion:\",\n former_editor: \"Frühere Mitwirkende:\",\n former_editors: \"Frühere Mitwirkende:\",\n latest_editors_draft: \"Letzter Entwurf:\",\n latest_published_version: \"Letzte publizierte Fassung:\",\n this_version: \"Diese Fassung:\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nfunction getSpecSubTitleElem(conf) {\n let specSubTitleElem = document.querySelector(\"h2#subtitle\");\n\n if (specSubTitleElem && specSubTitleElem.parentElement) {\n specSubTitleElem.remove();\n conf.subtitle = specSubTitleElem.textContent.trim();\n } else if (conf.subtitle) {\n specSubTitleElem = document.createElement(\"h2\");\n specSubTitleElem.textContent = conf.subtitle;\n specSubTitleElem.id = \"subtitle\";\n }\n if (specSubTitleElem) {\n specSubTitleElem.classList.add(\"subtitle\");\n }\n return specSubTitleElem;\n}\n\nexport default conf => {\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${document.querySelector(\"h1#title\")}\n ${getSpecSubTitleElem(conf)}\n <h2>\n ${conf.textStatus}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >\n </h2>\n <dl>\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${renderCopyright(conf)}\n <hr />\n </div>`;\n};\n\n/**\n * @param {string} text\n * @param {string} url\n * @param {string=} cssClass\n */\nfunction linkLicense(text, url, cssClass) {\n return html`<a rel=\"license\" href=\"${url}\" class=\"${cssClass}\">${text}</a>`;\n}\n\nfunction renderCopyright(conf) {\n // If there is already a copyright, let's relocate it.\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n return existingCopyright;\n }\n if (conf.hasOwnProperty(\"overrideCopyright\")) {\n const msg = \"The `overrideCopyright` configuration option is deprecated.\";\n const hint = 'Please use `<p class=\"copyright\">` instead.';\n showWarning(msg, name, { hint });\n }\n return conf.overrideCopyright\n ? [conf.overrideCopyright]\n : html`<p class=\"copyright\">\n Dieses Dokument ist lizensiert unter\n ${linkLicense(\n \"Creative Commons Attribution 4.0 International Public License\",\n ccLicense,\n \"subfoot\"\n )}.\n </p>`;\n}\n","// @ts-check\n// Module dini/headers\n// Generate the headers material based on the provided configuration.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n// - editors: an array of people editing the document (at least one is required). People\n// are defined using:\n// - name: the person's name (required)\n// - url: URI for the person's home page\n// - company: the person's company\n// - companyURL: the URI for the person's company\n// - mailto: the person's email\n// - note: a note on the person (e.g. former editor)\n// - authors: an array of people who are contributing authors of the document.\n// - formerEditors: an array of people that had earlier edited the document but no longer edit.\n// - subtitle: a subtitle for the specification\n// - publishDate: the date to use for the publication, default to document.lastModified, and\n// failing that to now. The format is YYYY-MM-DD or a Date object.\n// - alternateFormats: a list of alternate formats for the document, each of which being\n// defined by:\n// - uri: the URI to the alternate\n// - label: a label for the alternate\n// - lang: optional language\n// - type: optional MIME type\n// - logos: a list of logos to use instead of the W3C logo, each of which being defined by:\n// - src: the URI to the logo (target of <img src=>)\n// - alt: alternate text for the image (<img alt=>), defaults to \"Logo\" or \"Logo 1\", \"Logo 2\", ...\n// if src is not specified, this is the text of the \"logo\"\n// - height: optional height of the logo (<img height=>)\n// - width: optional width of the logo (<img width=>)\n// - url: the URI to the organization represented by the logo (target of <a href=>)\n// - id: optional id for the logo, permits custom CSS (wraps logo in <span id=>)\n// - each logo element must specify either src or alt\n// - otherLinks: an array of other links that you might want in the header (e.g., link github, twitter, etc).\n// Example of usage: [{key: \"foo\", href:\"https://b\"}, {key: \"bar\", href:\"https://\"}].\n// Allowed values are:\n// - key: the key for the <dt> (e.g., \"Bug Tracker\"). Required.\n// - value: The value that will appear in the <dd> (e.g., \"GitHub\"). Optional.\n// - href: a URL for the value (e.g., \"https://foo.com/issues\"). Optional.\n// - class: a string representing CSS classes. Optional.\n// - license: can be one of the following\n// - \"cc-by-sa\"\n// - \"cc-by\"\n// - \"cc0\"\nimport { ISODate, showError } from \"../core/utils.js\";\nimport headersTmpl from \"./templates/headers.js\";\nimport { pub } from \"../core/pubsubhub.js\";\n\nexport const name = \"dini/headers\";\n\nconst DINIDate = new Intl.DateTimeFormat([\"de-DE\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n});\n\nconst status2text = {\n unofficial: \"Entwurf vom\",\n base: \"Spezifikation vom\",\n};\n\n/**\n * @param {*} conf\n * @param {string} prop\n * @param {string | number | Date} fallbackDate\n */\nfunction validateDateAndRecover(conf, prop, fallbackDate = new Date()) {\n const date = conf[prop] ? new Date(conf[prop]) : new Date(fallbackDate);\n // if date is valid\n if (Number.isFinite(date.valueOf())) {\n const formattedDate = ISODate.format(date);\n return new Date(formattedDate);\n }\n const msg =\n `[\\`${prop}\\`](https://github.com/w3c/respec/wiki/${prop}) ` +\n `is not a valid date: \"${conf[prop]}\". Expected format 'YYYY-MM-DD'.`;\n showError(msg, name);\n return new Date(ISODate.format(new Date()));\n}\n\nexport function run(conf) {\n conf.isUnofficial = conf.specStatus === \"unofficial\";\n conf.isBasic = conf.specStatus === \"base\";\n if (!conf.specStatus) {\n const msg = \"Missing required configuration: `specStatus`\";\n showError(msg, name);\n }\n conf.title = document.title || \"Kein Titel\";\n if (!conf.subtitle) conf.subtitle = \"\";\n conf.publishDate = validateDateAndRecover(\n conf,\n \"publishDate\",\n document.lastModified\n );\n conf.publishYear = conf.publishDate.getUTCFullYear();\n conf.publishHumanDate = DINIDate.format(conf.publishDate);\n const peopCheck = function (it) {\n if (!it.name) {\n const msg = \"All authors and editors must have a name.\";\n showError(msg, name);\n }\n if (it.orcid) {\n try {\n it.orcid = normalizeOrcid(it.orcid);\n } catch (e) {\n const msg = `\"${it.orcid}\" is not an ORCID. ${e.message}`;\n showError(msg, name);\n // A failed orcid link could link to something outside of orcid,\n // which would be misleading.\n delete it.orcid;\n }\n }\n };\n if (!conf.formerEditors) conf.formerEditors = [];\n if (conf.editors) {\n conf.editors.forEach(peopCheck);\n // Move any editors with retiredDate to formerEditors.\n for (let i = 0; i < conf.editors.length; i++) {\n const editor = conf.editors[i];\n if (\"retiredDate\" in editor) {\n conf.formerEditors.push(editor);\n conf.editors.splice(i--, 1);\n }\n }\n }\n if (!conf.editors || conf.editors.length === 0) {\n const msg = \"At least one editor is required\";\n showError(msg, name);\n }\n if (conf.formerEditors.length) {\n conf.formerEditors.forEach(peopCheck);\n }\n if (conf.authors) {\n conf.authors.forEach(peopCheck);\n }\n conf.multipleEditors = conf.editors && conf.editors.length > 1;\n conf.multipleFormerEditors = conf.formerEditors.length > 1;\n conf.multipleAuthors = conf.authors && conf.authors.length > 1;\n (conf.alternateFormats || []).forEach(it => {\n if (!it.uri || !it.label) {\n const msg = \"All alternate formats must have a uri and a label.\";\n showError(msg, name);\n }\n });\n if (conf.copyrightStart && conf.copyrightStart == conf.publishYear)\n conf.copyrightStart = \"\";\n conf.textStatus = status2text[conf.specStatus];\n conf.dashDate = ISODate.format(conf.publishDate);\n conf.publishISODate = conf.publishDate.toISOString();\n // configuration done - yay!\n\n // insert into document\n const header = headersTmpl(conf);\n document.body.prepend(header);\n document.body.classList.add(\"h-entry\");\n\n // Requested by https://github.com/w3c/respec/issues/504\n // Makes a record of a few auto-generated things.\n pub(\"amend-user-config\", {\n publishISODate: conf.publishISODate,\n generatedSubtitle: `${conf.longStatus} ${conf.publishHumanDate}`,\n });\n}\n\n/**\n * @param {string} orcid Either an ORCID URL or just the 16-digit ID which comes after the /\n * @return {string} the full ORCID URL. Throws an error if the ID is invalid.\n */\nfunction normalizeOrcid(orcid) {\n const orcidUrl = new URL(orcid, \"https://orcid.org/\");\n if (orcidUrl.origin !== \"https://orcid.org\") {\n throw new Error(\n `The origin should be \"https://orcid.org\", not \"${orcidUrl.origin}\".`\n );\n }\n\n // trailing slash would mess up checksum\n const orcidId = orcidUrl.pathname.slice(1).replace(/\\/$/, \"\");\n if (!/^\\d{4}-\\d{4}-\\d{4}-\\d{3}(\\d|X)$/.test(orcidId)) {\n throw new Error(\n `ORCIDs have the format \"1234-1234-1234-1234\", not \"${orcidId}\"`\n );\n }\n\n // calculate checksum as per https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier\n const lastDigit = orcidId[orcidId.length - 1];\n const remainder = orcidId\n .split(\"\")\n .slice(0, -1)\n .filter(c => /\\d/.test(c))\n .map(Number)\n .reduce((acc, c) => (acc + c) * 2, 0);\n const lastDigitInt = (12 - (remainder % 11)) % 11;\n const lastDigitShould = lastDigitInt === 10 ? \"X\" : String(lastDigitInt);\n if (lastDigit !== lastDigitShould) {\n throw new Error(`\"${orcidId}\" has an invalid checksum.`);\n }\n\n return orcidUrl.href;\n}\n","// @ts-check\n// Module dini/abstract\n// Handle the abstract section properly.\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"dini/abstract\";\n\nconst localizationStrings = {\n en: {\n abstract: \"Abstract\",\n },\n ko: {\n abstract: \"요약\",\n },\n zh: {\n abstract: \"摘要\",\n },\n ja: {\n abstract: \"要約\",\n },\n nl: {\n abstract: \"Samenvatting\",\n },\n es: {\n abstract: \"Resumen\",\n },\n de: {\n abstract: \"Zusammenfassung\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run() {\n const abs = document.getElementById(\"abstract\");\n if (!abs) {\n const msg = `Document must have one element with \\`id=\"abstract\"`;\n showError(msg, name);\n return;\n }\n abs.classList.add(\"introductory\");\n let abstractHeading = document.querySelector(\"#abstract>h2\");\n if (abstractHeading) {\n return;\n }\n abstractHeading = document.createElement(\"h2\");\n abstractHeading.textContent = l10n.abstract;\n abs.prepend(abstractHeading);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Module core/data-abbr\n// - Finds all elements with data-abbr attribute and processes them.\nimport { showError } from \"./utils.js\";\nexport const name = \"core/dfn-abbr\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = document.querySelectorAll(\"[data-abbr]\");\n for (const elem of elements) {\n const { localName } = elem;\n switch (localName) {\n case \"dfn\":\n processDfnElement(elem);\n break;\n default: {\n const msg = `\\`data-abbr\\` attribute not supported on \\`${localName}\\` elements.`;\n showError(msg, name, {\n elements: [elem],\n title: \"Error: unsupported.\",\n });\n }\n }\n }\n}\n/**\n * @param {HTMLElement} dfn\n */\nfunction processDfnElement(dfn) {\n const abbr = generateAbbreviation(dfn);\n // get normalized <dfn> textContent to remove spaces, tabs, new lines.\n const fullForm = dfn.textContent.replace(/\\s\\s+/g, \" \").trim();\n dfn.insertAdjacentHTML(\n \"afterend\",\n ` (<abbr title=\"${fullForm}\">${abbr}</abbr>)`\n );\n const lt = dfn.dataset.lt || \"\";\n dfn.dataset.lt = lt\n .split(\"|\")\n .filter(i => i.trim())\n .concat(abbr)\n .join(\"|\");\n}\n\nfunction generateAbbreviation(elem) {\n if (elem.dataset.abbr) return elem.dataset.abbr;\n // Generates abbreviation from textContent\n // e.g., \"Permanent Account Number\" -> \"PAN\"\n return elem.textContent\n .match(/\\b([a-z])/gi)\n .join(\"\")\n .toUpperCase();\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://api.specref.org/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\n/** @param {BiblioData|string} ref */\nfunction stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\n// Module dini/conformance\n// Handle the conformance section properly.\nimport { getIntlData, htmlJoinAnd, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { renderInlineCitation } from \"../core/render-biblio.js\";\nimport { rfc2119Usage } from \"../core/inlines.js\";\nexport const name = \"dini/conformance\";\n\nconst localizationStrings = {\n en: {\n conformance: \"Conformance\",\n normativity:\n \"As well as sections marked as non-normative, all authoring guidelines, \" +\n \"diagrams, examples, and notes in this specification are non-normative. \" +\n \"Everything else in this specification is normative.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n The key word${plural ? \"s\" : \"\"} ${keywords} in this document\n ${plural ? \"are\" : \"is\"} to be interpreted as described in\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n when, and only when, they appear in all capitals, as shown here.\n </p>`;\n },\n },\n de: {\n conformance: \"Anforderungen\",\n normativity:\n \"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten \" +\n \"sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument \" +\n \"nicht normativ. Alle anderen Angaben sind normativ.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n ${plural ? \"Die Schlüsselwörter\" : \"Das Schlüsselwort\"} ${keywords} in\n diesem Dokument ${plural ? \"sind\" : \"ist\"} gemäß\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n und unter Berücksichtigung von\n <a href=\"https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst\"\n >2119de</a\n >\n zu interpretieren, wenn und nur wenn ${plural ? \"sie\" : \"es\"} wie hier\n gezeigt durchgehend groß geschrieben wurde${plural ? \"n\" : \"\"}.\n </p>`;\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {Element} conformance\n * @param {*} conf\n */\nfunction processConformance(conformance, conf) {\n const terms = [...Object.keys(rfc2119Usage)];\n // Add RFC2119 to bibliography\n if (terms.length) {\n conf.normativeReferences.add(\"RFC2119\");\n conf.normativeReferences.add(\"RFC8174\");\n }\n // Put in the 2119 clause and reference\n const keywords = htmlJoinAnd(\n terms.sort(),\n item => html`<em class=\"rfc2119\">${item}</em>`\n );\n const plural = terms.length > 1;\n const content = html`\n <h2>${l10n.conformance}</h2>\n <p>${l10n.normativity}</p>\n ${terms.length ? l10n.keywordInterpretation(keywords, plural) : null}\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run(conf) {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance && !conformance.classList.contains(\"override\")) {\n processConformance(conformance, conf);\n }\n // Warn when there are RFC2119/RFC8174 keywords, but not conformance section\n if (!conformance && Object.keys(rfc2119Usage).length) {\n const msg = `Document uses RFC2119 keywords but lacks a conformance section.`;\n const hint = 'Please add a `<section id=\"conformance\">`.';\n showWarning(msg, name, { hint });\n }\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","/* --- EXAMPLES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nspan.example-title {\n text-transform: none;\n}\n\naside.example,\ndiv.example,\ndiv.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\n\ndiv.illegal-example {\n color: red;\n}\n\ndiv.illegal-example p {\n color: black;\n}\n\naside.example,\ndiv.example {\n padding: 0.5em;\n border-left-width: 0.5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: 0.1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example span.example-title {\n color: #999;\n}\n\n.example pre {\n background-color: rgba(0, 0, 0, 0.03);\n}\n`;\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport css from \"../styles/examples.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","/* --- ISSUES/NOTES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.issue-label {\n text-transform: initial;\n}\n\n.warning > p:first-child { margin-top: 0 }\n.warning {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n}\nspan.warning { padding: .1em .5em .15em; }\n\n.issue.closed span.issue-number {\n text-decoration: line-through;\n}\n\n.warning {\n border-color: #f11;\n border-width: .2em;\n border-style: solid;\n background: #fbe9e9;\n}\n\n.warning-title:before{\n content: \"⚠\"; /*U+26A0 WARNING SIGN*/\n font-size: 1.3em;\n float: left;\n padding-right: .3em;\n margin-top: -0.3em;\n}\n\nli.task-list-item {\n list-style: none;\n}\n\ninput.task-list-item-checkbox {\n margin: 0 0.35em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.issue a.respec-gh-label {\n padding: 5px;\n margin: 0 2px 0 2px;\n font-size: 10px;\n text-transform: none;\n text-decoration: none;\n font-weight: bold;\n border-radius: 4px;\n position: relative;\n bottom: 2px;\n border: none;\n display: inline-block;\n}\n`;\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport css from \"../styles/issues-notes.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","/*\nAdapted from Atom One Light by Daniel Gamage for ReSpec, with better color contrast\nOriginal One Light Syntax theme from https://github.com/atom/one-light-syntax\nbase: #fafafa\nmono-1: #383a42\nmono-2: #686b77\nmono-3: #a0a1a7\nhue-1: #0184bb\nhue-2: #4078f2\nhue-3: #a626a4\nhue-4: #50a14f\nhue-5: #e45649\nhue-5-2: #c91243\nhue-6: #986801\nhue-6-2: #c18401\n*/\n\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n color: #383a42;\n background: #fafafa;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #717277;\n font-style: italic;\n}\n\n.hljs-doctag,\n.hljs-keyword,\n.hljs-formula {\n color: #a626a4;\n}\n\n.hljs-section,\n.hljs-name,\n.hljs-selector-tag,\n.hljs-deletion,\n.hljs-subst {\n color: #ca4706;\n font-weight: bold;\n}\n\n.hljs-literal {\n color: #0b76c5;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta-string {\n color: #42803C;\n}\n\n.hljs-built_in,\n.hljs-class .hljs-title {\n color: #9a6a01;\n}\n\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-type,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-number {\n color: #986801;\n}\n\n.hljs-symbol,\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-title {\n color: #336ae3;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n.hljs-link {\n text-decoration: underline;\n}\n`;\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport css from \"../styles/highlight.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n document.head.appendChild(\n html`<style>\n ${css}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\nvar.respec-hl {\n color: var(--color, #000);\n background-color: var(--bg-color);\n box-shadow: 0 0 0px 2px var(--bg-color);\n}\n\n/* highlight colors\n https://github.com/w3c/tr-design/issues/152\n*/\nvar.respec-hl-c1 {\n --bg-color: #f4d200;\n}\n\nvar.respec-hl-c2 {\n --bg-color: #ff87a2;\n}\n\nvar.respec-hl-c3 {\n --bg-color: #96e885;\n}\n\nvar.respec-hl-c4 {\n --bg-color: #3eeed2;\n}\n\nvar.respec-hl-c5 {\n --bg-color: #eacfb6;\n}\n\nvar.respec-hl-c6 {\n --bg-color: #82ddff;\n}\n\nvar.respec-hl-c7 {\n --bg-color: #ffbcf2;\n}\n\n@media print {\n var.respec-hl {\n background: none;\n color: #000;\n box-shadow: unset;\n }\n}\n`;\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport css from \"../styles/var.css.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","/* dfn popup panel that list all local references to a dfn */\n/**\n * TODO: Revert changes due to https://github.com/w3c/respec/pull/2888 when\n * https://github.com/w3c/css-validator/pull/111 is fixed.\n */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\ndfn {\n cursor: pointer;\n}\n\n.dfn-panel {\n position: absolute;\n z-index: 35;\n min-width: 300px;\n max-width: 500px;\n padding: 0.5em 0.75em;\n margin-top: 0.6em;\n font: small Helvetica Neue, sans-serif, Droid Sans Fallback;\n background: #fff;\n color: black;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n}\n/* Triangle/caret */\n.dfn-panel:not(.docked) > .caret {\n position: absolute;\n top: -9px;\n}\n.dfn-panel:not(.docked) > .caret::before,\n.dfn-panel:not(.docked) > .caret::after {\n content: \"\";\n position: absolute;\n border: 10px solid transparent;\n border-top: 0;\n border-bottom: 10px solid #fff;\n top: 0;\n}\n.dfn-panel:not(.docked) > .caret::before {\n border-bottom: 9px solid #a2a9b1;\n}\n\n.dfn-panel * {\n margin: 0;\n}\n\n.dfn-panel b {\n display: block;\n color: #000;\n margin-top: 0.25em;\n}\n\n.dfn-panel ul a[href] {\n color: #333;\n}\n\n.dfn-panel > div {\n display: flex;\n}\n\n.dfn-panel a.self-link {\n font-weight: bold;\n margin-right: auto;\n}\n\n.dfn-panel .marker {\n padding: 0.1em;\n margin-left: 0.5em;\n border-radius: 0.2em;\n text-align: center;\n white-space: nowrap;\n font-size: 90%;\n color: #040b1c;\n}\n\n.dfn-panel .marker.dfn-exported {\n background: #d1edfd;\n box-shadow: 0 0 0 0.125em #1ca5f940;\n}\n.dfn-panel .marker.idl-block {\n background: #8ccbf2;\n box-shadow: 0 0 0 0.125em #0670b161;\n}\n\n.dfn-panel a:not(:hover) {\n text-decoration: none !important;\n border-bottom: none !important;\n}\n\n.dfn-panel a[href]:hover {\n border-bottom-width: 1px;\n}\n\n.dfn-panel ul {\n padding: 0;\n}\n\n.dfn-panel li {\n margin-left: 1em;\n}\n\n.dfn-panel.docked {\n position: fixed;\n left: 0.5em;\n top: unset;\n bottom: 2em;\n margin: 0 auto;\n /* 0.75em from padding (x2), 0.5em from left position, 0.2em border (x2) */\n max-width: calc(100vw - 0.75em * 2 - 0.5em - 0.2em * 2);\n max-height: 30vh;\n overflow: auto;\n}\n`;\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport css from \"../styles/dfn-panel.css.js\";\nimport { fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar {\n position: relative;\n cursor: pointer;\n}\n\nvar[data-type]::before,\nvar[data-type]::after {\n position: absolute;\n left: 50%;\n top: -6px;\n opacity: 0;\n transition: opacity 0.4s;\n pointer-events: none;\n}\n\n/* the triangle or arrow or caret or whatever */\nvar[data-type]::before {\n content: \"\";\n transform: translateX(-50%);\n border-width: 4px 6px 0 6px;\n border-style: solid;\n border-color: transparent;\n border-top-color: #000;\n}\n\n/* actual text */\nvar[data-type]::after {\n content: attr(data-type);\n transform: translateX(-50%) translateY(-100%);\n background: #000;\n text-align: center;\n /* additional styling */\n font-family: \"Dank Mono\", \"Fira Code\", monospace;\n font-style: normal;\n padding: 6px;\n border-radius: 3px;\n color: #daca88;\n text-indent: 0;\n font-weight: normal;\n}\n\nvar[data-type]:hover::after,\nvar[data-type]:hover::before {\n opacity: 1;\n}\n`;\n","// @ts-check\n/**\n * Module core/data-type\n * Propagates data type of a <var> to subsequent instances within a section.\n * Also adds the CSS for the data type tooltip.\n * Set `conf.highlightVars = true` to enable.\n */\nimport css from \"../styles/datatype.css.js\";\n\nexport const name = \"core/data-type\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n let section = null;\n const varMap = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const variables = document.querySelectorAll(\"section var\");\n for (const varElem of variables) {\n const currentSection = varElem.closest(\"section\");\n if (section !== currentSection) {\n section = currentSection;\n varMap.clear();\n }\n if (varElem.dataset.type) {\n varMap.set(varElem.textContent.trim(), varElem.dataset.type);\n continue;\n }\n const type = varMap.get(varElem.textContent.trim());\n if (type) varElem.dataset.type = type;\n }\n}\n","/* For assertions in lists containing algorithms */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.assert {\n background: #eee;\n border-left: 0.5em solid #aaa;\n padding: 0.3em;\n}\n`;\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\nimport css from \"../styles/algorithms.css.js\";\n\nexport const name = \"core/algorithms\";\n\nexport function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n/**\n * Fetches commits between two commitish (tag or commit) - `from` and `to=HEAD`\n * and shows them as a list of \"changes during\" those commitish. If a filter\n * function is provided by the user, it is used to filter the commits that are\n * to be shown. Otherwise, all commits are shown.\n *\n * @typedef {{message: string, hash: string}} Commit\n */\nimport { github } from \"../github.js\";\nimport { html } from \"../import-maps.js\";\nimport { showError } from \"../utils.js\";\n\nexport const name = \"rs-changelog\";\n\nexport const element = class ChangelogElement extends HTMLElement {\n constructor() {\n super();\n this.props = {\n from: this.getAttribute(\"from\"),\n to: this.getAttribute(\"to\") || \"HEAD\",\n /** @type {(commit: Commit) => boolean} */\n filter:\n typeof window[this.getAttribute(\"filter\")] === \"function\"\n ? window[this.getAttribute(\"filter\")]\n : () => true,\n };\n }\n\n connectedCallback() {\n const { from, to, filter } = this.props;\n html.bind(this)`\n <ul>\n ${{\n any: fetchCommits(from, to, filter)\n .then(commits => toHTML(commits))\n .catch(error => showError(error.message, name, { elements: [this] }))\n .finally(() => {\n this.dispatchEvent(new CustomEvent(\"done\"));\n }),\n placeholder: \"Loading list of commits...\",\n }}\n </ul>\n `;\n }\n};\n\nasync function fetchCommits(from, to, filter) {\n /** @type {Commit[]} */\n let commits;\n try {\n const gh = await github;\n if (!gh) {\n throw new Error(\"`respecConfig.github` is not set\");\n }\n const url = new URL(\"commits\", `${gh.apiBase}/${gh.fullName}/`);\n url.searchParams.set(\"from\", from);\n url.searchParams.set(\"to\", to);\n\n const res = await fetch(url.href);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n commits = await res.json();\n if (!commits.length) {\n throw new Error(`No commits between ${from}..${to}.`);\n }\n commits = commits.filter(filter);\n } catch (error) {\n const msg = `Error loading commits from GitHub. ${error.message}`;\n console.error(error);\n throw new Error(msg);\n }\n return commits;\n}\n\nasync function toHTML(commits) {\n const { repoURL } = await github;\n return commits.map(commit => {\n const [message, prNumber = null] = commit.message.split(/\\(#(\\d+)\\)/, 2);\n const commitURL = `${repoURL}commit/${commit.hash}`;\n const prURL = prNumber ? `${repoURL}pull/${prNumber}` : null;\n const pr = prNumber && html` (<a href=\"${prURL}\">#${prNumber}</a>)`;\n return html`<li><a href=\"${commitURL}\">${message.trim()}</a>${pr}</li>`;\n });\n}\n","// @ts-check\n/**\n * Registers custom elements and waits for them to finish their processing.\n *\n * Every custom element file exports:\n * - `name`: registered name of the custom element, prefixed with `rs-`.\n * - `element`: class defintion of the custom element.\n *\n * Every custom element must dispatch a CustomEvent 'done' that tells the\n * element has finished its processing, with or without errors.\n *\n * @typedef {{ name: string, element: CustomElementConstructor }} CustomElementDfn\n */\n\nimport * as changelog from \"./rs-changelog.js\";\n/** @type {CustomElementDfn[]} */\nconst CUSTOM_ELEMENTS = [changelog];\n\nexport const name = \"core/custom-elements/index\";\n\nexport async function run() {\n // prepare and register elements\n CUSTOM_ELEMENTS.forEach(el => {\n customElements.define(el.name, el.element);\n });\n\n // wait for each element to be ready\n const selectors = CUSTOM_ELEMENTS.map(el => el.name).join(\", \");\n const elems = document.querySelectorAll(selectors);\n const readyPromises = [...elems].map(\n el => new Promise(res => el.addEventListener(\"done\", res, { once: true }))\n );\n await Promise.all(readyPromises);\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","test","rtrim","relativeBase","indexOf","str","invert","l","length","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","source","obj","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","key","i","arguments","Object","hasOwnProperty","splitCells","tableRow","count","cells","match","offset","escaped","curr","split","splice","push","trim","findClosingBracket","b","level","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","raw","title","text","type","Tokenizer_1","options","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","slice","join","indentCodeCompensation","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","def","tag","table","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","nextChar","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","lastIndex","Math","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","tokens","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","token","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","body","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parse","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","unshift","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","t","defineProperty","r","a","delete","configurable","o","s","WeakSet","add","m","u","insertBefore","selected","selectedIndex","f","querySelectorAll","y","w","x","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","v","p","g","Array","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","constructor","_wire$","defineProperties","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","isArray","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","concat","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","attribute","values","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","it","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","dispatch","component","setState","idb","_idb","_marked","_pluralize","getIntlData","x_and_y","x_y_and_z","ISODate","Intl","DateTimeFormat","timeZone","year","month","day","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","array","mapper","docLang","ListFormat","format","lastComma","and","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","data","runTransforms","flist","funcArgs","methods","meth","showWarning","htmlJoinComma","joined","addId","pfx","txt","noLC","id","normalize","getElementById","nextId","getDfnTitles","titleSet","Set","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","ref","element","closestInformative","closest","isInformative","querySelector","startsWith","illegal","wrapInner","outer","wrapper","parents","selector","parent","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","super","getCanonicalKey","existingKey","find","makeSafeCopy","clone","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","comment","walkTree","nextNode","CaseInsensitiveMap","entries","RespecError","plugin","isWarning","assign","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","subscriptions","topic","from","cb","arg","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","mimeTypes","rsDocToDataURL","mimeType","validTypes","TypeError","encodeURIComponent","cloneDoc","head","insertions","metaViewport","metaCharset","respecVersion","metaGenerator","prepend","cleanup","XMLSerializer","serializeToString","el","outerHTML","prettify","doctype","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","includeConfig","params","URLSearchParams","search","overrideEntries","filter","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","reindent","lines","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","Builder","current","tagName","position","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","indentation","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","css","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hash","hasLink","isLegacyFrag","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","zh","defaultLang","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","nl","hasNoHeading","offendingMembers","getOwnPropertyNames","endsWith","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","isRecTrack","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","specStatus","highlightVars","addSectionLinks","privsecSectionRule","licenses","short","diniDefaults","isED","isNoTrack","isPR","wpt-tests-exist","logos","prependW3C","doJsonLd","license","shortName","showPreviousVersion","licenseInfo","computeProps","insertStyle","noReSpecCSS","resourceHints","createResourceHints","createBaseStyle","delimiter","separator","toKeyValuePairs","width","initial-scale","shrink-to-fit","createMetaViewport","styleFile","noToc","attachFixupScript","finalStyleURL","linkURL","styles","frag","reduce","nextLink","linkCSS","exportDoc","w3cStyle","processResponse","rawData","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","include","includeId","response","fetch","default_title","h1Elem","isConnected","documentTitle","isPreview","prNumber","prUrl","github","repoURL","setDocumentTitle","showLink","class","showLinkData","showLogo","logo","alt","img","height","until","date","es","ko","ja","orcidIcon","showPeople","persons","personName","company","editorid","w3cid","dd","span","contents","mailto","orcid","companyURL","note","extras","extra","getExtra","retiredDate","Date","isValidDate","timeElem","langs","toLocaleString","humanDate","dateTime","textContainer","ccLicense","author","authors","editor","editors","former_editor","former_editors","latest_editors_draft","latest_published_version","this_version","specSubTitleElem","subtitle","getSpecSubTitleElem","textStatus","dashDate","publishHumanDate","multipleEditors","formerEditors","multipleFormerEditors","multipleAuthors","otherLinks","existingCopyright","overrideCopyright","cssClass","renderCopyright","DINIDate","status2text","unofficial","isUnofficial","isBasic","publishDate","fallbackDate","Number","isFinite","formattedDate","validateDateAndRecover","lastModified","publishYear","getUTCFullYear","peopCheck","orcidUrl","orcidId","pathname","lastDigit","lastDigitInt","acc","lastDigitShould","normalizeOrcid","alternateFormats","uri","copyrightStart","publishISODate","toISOString","headersTmpl","generatedSubtitle","longStatus","abstract","abs","abstractHeading","processDfnElement","abbr","fullForm","insertAdjacentHTML","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","identifier","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","pop","allArgs","SyntaxError","reverse","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","unique","openIdb","biblioDB","isAlias","resolveAlias","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","reference","promisesToAdd","flatMap","isInDB","put","close","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","ok","status","json","addAll","resolveRef","entry","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","etAl","publisher","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","conformance","normativity","keywordInterpretation","processConformance","terms","htmlJoinAnd","contains","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","plurals","size","userDefinedPlurals","uniquePlurals","makeTitle","num","report","number","examples","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","handleIssues","ins","ghIssues","getIssueNumber","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","issueBase","atRiskBase","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","searchParams","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","hasChildNodes","makeIssueSectionSummary","issuesAndNotes","apiBase","issueNumbers","fullName","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","container","list_of_figures","fig","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","every","decorateTableOfFigures","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","duplicates","dfnFor","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","idl","first","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","xref","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","res","input","maxAge","Request","cache","cachedResponse","caches","headers","clonedResponse","customHeaders","Headers","expiryDate","now","cacheResponse","Response","blob","fetchAndCache","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","prefix","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","isNaN","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","save_snapshot","downloadLinks","fileName","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","fetchBase","workerPromise","workerScript","default","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","namespace","counter","gen","idGenerator","msgIdGenerator","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","re","activeClass","outputDoc","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","varMap","variables","currentSection","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors","file_a_bug","participate","commit_history","HTMLElement","props","to","fetchCommits","commits","commit","commitURL","pr","finally","gh","CUSTOM_ELEMENTS","customElements","readyPromises"],"mappings":"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C,oBAAqB,QACtB,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC5f6BkC,GAAU,SAASC,GAAgB,IAAIC,EAAE,GAAG,IAAIA,EAAE5b,QAAQA,QAAQ,MAAMuK,GAAGqR,EAAE5b,QAAQ,SAAS4b,EAAErR,GAAG,IAAI1C,EAAE0C,EAAEsR,eAAeC,EAAEvR,EAAES,eAAeH,EAAEkR,EAAEza,UAAU,OAAOuJ,EAAEmR,OAAO,SAASzR,GAAG,OAAOvI,KAAKd,IAAIqJ,WAAWA,EAAEvI,KAAK4F,IAAIiD,EAAElK,IAAI,SAAS4J,GAAG,OAAOvI,KAAKd,IAAIqJ,G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"} \ No newline at end of file diff --git a/builds/respec-geonovum.js b/builds/respec-geonovum.js index 880aac68bf..dbc0c922e8 100644 --- a/builds/respec-geonovum.js +++ b/builds/respec-geonovum.js @@ -1,5 +1,7 @@ -window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return ut})),Promise.resolve().then((function(){return Ft})),Promise.resolve().then((function(){return Ut})),Promise.resolve().then((function(){return s})),Promise.resolve().then((function(){return On})),Promise.resolve().then((function(){return qn})),Promise.resolve().then((function(){return Wn})),Promise.resolve().then((function(){return Gn})),Promise.resolve().then((function(){return Yn})),Promise.resolve().then((function(){return tr})),Promise.resolve().then((function(){return _t})),Promise.resolve().then((function(){return ft})),Promise.resolve().then((function(){return nr})),Promise.resolve().then((function(){return so})),Promise.resolve().then((function(){return co})),Promise.resolve().then((function(){return uo})),Promise.resolve().then((function(){return mo})),Promise.resolve().then((function(){return vo})),Promise.resolve().then((function(){return So})),Promise.resolve().then((function(){return Ao})),Promise.resolve().then((function(){return Ar})),Promise.resolve().then((function(){return Vo})),Promise.resolve().then((function(){return Do})),Promise.resolve().then((function(){return qr})),Promise.resolve().then((function(){return Ko})),Promise.resolve().then((function(){return Jo})),Promise.resolve().then((function(){return ii})),Promise.resolve().then((function(){return ai})),Promise.resolve().then((function(){return li})),Promise.resolve().then((function(){return ci})),Promise.resolve().then((function(){return yi})),Promise.resolve().then((function(){return $i})),Promise.resolve().then((function(){return Li})),Promise.resolve().then((function(){return Ni})),Promise.resolve().then((function(){return Ii})),Promise.resolve().then((function(){return Wi})),Promise.resolve().then((function(){return Ki})),Promise.resolve().then((function(){return ts})),Promise.resolve().then((function(){return os})),Promise.resolve().then((function(){return ss})),Promise.resolve().then((function(){return fs})),Promise.resolve().then((function(){return un}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},i=r.lang;var s=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:i,run:function(e){e.l10n=o[i]||o.en}});let a,l;const c=new WeakMap,u=new WeakMap,d=new WeakMap,p=new WeakMap,f=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(l||(l=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(c.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),r()},i=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",i)},o=()=>{t(b(e.result)),r()},i=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",i)});return t.then(t=>{t instanceof IDBCursor&&c.set(t,e)}).catch(()=>{}),f.set(t,e),t}(e);if(p.has(e))return p.get(e);const t=g(e);return t!==e&&(p.set(e,t),f.set(t,e)),t}const w=e=>f.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const i=async function(e,...t){const i=this.transaction(e,o?"readwrite":"readonly");let s=i.store;return r&&(s=s.index(t.shift())),(await Promise.all([s[n](...t),o&&i.done]))[0]};return k.set(t,i),i}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:i}={}){const s=indexedDB.open(e,t),a=b(s);return r&&s.addEventListener("upgradeneeded",e=>{r(b(s.result),e.oldVersion,e.newVersion,b(s.transaction))}),n&&s.addEventListener("blocked",()=>n()),a.then(e=>{i&&e.addEventListener("close",()=>i()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});var _,S=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(_={exports:{}},_.exports),_.exports);const E=/[&<>"']/,C=/[&<>"']/g,A=/[<>"']|&(?!#?\w+;)/,L=/[<>"']|&(?!#?\w+;)/g,N={"&":"&","<":"<",">":">",'"':""","'":"'"},T=e=>N[e];const R=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function j(e){return e.replace(R,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const z=/(^|[^\[])\^/g;const P=/[^\w:]/g,O=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const I={},D=/^[^:]+:\/*[^/]*$/,q=/^([^:]+:)[\s\S]*$/,M=/^([^:]+:\/*[^/]*)[\s\S]*$/;function B(e,t){I[" "+e]||(D.test(e)?I[" "+e]=e+"/":I[" "+e]=F(e,"/",!0));const n=-1===(e=I[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(q,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(M,"$1")+t:e+t}function F(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const i=e.charAt(r-o-1);if(i!==t||n){if(i===t||!n)break;o++}else o++}return e.substr(0,r-o)}var U={escape:function(e,t){if(t){if(E.test(e))return e.replace(C,T)}else if(A.test(e))return e.replace(L,T);return e},unescape:j,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(z,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(j(n)).replace(P,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!O.test(n)&&(n=B(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:B,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:F,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:W}=S,{rtrim:H,splitCells:G,escape:V,findClosingBracket:Z}=U;function K(e,t,n){const r=t.href,o=t.title?V(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:i}:{type:"image",raw:n,href:r,title:o,text:V(i)}}var J=class{constructor(e){this.options=e||W}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:H(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=H(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:G(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=G(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},i=t[0].match(this.rules.block.item);let s,a,l,c,u,d,p,f,h,m=!1,g=i.length;l=this.rules.block.listItemStart.exec(i[0]);for(let t=0;t<g;t++){if(s=i[t],e=s,this.options.pedantic||(h=s.match(new RegExp("\\n\\s*\\n {0,"+(l[0].length-1)+"}\\S")),h&&(u=s.length-h.index+i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),s=s.substring(0,h.index),e=s,g=t+1)),t!==g-1){if(c=this.rules.block.listItemStart.exec(i[t+1]),this.options.pedantic?c[1].length>l[1].length:c[1].length>=l[0].length||c[1].length>3){i.splice(t,2,i[t]+(!this.options.pedantic&&c[1].length<l[0].length&&!i[t].match(/\n$/)?"":"\n")+i[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?c[2][c[2].length-1]!==n[n.length-1]:r===(1===c[2].length))&&(u=i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),l=c}a=s.length,s=s.replace(/^ *([*+-]|\d+[.)]) ?/,""),~s.indexOf("\n ")&&(a-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+a+"}","gm"),"")),s=H(s,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(p=/^\[[ xX]\] /.test(s),f=void 0,p&&(f=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:p,checked:f,loose:d,text:s})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):V(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:G(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=G(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:V(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=H(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=Z(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),K(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return K(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,i,s=n,a=0;const l="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=l.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(i=o.length,r[3]||r[4])s+=i;else if(!((r[5]||r[6])&&n%3)||(n+i)%3){if(s-=i,!(s>0)){if(s+a-i<=0&&!t.slice(l.lastIndex).match(l)&&(i=Math.min(i,i+s+a)),Math.min(n,i)%2)return{type:"em",raw:e.slice(0,n+r.index+i+1),text:e.slice(1,n+r.index+i)};if(Math.min(n,i)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+i+1),text:e.slice(2,n+r.index+i-1)}}}else a+=i}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=V(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=V(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=V(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=V(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=V(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]:V(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:X,edit:Y,merge:Q}=U,ee={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:X,table:X,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ee.def=Y(ee.def).replace("label",ee._label).replace("title",ee._title).getRegex(),ee.bullet=/(?:[*+-]|\d{1,9}[.)])/,ee.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ee.item=Y(ee.item,"gm").replace(/bull/g,ee.bullet).getRegex(),ee.listItemStart=Y(/^( *)(bull) */).replace("bull",ee.bullet).getRegex(),ee.list=Y(ee.list).replace(/bull/g,ee.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ee.def.source+")").getRegex(),ee._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ee.html=Y(ee.html,"i").replace("comment",ee._comment).replace("tag",ee._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ee.paragraph=Y(ee._paragraph).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.blockquote=Y(ee.blockquote).replace("paragraph",ee.paragraph).getRegex(),ee.normal=Q({},ee),ee.gfm=Q({},ee.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ee.gfm.nptable=Y(ee.gfm.nptable).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.gfm.table=Y(ee.gfm.table).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.pedantic=Q({},ee.normal,{html:Y("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ee._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:X,paragraph:Y(ee.normal._paragraph).replace("hr",ee.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ee.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const te={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:X,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:X,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};te.punctuation=Y(te.punctuation).replace(/punctuation/g,te._punctuation).getRegex(),te.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,te.escapedEmSt=/\\\*|\\_/g,te._comment=Y(ee._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),te.emStrong.lDelim=Y(te.emStrong.lDelim).replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimAst=Y(te.emStrong.rDelimAst,"g").replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimUnd=Y(te.emStrong.rDelimUnd,"g").replace(/punct/g,te._punctuation).getRegex(),te._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,te._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,te._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,te.autolink=Y(te.autolink).replace("scheme",te._scheme).replace("email",te._email).getRegex(),te._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,te.tag=Y(te.tag).replace("comment",te._comment).replace("attribute",te._attribute).getRegex(),te._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,te._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,te._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,te.link=Y(te.link).replace("label",te._label).replace("href",te._href).replace("title",te._title).getRegex(),te.reflink=Y(te.reflink).replace("label",te._label).getRegex(),te.reflinkSearch=Y(te.reflinkSearch,"g").replace("reflink",te.reflink).replace("nolink",te.nolink).getRegex(),te.normal=Q({},te),te.pedantic=Q({},te.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:Y(/^!?\[(label)\]\((.*?)\)/).replace("label",te._label).getRegex(),reflink:Y(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",te._label).getRegex()}),te.gfm=Q({},te.normal,{escape:Y(te.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),te.gfm.url=Y(te.gfm.url,"i").replace("email",te.gfm._extended_email).getRegex(),te.breaks=Q({},te.gfm,{br:Y(te.br).replace("{2,}","*").getRegex(),text:Y(te.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var ne={block:ee,inline:te};const{defaults:re}=S,{block:oe,inline:ie}=ne,{repeatString:se}=U;function ae(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function le(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var ce=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||re,this.options.tokenizer=this.options.tokenizer||new J,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:oe.normal,inline:ie.normal};this.options.pedantic?(t.block=oe.pedantic,t.inline=ie.pedantic):this.options.gfm&&(t.block=oe.gfm,this.options.breaks?t.inline=ie.breaks:t.inline=ie.gfm),this.tokenizer.rules=t}static get rules(){return{block:oe,inline:ie}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,i,s;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"paragraph"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),i=r.items.length,o=0;o<i;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,i,s;const a=e.length;for(t=0;t<a;t++)switch(s=e[t],s.type){case"paragraph":case"text":case"heading":s.tokens=[],this.inlineTokens(s.text,s.tokens);break;case"table":for(s.tokens={header:[],cells:[]},o=s.header.length,n=0;n<o;n++)s.tokens.header[n]=[],this.inlineTokens(s.header[n],s.tokens.header[n]);for(o=s.cells.length,n=0;n<o;n++)for(i=s.cells[n],s.tokens.cells[n]=[],r=0;r<i.length;r++)s.tokens.cells[n][r]=[],this.inlineTokens(i[r],s.tokens.cells[n][r]);break;case"blockquote":this.inline(s.tokens);break;case"list":for(o=s.items.length,n=0;n<o;n++)this.inline(s.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,i,s,a,l,c=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(c));)e.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(c));)c=c.slice(0,s.index)+"++"+c.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(l=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const i=t[t.length-1];i&&"text"===o.type&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,c,l))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,le))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,le))){if(o=this.tokenizer.inlineText(e,r,ae))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(l=o.raw.slice(-1)),a=!0,i=t[t.length-1],i&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:ue}=S,{cleanUrl:de,escape:pe}=U;var fe=class{constructor(e){this.options=e||ue}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+pe(r,!0)+'">'+(n?e:pe(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:pe(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+pe(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},he=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},me=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:ge}=S,{unescape:be}=U;var we=class e{constructor(e){this.options=e||ge,this.options.renderer=this.options.renderer||new fe,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new he,this.slugger=new me}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,i,s,a,l,c,u,d,p,f,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,be(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(c="",l="",i=d.header.length,r=0;r<i;r++)l+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(c+=this.renderer.tablerow(l),u="",i=d.cells.length,r=0;r<i;r++){for(a=d.tokens.cells[r],l="",s=a.length,o=0;o<s;o++)l+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(l)}v+=this.renderer.table(c,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(p=d.ordered,f=d.start,h=d.loose,i=d.items.length,u="",r=0;r<i;r++)g=d.items[r],b=g.checked,w=g.task,m="",g.task&&(y=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,p,f);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const i=e.length;for(n=0;n<i;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:ye,checkSanitizeDeprecation:ve,escape:ke}=U,{getDefaults:xe,changeDefaults:$e,defaults:_e}=S;function Se(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=ye({},Se.defaults,t||{}),ve(t),n){const r=t.highlight;let o;try{o=ce.lex(e,t)}catch(e){return n(e)}const i=function(e){let i;if(!e)try{i=we.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,i)};if(!r||r.length<3)return i();if(delete t.highlight,!o.length)return i();let s=0;return Se.walkTokens(o,(function(e){"code"===e.type&&(s++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),s--,0===s&&i()}))},0))})),void(0===s&&i())}try{const n=ce.lex(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}}Se.options=Se.setOptions=function(e){return ye(Se.defaults,e),$e(Se.defaults),Se},Se.getDefaults=xe,Se.defaults=_e,Se.use=function(e){const t=ye({},e);if(e.renderer){const n=Se.defaults.renderer||new fe;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let i=e.renderer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.renderer=n}if(e.tokenizer){const n=Se.defaults.tokenizer||new J;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let i=e.tokenizer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.tokenizer=n}if(e.walkTokens){const n=Se.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Se.setOptions(t)},Se.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Se.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Se.walkTokens(n,t);break;case"list":Se.walkTokens(n.items,t);break;default:n.tokens&&Se.walkTokens(n.tokens,t)}},Se.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=ye({},Se.defaults,t||{}),ve(t);try{const n=ce.lexInline(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}},Se.Parser=we,Se.parser=we.parse,Se.Renderer=fe,Se.TextRenderer=he,Se.Lexer=ce,Se.lexer=ce.lex,Se.Tokenizer=J,Se.Slugger=me,Se.parse=Se;var Ee=Se;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ce=function(e){var t={exports:{}};return e(t,t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function i(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function s(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function l(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return s(""===n?e[r-1]:n,o)}))}function c(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var i=r[o];if(i[0].test(t))return l(t,i)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?s(r,o):e.hasOwnProperty(o)?s(r,e[o]):c(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&c(o,o,n)===o}}function p(e,t,n){return(n?t+" ":"")+(1===t?p.singular(e):p.plural(e))}return p.plural=u(o,r,e),p.isPlural=d(o,r,e),p.singular=u(r,o,t),p.isSingular=d(r,o,t),p.addPluralRule=function(t,n){e.push([i(t),n])},p.addSingularRule=function(e,n){t.push([i(e),n])},p.addUncountableRule=function(e){"string"!=typeof e?(p.addPluralRule(e,"$0"),p.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},p.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return p.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return p.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return p.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(p.addUncountableRule),p}))})),Ae=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=i.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},i;function i(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(s,this)}function s(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,i){for(var s=("selectedIndex"in t),a=s;r<o;){var l,c=e(n[r],1);t.insertBefore(c,i),s&&a&&c.selected&&(a=!a,l=t.selectedIndex,t.selectedIndex=l<0?r:d.call(t.querySelectorAll("option"),c)),r++}}function i(e,t){return e==t}function s(e){return e}function a(e,t,n,r,o,i,s){var a=i-o;if(a<1)return-1;for(;a<=n-t;){for(var l=t,c=o;l<n&&c<i&&s(e[l],r[c]);)l++,c++;if(c===i)return t;t=l+1}return-1}function l(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function c(e,t,n,r){for(;n<r;)f(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,p=function(e,t,n){for(var r=1,o=t;r<o;){var i=(r+o)/2>>>0;n<e[i]?o=i:r=1+i}return r},f=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||i,d=r.node||s,f=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,w=0;g<m&&w<b&&u(t[g],n[w]);)g++,w++;for(;g<m&&w<b&&u(t[m-1],n[b-1]);)m--,b--;var y=g===m,v=w===b;if(y&&v)return n;if(y&&w<b)return o(d,e,n,w,b,l(d,t,g,h,f)),n;if(v&&g<m)return c(d,t,g,m),n;var k=m-g,x=b-w,$=-1;if(k<x){if(-1<($=a(n,w,b,t,g,m,u)))return o(d,e,n,w,$,d(t[g],0)),o(d,e,n,$+k,b,l(d,t,m,h,f)),n}else if(x<k&&-1<($=a(t,g,m,n,w,b,u)))return c(d,t,g,$),c(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,w,b,d(t[g],0)),c(d,t,g,m)):k==x&&function(e,t,n,r,o,i){for(;r<o&&i(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,w,b,l(d,t,m,h,f)):function(e,t,n,r,i,s,a,l,u,d,f,h,m){!function(e,t,n,r,i,s,a,l,u){for(var d=[],p=e.length,f=a,h=0;h<p;)switch(e[h++]){case 0:i++,f++;break;case 1:d.push(r[i]),o(t,n,r,i++,i,f<l?t(s[f],0):u);break;case-1:f++}for(h=0;h<p;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(s[a])?a++:c(t,s,a++,a)}}(function(e,t,n,r,o,i,s){var a,l,c,u,d,p,f=n+i,h=[];e:for(b=0;b<=f;b++){if(50<b)return null;for(p=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(l=(c=a===-b||a!==b&&u[p+a-1]<u[p+a+1]?u[p+a+1]:u[p+a-1]+1)-a;c<i&&l<n&&s(r[o+c],e[t+l]);)c++,l++;if(c===i&&l===n)break e;d[b+a]=c}}for(var m=Array(b/2+f/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<c&&0<l&&s(r[o+c-1],e[t+l-1]);)m[g--]=0,c--,l--;if(!b)break;p=b-1,u=b?h[b-1]:[0,0],(a=c-l)==-b||a!==b&&u[p+a-1]<u[p+a+1]?(l--,m[g--]=1):(c--,m[g--]=-1)}return m}(n,r,s,a,l,d,h)||function(e,t,n,r,o,i,s,a){var l=0,c=r<a?r:a,u=Array(c++),d=Array(c);d[0]=-1;for(var f=1;f<c;f++)d[f]=s;for(var h=o.slice(i,s),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(l=p(d,c,g=b+i))&&(d[l]=g,u[l]={newi:m,oldi:g,prev:u[l-1]})}for(l=--c,--s;d[l]>s;)--l;c=a+r-l;var w=Array(c),y=u[l];for(--n;y;){for(var v=y.newi,k=y.oldi;v<n;)w[--c]=1,--n;for(;k<s;)w[--c]=-1,--s;w[--c]=0,--n,--s,y=y.prev}for(;t<=n;)w[--c]=1,--n;for(;i<=s;)w[--c]=-1,--s;return w}(n,r,i,s,a,l,u,d),e,t,n,r,a,l,f,m)}(d,e,n,w,b,x,t,g,m,k,h,u,f),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,w={};try{w.Map=Map}catch(u){w.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var i=r(o);return i&&(t.splice(e,1),n.splice(e,1)),i},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,i){return n[r(o)?e:t.push(o)-1]=i,this}};function r(n){return-1<(e=t.indexOf(n))}}}var y=w.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,_,S,E,C,A,L={},N={},T=[],R=N.hasOwnProperty,j=0,z={attributes:L,define:function(e,t){e.indexOf("-")<0?(e in N||(j=T.push(e)),N[e]=t):L[e]=t},invoke:function(e,t){for(var n=0;n<j;n++){var r=T[n];if(R.call(e,r))return N[r](e[r],t)}}},P=Array.isArray||(_=($={}.toString).call([]),function(e){return $.call(e)===_}),O=(S=e,E="fragment",A="content"in D(C="template")?function(e){var t=D(C);return t.innerHTML=e,t.content}:function(e){var t,n=D(E),r=D(C);return I(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=D(E),n=D("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",I(t,n.firstChild.childNodes),t}:A)(e)});function I(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function D(e){return e===E?S.createDocumentFragment():S.createElementNS("http://www.w3.org/1999/xhtml",e)}var q,M,B,F,U,W,H,G,V,Z=(M="appendChild",B="cloneNode",F="createTextNode",W=(U="importNode")in(q=e),(H=q.createDocumentFragment())[M](q[F]("g")),H[M](q[F]("")),(W?q[U](H,!0):H[B](!0)).childNodes.length<2?function e(t,n){for(var r=t[B](),o=t.childNodes||[],i=o.length,s=0;n&&s<i;s++)r[M](e(o[s],n));return r}:W?q[U]:function(e,t){return e[B](!!t)}),K="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},J="-"+Math.random().toFixed(6)+"%",X=!1;try{G=e.createElement("template"),V="tabindex","content"in G&&(G.innerHTML="<p "+V+'="'+J+'"></p>',G.content.childNodes[0].getAttribute(V)==J)||(J="_dt: "+J.slice(1,-1)+";",X=!0)}catch(u){}var Y="\x3c!--"+J+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",ie="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",se=new RegExp(oe+re+ie+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+ie+"*)(["+te+"]*/>)","g"),le=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+Y+"\\2","gi");function ce(e,t,n,r){return"<"+t+n.replace(le,ue)+r}function ue(e,t,n){return t+(n||'"')+J+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var pe=X?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function fe(t,n,r,o){for(var i=t.childNodes,s=i.length,a=0;a<s;){var l=i[a];switch(l.nodeType){case 1:var c=o.concat(a);!function(t,n,r,o){for(var i,s=t.attributes,a=[],l=[],c=pe(s,r),u=c.length,d=0;d<u;){var p=c[d++],f=p.value===J;if(f||1<(i=p.value.split(Y)).length){var h=p.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(f?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=s[m]||s[m.toLowerCase()];if(f)n.push(he(g,o,m,null));else{for(var b=i.length-2;b--;)r.shift();n.push(he(g,o,m,i))}}l.push(p)}}for(var w=((d=0)<(u=l.length)&&X&&!("ownerSVGElement"in t));d<u;){var y=l[d++];w&&(y.value=""),t.removeAttribute(y.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=s.length,d=0;d<u;)k.setAttributeNode(s[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(l,n,r,c),fe(l,n,r,c);break;case 8:var u=l.textContent;if(u===J)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:l,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(l),a--,s--}break;case 3:Q.test(t.nodeName)&&K.call(l.textContent)===Y&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function we(e,t){var n=(e.convert||function(e){return e.join(Y).replace(ae,de).replace(se,ce)})(t),r=e.transform;r&&(n=r(n));var o=O(n,e.type);ve(o);var i=[];return fe(o,i,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=i.length,s=0,a=0;s<o;){var l=i[s++],c=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,l.path);switch(l.type){case"any":r.push({fn:e.any(c,[]),sparse:!1});break;case"attr":var u=l.sparse,d=e.attribute(c,l.name,l.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(c),sparse:!1}),c.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var i=1,s=1;i<e;){var a=r[i-s];if(a.sparse){var l=a.values,c=l[0],u=1,d=l.length;for(s+=d-2;u<d;)c+=arguments[i++]+l[u++];a.fn(c)}else a.fn(arguments[i++])}return n}}}}var ye=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===K.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),Se(n,!0)}(e,t):Se(e.style,!1)});function _e(e,t,n){return t+"-"+n.toLowerCase()}function Se(e,t){var n,r;return function(o){var i,s,a,l;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(s in r)s in o||(e[s]="")}else t?e.value="":e.cssText="";for(s in i=t?{}:e,o)a="number"!=typeof(l=o[s])||ke.test(s)?l:l+"px",!t&&/^--/.test(s)?i.setProperty(s,a):i[s]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,_e),":",e[t],";");return n.join("")}(r=i):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ee,Ce,Ae=(Ee=[].slice,(Ce=Le.prototype).ELEMENT_NODE=1,Ce.nodeType=111,Ce.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ce.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,i=r.length;o<i;o++)t.appendChild(r[o]);return t},Le);function Le(e){var t=this.childNodes=Ee.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Ne(e){return{html:e}}function Te(e,t){switch(e.nodeType){case Be:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Te(e.render(),t);default:return e}}function Re(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Ne).then(t):Promise.resolve(z.invoke(e,t)).then(t)}function je(e){return null!=e&&"then"in e}var ze,Pe,Oe,Ie,De,qe="ownerSVGElement",Me=v.prototype.nodeType,Be=Ae.prototype.nodeType,Fe=(Pe=(ze={Event:b,WeakSet:u}).Event,Oe=ze.WeakSet,Ie=!0,De=null,function(e){return Ie&&(Ie=!Ie,De=new Oe,function(e){var t=new Oe,n=new Oe;try{new MutationObserver(s).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],i=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){s(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){i({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){i({addedNodes:[e.target],removedNodes:[]})}),!0)}function s(e){for(var r,o=e.length,i=0;i<o;i++)a((r=e[i]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,i=new Pe(t),s=e.length,a=0;a<s;1===(o=e[a++]).nodeType&&function e(t,n,r,o,i){De.has(t)&&!o.has(t)&&(i.delete(t),o.add(t),t.dispatchEvent(n));for(var s=t.children||[],a=s.length,l=0;l<a;e(s[l++],n,r,o,i));}(o,i,t,n,r));}}(e.ownerDocument)),De.add(e),e}),Ue=/^(?:form|list)$/i,We=[].slice;function He(t){return this.type=t,function(t){var n=ye,r=ve;return function(o){var i,s,a;return n!==o&&(i=t,s=n=o,a=be.get(s)||be.set(s,we(i,s)),r=a.updates(Z.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ge=!(He.prototype={attribute:function(e,t,n){var r,o=qe in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return c=e,u=t.slice(1),o?function(e){try{c[u]=e}catch(t){c.setAttribute(u,e)}}:function(e){c[u]=e};if("?"===t.slice(0,1))return s=e,a=t.slice(1),function(e){l!==!!e&&((l=!!e)?s.setAttribute(a,""):s.removeAttribute(a))};if(/^on/.test(t)){var i=t.slice(2);return"connected"===i||"disconnected"===i?Fe(e):t.toLowerCase()in e&&(i=i.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(i,r,!1),(r=t)&&e.addEventListener(i,t,!1))}}if("data"===t||!o&&t in e&&!Ue.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in z.attributes)return function(n){var o=z.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var s,a,l,c,u,d=!1,p=n.cloneNode(!0);return function(t){r!==t&&(r=t,p.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(p)),p.value=t):(p.value=t,d||(d=!0,e.setAttributeNode(p)))))}},any:function(e,t){var n,r={node:Te,before:e},o=qe in e?"svg":"html",i=!1;return function s(a){switch(typeof a){case"string":case"number":case"boolean":i?n!==a&&(n=a,t[0].textContent=a):(i=!0,n=a,t=h(e.parentNode,t,[(l=a,e.ownerDocument.createTextNode(l))],r));break;case"function":s(a(e));break;case"object":case"undefined":if(null==a){i=!1,t=h(e.parentNode,t,[],r);break}default:if(i=!1,P(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":s({html:a});break;case"object":if(P(a[0])&&(a=a.concat.apply([],a)),je(a[0])){Promise.all(a).then(s);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?We.call(a.childNodes):[a],r):je(a)?a.then(s):"placeholder"in a?Re(a,s):"text"in a?s(String(a.text)):"any"in a?s(a.any):"html"in a?t=h(e.parentNode,t,We.call(O([].concat(a.html).join(""),o).childNodes),r):s("length"in a?We.call(a):z.invoke(a,s))}var l}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?je(r)?r.then(n):"placeholder"in r?Re(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?We.call(r).join(""):z.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,i,s,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),l=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||l?(o={},i=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=l?i:(s=new n,function(e){return s.get(e)||(n=i(t=e),s.set(t,n),n);var t,n})):Ge=!0,Ze(t)};function Ze(e){return Ge?e:Ve(e)}function Ke(e){for(var t=arguments.length,n=[Ze(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Je=new n,Xe=function(e){var t,n,r;return function(){var o=Ke.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Ye=function(e,t){var n=t.indexOf(":"),r=Je.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Je.set(e,r={}),r[o]||(r[o]=Xe(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Ae(t):e},et=new n;function tt(){var e=et.get(this),t=Ke.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(qe in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,it,st=z.define,at=He.prototype;function lt(e){return arguments.length<2?null==e?Xe("html"):"string"==typeof e?lt.wire(null,e):"raw"in e?Xe("html")(e):"nodeType"in e?lt.bind(e):Ye(e,"html"):("raw"in e?Xe("html"):lt.wire).apply(null,arguments)}return lt.Component=v,lt.bind=function(e){return tt.bind(e)},lt.define=st,lt.diff=h,(lt.hyper=lt).observe=Fe,lt.tagger=at,lt.wire=function(e,t){return null==e?Xe(t||"html"):Ye(e,t||"html")},lt._={WeakMap:n,WeakSet:u},nt=Xe,rt=new n,ot=Object.create,it=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var i,s,a,l=t.get(e)||it(e,t);switch(typeof o){case"object":case"function":var c=l.w||(l.w=new n);return c.get(o)||(i=c,s=o,a=new e(r),i.set(s,a),a);default:var u=l.p||(l.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new y,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),lt}(document); -/*! (c) Andrea Giammarchi (ISC) */const Le=$,Ne=Ae,Te=Ee,Re=Ce,je=De({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}});function ze(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Pe(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function Oe(e=[],t=(e=>e),n=i){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(je.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=je.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function Ie(e){return e.trim().replace(/\s+/g," ")}function De(e,t=i){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function qe(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){et(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}function Me(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function Be(e){const t=new Set,n="ltNodefault"in e.dataset?"":Ie(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>Ie(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(Ie(e)))}return[...t]}function Fe(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function Ue(e,t){const n=t.closest(".informative, .note, .issue, .example, .ednote, .practice, .introductory");let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function We(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function He(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function Ge(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class Ve extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function Ze(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>Fe(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),Ke(t),t}function Ke(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...Je(t)])e.remove()}function*Je(e){for(;e.nextNode();)yield e.currentNode}class Xe extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class Ye extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||Me(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:i,title:s,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:i,title:s,details:a,stack:n}}}function Qe(e,t,n={}){const r={...n,isWarning:!1};rt("error",new Ye(e,t,r))}function et(e,t,n={}){const r={...n,isWarning:!0};rt("warn",new Ye(e,t,r))}const tt="core/pubsubhub",nt=new Map;function rt(e,...t){if(!nt.has(e))return;if(Array.from(nt.get(e)).forEach(e=>{try{e(...t)}catch(t){Qe(`Error when calling function ${e.name}.`,tt,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function ot(e,t,n={once:!1}){return n.once?ot(e,(function n(...r){!function({topic:e,cb:t}){const n=nt.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(nt.has(e)?nt.get(e).add(t):nt.set(e,new Set([t])),{topic:e,cb:t})}n(tt,{sub:ot});const it=["githubToken","githubUser"];class st{constructor(){this._respecDonePromise=new Promise(e=>{ot("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],ot("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),ot("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}}const at="core/post-process";const lt="core/pre-process";const ct="core/base-runner";var ut=Object.freeze({__proto__:null,name:ct,runAll:async function(e){!function(){const e=new st;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(et("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),rt("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),ot("amend-user-config",n),ot("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of it)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),rt("amend-user-config",r)}(respecConfig),performance.mark(ct+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||Qe("Every item in `preProcess` must be a JS function.",lt),t}).map(async t=>{try{return await t(e,document)}catch(e){Qe(`Function ${t.name} threw an error during \`preProcess\`.`,lt,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const i=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(i),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},rt("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||Qe("Every item in `postProcess` must be a JS function.",at),t}).map(async t=>{try{return await t(e,document)}catch(e){Qe(`Function ${t.name} threw an error during \`postProcess\`.`,at,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),rt("end-all"),Pe(document),performance.mark(ct+"-end"),performance.measure(ct,ct+"-start",ct+"-end")}});var dt=String.raw`.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0} +window.respecVersion="26.5.0",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return ft})),Promise.resolve().then((function(){return Ht})),Promise.resolve().then((function(){return Gt})),Promise.resolve().then((function(){return s})),Promise.resolve().then((function(){return qn})),Promise.resolve().then((function(){return Fn})),Promise.resolve().then((function(){return Vn})),Promise.resolve().then((function(){return Kn})),Promise.resolve().then((function(){return tr})),Promise.resolve().then((function(){return or})),Promise.resolve().then((function(){return Ct})),Promise.resolve().then((function(){return gt})),Promise.resolve().then((function(){return ir})),Promise.resolve().then((function(){return co})),Promise.resolve().then((function(){return fo})),Promise.resolve().then((function(){return ho})),Promise.resolve().then((function(){return wo})),Promise.resolve().then((function(){return $o})),Promise.resolve().then((function(){return Ao})),Promise.resolve().then((function(){return To})),Promise.resolve().then((function(){return Tr})),Promise.resolve().then((function(){return Jo})),Promise.resolve().then((function(){return Bo})),Promise.resolve().then((function(){return Fr})),Promise.resolve().then((function(){return Yo})),Promise.resolve().then((function(){return Qo})),Promise.resolve().then((function(){return li})),Promise.resolve().then((function(){return ui})),Promise.resolve().then((function(){return di})),Promise.resolve().then((function(){return pi})),Promise.resolve().then((function(){return vi})),Promise.resolve().then((function(){return _i})),Promise.resolve().then((function(){return Ni})),Promise.resolve().then((function(){return Ti})),Promise.resolve().then((function(){return Di})),Promise.resolve().then((function(){return Hi})),Promise.resolve().then((function(){return Ji})),Promise.resolve().then((function(){return ns})),Promise.resolve().then((function(){return is})),Promise.resolve().then((function(){return as})),Promise.resolve().then((function(){return hs})),Promise.resolve().then((function(){return fn}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},i=r.lang;var s=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:i,run:function(e){e.l10n=o[i]||o.en}});let a,l;const c=new WeakMap,u=new WeakMap,d=new WeakMap,p=new WeakMap,f=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(l||(l=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(c.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",i),e.removeEventListener("abort",i)},o=()=>{t(),r()},i=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",i),e.addEventListener("abort",i)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",i)},o=()=>{t(b(e.result)),r()},i=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",i)});return t.then(t=>{t instanceof IDBCursor&&c.set(t,e)}).catch(()=>{}),f.set(t,e),t}(e);if(p.has(e))return p.get(e);const t=g(e);return t!==e&&(p.set(e,t),f.set(t,e)),t}const w=e=>f.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const i=async function(e,...t){const i=this.transaction(e,o?"readwrite":"readonly");let s=i.store;return r&&(s=s.index(t.shift())),(await Promise.all([s[n](...t),o&&i.done]))[0]};return k.set(t,i),i}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:i}={}){const s=indexedDB.open(e,t),a=b(s);return r&&s.addEventListener("upgradeneeded",e=>{r(b(s.result),e.oldVersion,e.newVersion,b(s.transaction))}),n&&s.addEventListener("blocked",()=>n()),a.then(e=>{i&&e.addEventListener("close",()=>i()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});var _,S=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(_={exports:{}},_.exports),_.exports);const E=/[&<>"']/,C=/[&<>"']/g,A=/[<>"']|&(?!#?\w+;)/,L=/[<>"']|&(?!#?\w+;)/g,N={"&":"&","<":"<",">":">",'"':""","'":"'"},T=e=>N[e];const R=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function j(e){return e.replace(R,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const z=/(^|[^\[])\^/g;const P=/[^\w:]/g,O=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const I={},D=/^[^:]+:\/*[^/]*$/,q=/^([^:]+:)[\s\S]*$/,M=/^([^:]+:\/*[^/]*)[\s\S]*$/;function B(e,t){I[" "+e]||(D.test(e)?I[" "+e]=e+"/":I[" "+e]=F(e,"/",!0));const n=-1===(e=I[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(q,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(M,"$1")+t:e+t}function F(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const i=e.charAt(r-o-1);if(i!==t||n){if(i===t||!n)break;o++}else o++}return e.substr(0,r-o)}var U={escape:function(e,t){if(t){if(E.test(e))return e.replace(C,T)}else if(A.test(e))return e.replace(L,T);return e},unescape:j,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(z,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(j(n)).replace(P,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!O.test(n)&&(n=B(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:B,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:F,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:W}=S,{rtrim:H,splitCells:G,escape:V,findClosingBracket:Z}=U;function K(e,t,n){const r=t.href,o=t.title?V(t.title):null,i=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:i}:{type:"image",raw:n,href:r,title:o,text:V(i)}}var J=class{constructor(e){this.options=e||W}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:H(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=H(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:G(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=G(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},i=t[0].match(this.rules.block.item);let s,a,l,c,u,d,p,f,h,m=!1,g=i.length;l=this.rules.block.listItemStart.exec(i[0]);for(let t=0;t<g;t++){if(s=i[t],e=s,this.options.pedantic||(h=s.match(new RegExp("\\n\\s*\\n {0,"+(l[0].length-1)+"}\\S")),h&&(u=s.length-h.index+i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),s=s.substring(0,h.index),e=s,g=t+1)),t!==g-1){if(c=this.rules.block.listItemStart.exec(i[t+1]),this.options.pedantic?c[1].length>l[1].length:c[1].length>=l[0].length||c[1].length>3){i.splice(t,2,i[t]+(!this.options.pedantic&&c[1].length<l[0].length&&!i[t].match(/\n$/)?"":"\n")+i[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?c[2][c[2].length-1]!==n[n.length-1]:r===(1===c[2].length))&&(u=i.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),l=c}a=s.length,s=s.replace(/^ *([*+-]|\d+[.)]) ?/,""),~s.indexOf("\n ")&&(a-=s.length,s=this.options.pedantic?s.replace(/^ {1,4}/gm,""):s.replace(new RegExp("^ {1,"+a+"}","gm"),"")),s=H(s,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(p=/^\[[ xX]\] /.test(s),f=void 0,p&&(f=" "!==s[1],s=s.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:p,checked:f,loose:d,text:s})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):V(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:G(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=G(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:V(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=H(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=Z(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),K(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return K(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,i,s=n,a=0;const l="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=l.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(i=o.length,r[3]||r[4])s+=i;else if(!((r[5]||r[6])&&n%3)||(n+i)%3){if(s-=i,!(s>0)){if(s+a-i<=0&&!t.slice(l.lastIndex).match(l)&&(i=Math.min(i,i+s+a)),Math.min(n,i)%2)return{type:"em",raw:e.slice(0,n+r.index+i+1),text:e.slice(1,n+r.index+i)};if(Math.min(n,i)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+i+1),text:e.slice(2,n+r.index+i-1)}}}else a+=i}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=V(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=V(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=V(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=V(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=V(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):V(r[0]):r[0]:V(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:X,edit:Y,merge:Q}=U,ee={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:X,table:X,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ee.def=Y(ee.def).replace("label",ee._label).replace("title",ee._title).getRegex(),ee.bullet=/(?:[*+-]|\d{1,9}[.)])/,ee.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ee.item=Y(ee.item,"gm").replace(/bull/g,ee.bullet).getRegex(),ee.listItemStart=Y(/^( *)(bull) */).replace("bull",ee.bullet).getRegex(),ee.list=Y(ee.list).replace(/bull/g,ee.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ee.def.source+")").getRegex(),ee._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ee._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ee.html=Y(ee.html,"i").replace("comment",ee._comment).replace("tag",ee._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ee.paragraph=Y(ee._paragraph).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.blockquote=Y(ee.blockquote).replace("paragraph",ee.paragraph).getRegex(),ee.normal=Q({},ee),ee.gfm=Q({},ee.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ee.gfm.nptable=Y(ee.gfm.nptable).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.gfm.table=Y(ee.gfm.table).replace("hr",ee.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ee._tag).getRegex(),ee.pedantic=Q({},ee.normal,{html:Y("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ee._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:X,paragraph:Y(ee.normal._paragraph).replace("hr",ee.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ee.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const te={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:X,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:X,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};te.punctuation=Y(te.punctuation).replace(/punctuation/g,te._punctuation).getRegex(),te.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,te.escapedEmSt=/\\\*|\\_/g,te._comment=Y(ee._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),te.emStrong.lDelim=Y(te.emStrong.lDelim).replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimAst=Y(te.emStrong.rDelimAst,"g").replace(/punct/g,te._punctuation).getRegex(),te.emStrong.rDelimUnd=Y(te.emStrong.rDelimUnd,"g").replace(/punct/g,te._punctuation).getRegex(),te._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,te._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,te._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,te.autolink=Y(te.autolink).replace("scheme",te._scheme).replace("email",te._email).getRegex(),te._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,te.tag=Y(te.tag).replace("comment",te._comment).replace("attribute",te._attribute).getRegex(),te._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,te._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,te._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,te.link=Y(te.link).replace("label",te._label).replace("href",te._href).replace("title",te._title).getRegex(),te.reflink=Y(te.reflink).replace("label",te._label).getRegex(),te.reflinkSearch=Y(te.reflinkSearch,"g").replace("reflink",te.reflink).replace("nolink",te.nolink).getRegex(),te.normal=Q({},te),te.pedantic=Q({},te.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:Y(/^!?\[(label)\]\((.*?)\)/).replace("label",te._label).getRegex(),reflink:Y(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",te._label).getRegex()}),te.gfm=Q({},te.normal,{escape:Y(te.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),te.gfm.url=Y(te.gfm.url,"i").replace("email",te.gfm._extended_email).getRegex(),te.breaks=Q({},te.gfm,{br:Y(te.br).replace("{2,}","*").getRegex(),text:Y(te.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var ne={block:ee,inline:te};const{defaults:re}=S,{block:oe,inline:ie}=ne,{repeatString:se}=U;function ae(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function le(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var ce=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||re,this.options.tokenizer=this.options.tokenizer||new J,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:oe.normal,inline:ie.normal};this.options.pedantic?(t.block=oe.pedantic,t.inline=ie.pedantic):this.options.gfm&&(t.block=oe.gfm,this.options.breaks?t.inline=ie.breaks:t.inline=ie.gfm),this.tokenizer.rules=t}static get rules(){return{block:oe,inline:ie}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,i,s;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"paragraph"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),i=r.items.length,o=0;o<i;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,i,s;const a=e.length;for(t=0;t<a;t++)switch(s=e[t],s.type){case"paragraph":case"text":case"heading":s.tokens=[],this.inlineTokens(s.text,s.tokens);break;case"table":for(s.tokens={header:[],cells:[]},o=s.header.length,n=0;n<o;n++)s.tokens.header[n]=[],this.inlineTokens(s.header[n],s.tokens.header[n]);for(o=s.cells.length,n=0;n<o;n++)for(i=s.cells[n],s.tokens.cells[n]=[],r=0;r<i.length;r++)s.tokens.cells[n][r]=[],this.inlineTokens(i[r],s.tokens.cells[n][r]);break;case"blockquote":this.inline(s.tokens);break;case"list":for(o=s.items.length,n=0;n<o;n++)this.inline(s.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,i,s,a,l,c=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(s=this.tokenizer.rules.inline.reflinkSearch.exec(c));)e.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(s=this.tokenizer.rules.inline.blockSkip.exec(c));)c=c.slice(0,s.index)+"["+se("a",s[0].length-2)+"]"+c.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(s=this.tokenizer.rules.inline.escapedEmSt.exec(c));)c=c.slice(0,s.index)+"++"+c.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(l=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const i=t[t.length-1];i&&"text"===o.type&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,c,l))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,le))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,le))){if(o=this.tokenizer.inlineText(e,r,ae))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(l=o.raw.slice(-1)),a=!0,i=t[t.length-1],i&&"text"===i.type?(i.raw+=o.raw,i.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:ue}=S,{cleanUrl:de,escape:pe}=U;var fe=class{constructor(e){this.options=e||ue}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+pe(r,!0)+'">'+(n?e:pe(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:pe(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+pe(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=de(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},he=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},me=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:ge}=S,{unescape:be}=U;var we=class e{constructor(e){this.options=e||ge,this.options.renderer=this.options.renderer||new fe,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new he,this.slugger=new me}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,i,s,a,l,c,u,d,p,f,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,be(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(c="",l="",i=d.header.length,r=0;r<i;r++)l+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(c+=this.renderer.tablerow(l),u="",i=d.cells.length,r=0;r<i;r++){for(a=d.tokens.cells[r],l="",s=a.length,o=0;o<s;o++)l+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(l)}v+=this.renderer.table(c,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(p=d.ordered,f=d.start,h=d.loose,i=d.items.length,u="",r=0;r<i;r++)g=d.items[r],b=g.checked,w=g.task,m="",g.task&&(y=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,p,f);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const i=e.length;for(n=0;n<i;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:ye,checkSanitizeDeprecation:ve,escape:ke}=U,{getDefaults:xe,changeDefaults:$e,defaults:_e}=S;function Se(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=ye({},Se.defaults,t||{}),ve(t),n){const r=t.highlight;let o;try{o=ce.lex(e,t)}catch(e){return n(e)}const i=function(e){let i;if(!e)try{i=we.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,i)};if(!r||r.length<3)return i();if(delete t.highlight,!o.length)return i();let s=0;return Se.walkTokens(o,(function(e){"code"===e.type&&(s++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return i(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),s--,0===s&&i()}))},0))})),void(0===s&&i())}try{const n=ce.lex(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}}Se.options=Se.setOptions=function(e){return ye(Se.defaults,e),$e(Se.defaults),Se},Se.getDefaults=xe,Se.defaults=_e,Se.use=function(e){const t=ye({},e);if(e.renderer){const n=Se.defaults.renderer||new fe;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let i=e.renderer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.renderer=n}if(e.tokenizer){const n=Se.defaults.tokenizer||new J;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let i=e.tokenizer[t].apply(n,o);return!1===i&&(i=r.apply(n,o)),i}}t.tokenizer=n}if(e.walkTokens){const n=Se.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Se.setOptions(t)},Se.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Se.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Se.walkTokens(n,t);break;case"list":Se.walkTokens(n.items,t);break;default:n.tokens&&Se.walkTokens(n.tokens,t)}},Se.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=ye({},Se.defaults,t||{}),ve(t);try{const n=ce.lexInline(e,t);return t.walkTokens&&Se.walkTokens(n,t.walkTokens),we.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+ke(e.message+"",!0)+"</pre>";throw e}},Se.Parser=we,Se.parser=we.parse,Se.Renderer=fe,Se.TextRenderer=he,Se.Lexer=ce,Se.lexer=ce.lex,Se.Tokenizer=J,Se.Slugger=me,Se.parse=Se;var Ee=Se;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ce=function(e){var t={exports:{}};return e(t,t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function i(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function s(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function l(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return s(""===n?e[r-1]:n,o)}))}function c(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var i=r[o];if(i[0].test(t))return l(t,i)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?s(r,o):e.hasOwnProperty(o)?s(r,e[o]):c(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&c(o,o,n)===o}}function p(e,t,n){return(n?t+" ":"")+(1===t?p.singular(e):p.plural(e))}return p.plural=u(o,r,e),p.isPlural=d(o,r,e),p.singular=u(r,o,t),p.isSingular=d(r,o,t),p.addPluralRule=function(t,n){e.push([i(t),n])},p.addSingularRule=function(e,n){t.push([i(e),n])},p.addUncountableRule=function(e){"string"!=typeof e?(p.addPluralRule(e,"$0"),p.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},p.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return p.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return p.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return p.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(p.addUncountableRule),p}))})),Ae=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=i.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},i;function i(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(s,this)}function s(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,i){for(var s=("selectedIndex"in t),a=s;r<o;){var l,c=e(n[r],1);t.insertBefore(c,i),s&&a&&c.selected&&(a=!a,l=t.selectedIndex,t.selectedIndex=l<0?r:d.call(t.querySelectorAll("option"),c)),r++}}function i(e,t){return e==t}function s(e){return e}function a(e,t,n,r,o,i,s){var a=i-o;if(a<1)return-1;for(;a<=n-t;){for(var l=t,c=o;l<n&&c<i&&s(e[l],r[c]);)l++,c++;if(c===i)return t;t=l+1}return-1}function l(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function c(e,t,n,r){for(;n<r;)f(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,p=function(e,t,n){for(var r=1,o=t;r<o;){var i=(r+o)/2>>>0;n<e[i]?o=i:r=1+i}return r},f=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||i,d=r.node||s,f=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,w=0;g<m&&w<b&&u(t[g],n[w]);)g++,w++;for(;g<m&&w<b&&u(t[m-1],n[b-1]);)m--,b--;var y=g===m,v=w===b;if(y&&v)return n;if(y&&w<b)return o(d,e,n,w,b,l(d,t,g,h,f)),n;if(v&&g<m)return c(d,t,g,m),n;var k=m-g,x=b-w,$=-1;if(k<x){if(-1<($=a(n,w,b,t,g,m,u)))return o(d,e,n,w,$,d(t[g],0)),o(d,e,n,$+k,b,l(d,t,m,h,f)),n}else if(x<k&&-1<($=a(t,g,m,n,w,b,u)))return c(d,t,g,$),c(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,w,b,d(t[g],0)),c(d,t,g,m)):k==x&&function(e,t,n,r,o,i){for(;r<o&&i(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,w,b,l(d,t,m,h,f)):function(e,t,n,r,i,s,a,l,u,d,f,h,m){!function(e,t,n,r,i,s,a,l,u){for(var d=[],p=e.length,f=a,h=0;h<p;)switch(e[h++]){case 0:i++,f++;break;case 1:d.push(r[i]),o(t,n,r,i++,i,f<l?t(s[f],0):u);break;case-1:f++}for(h=0;h<p;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(s[a])?a++:c(t,s,a++,a)}}(function(e,t,n,r,o,i,s){var a,l,c,u,d,p,f=n+i,h=[];e:for(b=0;b<=f;b++){if(50<b)return null;for(p=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(l=(c=a===-b||a!==b&&u[p+a-1]<u[p+a+1]?u[p+a+1]:u[p+a-1]+1)-a;c<i&&l<n&&s(r[o+c],e[t+l]);)c++,l++;if(c===i&&l===n)break e;d[b+a]=c}}for(var m=Array(b/2+f/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<c&&0<l&&s(r[o+c-1],e[t+l-1]);)m[g--]=0,c--,l--;if(!b)break;p=b-1,u=b?h[b-1]:[0,0],(a=c-l)==-b||a!==b&&u[p+a-1]<u[p+a+1]?(l--,m[g--]=1):(c--,m[g--]=-1)}return m}(n,r,s,a,l,d,h)||function(e,t,n,r,o,i,s,a){var l=0,c=r<a?r:a,u=Array(c++),d=Array(c);d[0]=-1;for(var f=1;f<c;f++)d[f]=s;for(var h=o.slice(i,s),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(l=p(d,c,g=b+i))&&(d[l]=g,u[l]={newi:m,oldi:g,prev:u[l-1]})}for(l=--c,--s;d[l]>s;)--l;c=a+r-l;var w=Array(c),y=u[l];for(--n;y;){for(var v=y.newi,k=y.oldi;v<n;)w[--c]=1,--n;for(;k<s;)w[--c]=-1,--s;w[--c]=0,--n,--s,y=y.prev}for(;t<=n;)w[--c]=1,--n;for(;i<=s;)w[--c]=-1,--s;return w}(n,r,i,s,a,l,u,d),e,t,n,r,a,l,f,m)}(d,e,n,w,b,x,t,g,m,k,h,u,f),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,w={};try{w.Map=Map}catch(u){w.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var i=r(o);return i&&(t.splice(e,1),n.splice(e,1)),i},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,i){return n[r(o)?e:t.push(o)-1]=i,this}};function r(n){return-1<(e=t.indexOf(n))}}}var y=w.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,_,S,E,C,A,L={},N={},T=[],R=N.hasOwnProperty,j=0,z={attributes:L,define:function(e,t){e.indexOf("-")<0?(e in N||(j=T.push(e)),N[e]=t):L[e]=t},invoke:function(e,t){for(var n=0;n<j;n++){var r=T[n];if(R.call(e,r))return N[r](e[r],t)}}},P=Array.isArray||(_=($={}.toString).call([]),function(e){return $.call(e)===_}),O=(S=e,E="fragment",A="content"in D(C="template")?function(e){var t=D(C);return t.innerHTML=e,t.content}:function(e){var t,n=D(E),r=D(C);return I(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=D(E),n=D("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",I(t,n.firstChild.childNodes),t}:A)(e)});function I(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function D(e){return e===E?S.createDocumentFragment():S.createElementNS("http://www.w3.org/1999/xhtml",e)}var q,M,B,F,U,W,H,G,V,Z=(M="appendChild",B="cloneNode",F="createTextNode",W=(U="importNode")in(q=e),(H=q.createDocumentFragment())[M](q[F]("g")),H[M](q[F]("")),(W?q[U](H,!0):H[B](!0)).childNodes.length<2?function e(t,n){for(var r=t[B](),o=t.childNodes||[],i=o.length,s=0;n&&s<i;s++)r[M](e(o[s],n));return r}:W?q[U]:function(e,t){return e[B](!!t)}),K="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},J="-"+Math.random().toFixed(6)+"%",X=!1;try{G=e.createElement("template"),V="tabindex","content"in G&&(G.innerHTML="<p "+V+'="'+J+'"></p>',G.content.childNodes[0].getAttribute(V)==J)||(J="_dt: "+J.slice(1,-1)+";",X=!0)}catch(u){}var Y="\x3c!--"+J+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",ie="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",se=new RegExp(oe+re+ie+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+ie+"*)(["+te+"]*/>)","g"),le=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+Y+"\\2","gi");function ce(e,t,n,r){return"<"+t+n.replace(le,ue)+r}function ue(e,t,n){return t+(n||'"')+J+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var pe=X?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function fe(t,n,r,o){for(var i=t.childNodes,s=i.length,a=0;a<s;){var l=i[a];switch(l.nodeType){case 1:var c=o.concat(a);!function(t,n,r,o){for(var i,s=t.attributes,a=[],l=[],c=pe(s,r),u=c.length,d=0;d<u;){var p=c[d++],f=p.value===J;if(f||1<(i=p.value.split(Y)).length){var h=p.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(f?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=s[m]||s[m.toLowerCase()];if(f)n.push(he(g,o,m,null));else{for(var b=i.length-2;b--;)r.shift();n.push(he(g,o,m,i))}}l.push(p)}}for(var w=((d=0)<(u=l.length)&&X&&!("ownerSVGElement"in t));d<u;){var y=l[d++];w&&(y.value=""),t.removeAttribute(y.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=s.length,d=0;d<u;)k.setAttributeNode(s[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(l,n,r,c),fe(l,n,r,c);break;case 8:var u=l.textContent;if(u===J)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:l,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(l),a--,s--}break;case 3:Q.test(t.nodeName)&&K.call(l.textContent)===Y&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function we(e,t){var n=(e.convert||function(e){return e.join(Y).replace(ae,de).replace(se,ce)})(t),r=e.transform;r&&(n=r(n));var o=O(n,e.type);ve(o);var i=[];return fe(o,i,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=i.length,s=0,a=0;s<o;){var l=i[s++],c=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,l.path);switch(l.type){case"any":r.push({fn:e.any(c,[]),sparse:!1});break;case"attr":var u=l.sparse,d=e.attribute(c,l.name,l.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(c),sparse:!1}),c.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var i=1,s=1;i<e;){var a=r[i-s];if(a.sparse){var l=a.values,c=l[0],u=1,d=l.length;for(s+=d-2;u<d;)c+=arguments[i++]+l[u++];a.fn(c)}else a.fn(arguments[i++])}return n}}}}var ye=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===K.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),Se(n,!0)}(e,t):Se(e.style,!1)});function _e(e,t,n){return t+"-"+n.toLowerCase()}function Se(e,t){var n,r;return function(o){var i,s,a,l;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(s in r)s in o||(e[s]="")}else t?e.value="":e.cssText="";for(s in i=t?{}:e,o)a="number"!=typeof(l=o[s])||ke.test(s)?l:l+"px",!t&&/^--/.test(s)?i.setProperty(s,a):i[s]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,_e),":",e[t],";");return n.join("")}(r=i):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ee,Ce,Ae=(Ee=[].slice,(Ce=Le.prototype).ELEMENT_NODE=1,Ce.nodeType=111,Ce.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ce.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,i=r.length;o<i;o++)t.appendChild(r[o]);return t},Le);function Le(e){var t=this.childNodes=Ee.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Ne(e){return{html:e}}function Te(e,t){switch(e.nodeType){case Be:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Te(e.render(),t);default:return e}}function Re(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Ne).then(t):Promise.resolve(z.invoke(e,t)).then(t)}function je(e){return null!=e&&"then"in e}var ze,Pe,Oe,Ie,De,qe="ownerSVGElement",Me=v.prototype.nodeType,Be=Ae.prototype.nodeType,Fe=(Pe=(ze={Event:b,WeakSet:u}).Event,Oe=ze.WeakSet,Ie=!0,De=null,function(e){return Ie&&(Ie=!Ie,De=new Oe,function(e){var t=new Oe,n=new Oe;try{new MutationObserver(s).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],i=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){s(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){i({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){i({addedNodes:[e.target],removedNodes:[]})}),!0)}function s(e){for(var r,o=e.length,i=0;i<o;i++)a((r=e[i]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,i=new Pe(t),s=e.length,a=0;a<s;1===(o=e[a++]).nodeType&&function e(t,n,r,o,i){De.has(t)&&!o.has(t)&&(i.delete(t),o.add(t),t.dispatchEvent(n));for(var s=t.children||[],a=s.length,l=0;l<a;e(s[l++],n,r,o,i));}(o,i,t,n,r));}}(e.ownerDocument)),De.add(e),e}),Ue=/^(?:form|list)$/i,We=[].slice;function He(t){return this.type=t,function(t){var n=ye,r=ve;return function(o){var i,s,a;return n!==o&&(i=t,s=n=o,a=be.get(s)||be.set(s,we(i,s)),r=a.updates(Z.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ge=!(He.prototype={attribute:function(e,t,n){var r,o=qe in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return c=e,u=t.slice(1),o?function(e){try{c[u]=e}catch(t){c.setAttribute(u,e)}}:function(e){c[u]=e};if("?"===t.slice(0,1))return s=e,a=t.slice(1),function(e){l!==!!e&&((l=!!e)?s.setAttribute(a,""):s.removeAttribute(a))};if(/^on/.test(t)){var i=t.slice(2);return"connected"===i||"disconnected"===i?Fe(e):t.toLowerCase()in e&&(i=i.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(i,r,!1),(r=t)&&e.addEventListener(i,t,!1))}}if("data"===t||!o&&t in e&&!Ue.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in z.attributes)return function(n){var o=z.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var s,a,l,c,u,d=!1,p=n.cloneNode(!0);return function(t){r!==t&&(r=t,p.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(p)),p.value=t):(p.value=t,d||(d=!0,e.setAttributeNode(p)))))}},any:function(e,t){var n,r={node:Te,before:e},o=qe in e?"svg":"html",i=!1;return function s(a){switch(typeof a){case"string":case"number":case"boolean":i?n!==a&&(n=a,t[0].textContent=a):(i=!0,n=a,t=h(e.parentNode,t,[(l=a,e.ownerDocument.createTextNode(l))],r));break;case"function":s(a(e));break;case"object":case"undefined":if(null==a){i=!1,t=h(e.parentNode,t,[],r);break}default:if(i=!1,P(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":s({html:a});break;case"object":if(P(a[0])&&(a=a.concat.apply([],a)),je(a[0])){Promise.all(a).then(s);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?We.call(a.childNodes):[a],r):je(a)?a.then(s):"placeholder"in a?Re(a,s):"text"in a?s(String(a.text)):"any"in a?s(a.any):"html"in a?t=h(e.parentNode,t,We.call(O([].concat(a.html).join(""),o).childNodes),r):s("length"in a?We.call(a):z.invoke(a,s))}var l}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?je(r)?r.then(n):"placeholder"in r?Re(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?We.call(r).join(""):z.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,i,s,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),l=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||l?(o={},i=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=l?i:(s=new n,function(e){return s.get(e)||(n=i(t=e),s.set(t,n),n);var t,n})):Ge=!0,Ze(t)};function Ze(e){return Ge?e:Ve(e)}function Ke(e){for(var t=arguments.length,n=[Ze(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Je=new n,Xe=function(e){var t,n,r;return function(){var o=Ke.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Ye=function(e,t){var n=t.indexOf(":"),r=Je.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Je.set(e,r={}),r[o]||(r[o]=Xe(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Ae(t):e},et=new n;function tt(){var e=et.get(this),t=Ke.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(qe in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,it,st=z.define,at=He.prototype;function lt(e){return arguments.length<2?null==e?Xe("html"):"string"==typeof e?lt.wire(null,e):"raw"in e?Xe("html")(e):"nodeType"in e?lt.bind(e):Ye(e,"html"):("raw"in e?Xe("html"):lt.wire).apply(null,arguments)}return lt.Component=v,lt.bind=function(e){return tt.bind(e)},lt.define=st,lt.diff=h,(lt.hyper=lt).observe=Fe,lt.tagger=at,lt.wire=function(e,t){return null==e?Xe(t||"html"):Ye(e,t||"html")},lt._={WeakMap:n,WeakSet:u},nt=Xe,rt=new n,ot=Object.create,it=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var i,s,a,l=t.get(e)||it(e,t);switch(typeof o){case"object":case"function":var c=l.w||(l.w=new n);return c.get(o)||(i=c,s=o,a=new e(r),i.set(s,a),a);default:var u=l.p||(l.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new y,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),lt}(document); +/*! (c) Andrea Giammarchi (ISC) */const Le=$,Ne=Ae,Te=Ee,Re=Ce,je=De({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}});function ze(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Pe(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function Oe(e=[],t=(e=>e),n=i){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(je.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=je.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function Ie(e){return e.trim().replace(/\s+/g," ")}function De(e,t=i){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function qe(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){et(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}function Me(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function Be(e){const t=new Set,n="ltNodefault"in e.dataset?"":Ie(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>Ie(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(Ie(e)))}return[...t]}function Fe(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function Ue(e,t){const n=t.closest(".informative, .note, .issue, .example, .ednote, .practice, .introductory");let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function We(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function He(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function Ge(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class Ve extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function Ze(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>Fe(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),Ke(t),t}function Ke(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...Je(t)])e.remove()}function*Je(e){for(;e.nextNode();)yield e.currentNode}class Xe extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class Ye extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||Me(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:i,title:s,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:i,title:s,details:a,stack:n}}}function Qe(e,t,n={}){const r={...n,isWarning:!1};rt("error",new Ye(e,t,r))}function et(e,t,n={}){const r={...n,isWarning:!0};rt("warn",new Ye(e,t,r))}const tt="core/pubsubhub",nt=new Map;function rt(e,...t){if(!nt.has(e))return;if(Array.from(nt.get(e)).forEach(e=>{try{e(...t)}catch(t){Qe(`Error when calling function ${e.name}.`,tt,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function ot(e,t,n={once:!1}){return n.once?ot(e,(function n(...r){!function({topic:e,cb:t}){const n=nt.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(nt.has(e)?nt.get(e).add(t):nt.set(e,new Set([t])),{topic:e,cb:t})}n(tt,{sub:ot});const it=["githubToken","githubUser"];const st=new Map([["text/html","html"],["application/xml","xml"]]);function at(e,t=document){const n=st.get(e);if(!n){const t=[...st.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=lt(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}function lt(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;Ke(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Pe(r);const o=e.createDocumentFragment(),i=e.querySelector("meta[name='viewport']");i&&t.firstChild!==i&&o.appendChild(i);let s=e.querySelector("meta[charset], meta[content*='charset=']");s||(s=Ne`<meta charset="utf-8" />`);o.appendChild(s);const a="ReSpec "+(window.respecVersion||"Developer Channel"),l=Ne` + <meta name="generator" content="${a}" /> + `;o.appendChild(l),t.prepend(o),rt("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}n("core/exporter",{rsDocToDataURL:at});class ct{constructor(){this._respecDonePromise=new Promise(e=>{ot("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],ot("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),ot("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}async toHTML(){return lt("html",document)}}const ut="core/post-process";const dt="core/pre-process";const pt="core/base-runner";var ft=Object.freeze({__proto__:null,name:pt,runAll:async function(e){!function(){const e=new ct;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(et("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),rt("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),ot("amend-user-config",n),ot("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of it)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),rt("amend-user-config",r)}(respecConfig),performance.mark(pt+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||Qe("Every item in `preProcess` must be a JS function.",dt),t}).map(async t=>{try{return await t(e,document)}catch(e){Qe(`Function ${t.name} threw an error during \`preProcess\`.`,dt,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const i=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(i),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},rt("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||Qe("Every item in `postProcess` must be a JS function.",ut),t}).map(async t=>{try{return await t(e,document)}catch(e){Qe(`Function ${t.name} threw an error during \`postProcess\`.`,ut,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),rt("end-all"),Pe(document),performance.mark(pt+"-end"),performance.measure(pt,pt+"-start",pt+"-end")}});var ht=String.raw`.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0} #respec-ui{position:fixed;display:flex;flex-direction:row-reverse;top:20px;right:20px;width:202px;text-align:right;z-index:9000} #respec-pill,.respec-info-button{background:#fff;height:2.5em;color:#787878;border:1px solid #ccc;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5)} .respec-info-button{border:none;opacity:.75;border-radius:2em;margin-right:1em;min-width:3.5em} @@ -53,32 +55,32 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e } .respec-iframe{width:100%;min-height:550px;height:100%;overflow:hidden;padding:0;margin:0;border:0} .respec-iframe:not(.ready){background:url(https://respec.org/xref/loader.gif) no-repeat center} -.respec-iframe+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}`;function pt(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var ft=Object.freeze({__proto__:null,name:"core/reindent",reindent:pt,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=pt(e.innerHTML)}});const ht=/>/gm,mt=/&/gm;class gt extends Te.Renderer{code(e,t,n){const{language:r,...o}=gt.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const i=super.code(e,r,n),{example:s,illegalExample:a}=o;if(!s&&!a)return i;const l=s||a,c=`${r} ${s?"example":"illegal-example"}`;return i.replace("<pre>",`<pre title="${l}" class="${c}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function bt(e){const t=pt(e).replace(ht,">").replace(mt,"&");return Te(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new gt})}function wt(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=bt(e.innerHTML)}class yt{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function vt(e,t){return function e(n){const r=new yt(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function kt(e){const t=vt(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const xt=($t="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll($t);return t.forEach(wt),Array.from(t)});var $t;var _t=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:bt,restructure:kt,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of xt(document.body))kt(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=Ge(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),wt(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const i=vt(o,document);o.append(r,i),document.body.replaceWith(o)}});function St(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=dt,e.classList.add("removeOnSave"),document.head.appendChild(e)}();const Et=Ne`<div id="respec-ui" class="removeOnSave" hidden></div>`,Ct=Ne`<ul +.respec-iframe+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}`;function mt(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var gt=Object.freeze({__proto__:null,name:"core/reindent",reindent:mt,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=mt(e.innerHTML)}});const bt=/>/gm,wt=/&/gm;class yt extends Te.Renderer{code(e,t,n){const{language:r,...o}=yt.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const i=super.code(e,r,n),{example:s,illegalExample:a}=o;if(!s&&!a)return i;const l=s||a,c=`${r} ${s?"example":"illegal-example"}`;return i.replace("<pre>",`<pre title="${l}" class="${c}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function vt(e){const t=mt(e).replace(bt,">").replace(wt,"&");return Te(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new yt})}function kt(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=vt(e.innerHTML)}class xt{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function $t(e,t){return function e(n){const r=new xt(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function _t(e){const t=$t(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const St=(Et="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll(Et);return t.forEach(kt),Array.from(t)});var Et;var Ct=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:vt,restructure:_t,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of St(document.body))_t(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=Ge(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),kt(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const i=$t(o,document);o.append(r,i),document.body.replaceWith(o)}});function At(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=ht,e.classList.add("removeOnSave"),document.head.appendChild(e)}();const Lt=Ne`<div id="respec-ui" class="removeOnSave" hidden></div>`,Nt=Ne`<ul id="respec-menu" role="menu" aria-labelledby="respec-pill" hidden -></ul>`,At=Ne`<button +></ul>`,Tt=Ne`<button class="close-button" - onclick=${()=>qt.closeModal()} + onclick=${()=>Ft.closeModal()} title="Close" > ❌ -</button>`;let Lt,Nt;window.addEventListener("load",()=>Ot(Ct));const Tt=[],Rt=[],jt={};ot("start-all",()=>document.body.prepend(Et),{once:!0}),ot("end-all",()=>document.body.prepend(Et),{once:!0});const zt=Ne`<button id="respec-pill" disabled>ReSpec</button>`;function Pt(){Ct.classList.toggle("respec-hidden"),Ct.classList.toggle("respec-visible"),Ct.hidden=!Ct.hidden}function Ot(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}Et.appendChild(zt),zt.addEventListener("click",e=>{e.stopPropagation(),zt.setAttribute("aria-expanded",String(Ct.hidden)),Pt(),Ct.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{Ct.hidden||Pt()}),Et.appendChild(Ct),Ct.addEventListener("keydown",e=>{"Escape"!==e.key||Ct.hidden||(zt.setAttribute("aria-expanded",String(Ct.hidden)),Pt(),zt.focus())});const It=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function Dt(e,t,n,r){t.push(e),jt.hasOwnProperty(n)||(jt[n]=function(e,t,n){const r=Ne`<button +</button>`;let Rt,jt;window.addEventListener("load",()=>qt(Nt));const zt=[],Pt=[],Ot={};ot("start-all",()=>document.body.prepend(Lt),{once:!0}),ot("end-all",()=>document.body.prepend(Lt),{once:!0});const It=Ne`<button id="respec-pill" disabled>ReSpec</button>`;function Dt(){Nt.classList.toggle("respec-hidden"),Nt.classList.toggle("respec-visible"),Nt.hidden=!Nt.hidden}function qt(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}Lt.appendChild(It),It.addEventListener("click",e=>{e.stopPropagation(),It.setAttribute("aria-expanded",String(Nt.hidden)),Dt(),Nt.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{Nt.hidden||Dt()}),Lt.appendChild(Nt),Nt.addEventListener("keydown",e=>{"Escape"!==e.key||Nt.hidden||(It.setAttribute("aria-expanded",String(Nt.hidden)),Dt(),It.focus())});const Mt=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function Bt(e,t,n,r){t.push(e),Ot.hasOwnProperty(n)||(Ot[n]=function(e,t,n){const r=Ne`<button id="${"respec-pill-"+e}" class="respec-info-button" - ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Ne`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(Mt(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}qt.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return St(r,o),r}(n,t,r),Et.appendChild(jt[n]));const o=jt[n];o.textContent=t.length;const i=1===t.length?Re.singular(r):r;St(o,new Map([["label",`${t.length} ${i}`]]))}St(zt,It);const qt={show(){try{Et.hidden=!1}catch(e){console.error(e)}},hide(){Et.hidden=!0},enable(){zt.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),i=Ne`<button id="${o}" class="respec-option"> + ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Ne`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(Ut(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}Ft.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return At(r,o),r}(n,t,r),Lt.appendChild(Ot[n]));const o=Ot[n];o.textContent=t.length;const i=1===t.length?Re.singular(r):r;At(o,new Map([["label",`${t.length} ${i}`]]))}At(It,Mt);const Ft={show(){try{Lt.hidden=!1}catch(e){console.error(e)}},hide(){Lt.hidden=!0},enable(){It.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),i=Ne`<button id="${o}" class="respec-option"> <span class="respec-cmd-icon" aria-hidden="true">${r}</span> ${e}… - </button>`,s=Ne`<li role="menuitem">${i}</li>`;return s.addEventListener("click",t),Ct.appendChild(s),i},error(e){Dt(e,Tt,"error","ReSpec Errors")},warning(e){Dt(e,Rt,"warning","ReSpec Warnings")},closeModal(e){Nt&&(Nt.classList.remove("respec-show-overlay"),Nt.classList.add("respec-hide-overlay"),Nt.addEventListener("transitionend",()=>{Nt.remove(),Nt=null})),e&&e.setAttribute("aria-expanded","false"),Lt&&(Lt.remove(),Lt=null,zt.focus())},freshModal(e,t,n){Lt&&Lt.remove(),Nt&&Nt.remove(),Nt=Ne`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";Lt=Ne`<div + </button>`,s=Ne`<li role="menuitem">${i}</li>`;return s.addEventListener("click",t),Nt.appendChild(s),i},error(e){Bt(e,zt,"error","ReSpec Errors")},warning(e){Bt(e,Pt,"warning","ReSpec Warnings")},closeModal(e){jt&&(jt.classList.remove("respec-show-overlay"),jt.classList.add("respec-hide-overlay"),jt.addEventListener("transitionend",()=>{jt.remove(),jt=null})),e&&e.setAttribute("aria-expanded","false"),Rt&&(Rt.remove(),Rt=null,It.focus())},freshModal(e,t,n){Rt&&Rt.remove(),jt&&jt.remove(),jt=Ne`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";Rt=Ne`<div id="${r}" class="respec-modal removeOnSave" role="dialog" aria-labelledby="${o}" > - ${At} + ${Tt} <h3 id="${o}">${e}</h3> <div class="inside">${t}</div> - </div>`;const i=new Map([["labelledby",o]]);St(Lt,i),document.body.append(Nt,Lt),Nt.addEventListener("click",()=>this.closeModal(n)),Nt.classList.toggle("respec-show-overlay"),Lt.hidden=!1,Ot(Lt)}};function Mt(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${Oe(e.elements.map(Bt))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return bt(`${t}${e.message}${n}${r}${o}`)}function Bt(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&qt.closeModal()}),window.respecUI=qt,ot("error",e=>qt.error(e)),ot("warn",e=>qt.warning(e));var Ft=Object.freeze({__proto__:null,name:"core/ui",ui:qt});var Ut=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const Wt=new WeakMap;class Ht{constructor(e,t){Wt.set(this,{name:e,lintingFunction:t})}get name(){return Wt.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return Wt.get(this).lintingFunction(e,t)}}const Gt="check-charset",Vt={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},Zt=i in Vt?i:"en";const Kt=new Ht(Gt,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:Gt,occurrences:n.length,...Vt[Zt]}})),Jt="check-internal-slots",Xt={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},Yt=i in Xt?i:"en";const Qt=new Ht(Jt,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:Jt,offendingElements:n,occurrences:n.length,...Xt[Yt]}})),en="check-punctuation",tn=[".",":","!","?"],nn={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${tn.map(e=>`"${e}"`).join(", ")}.`}},rn=i in nn?i:"en";const on=new Ht(en,(function(e,t){const n=new RegExp(`[${tn.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:en,offendingElements:r,occurrences:r.length,...nn[rn]}})),sn="core/linter",an=new WeakMap;const ln=new class{constructor(){an.set(this,{rules:new Set})}get rules(){return an.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...an.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...cn,...t},{description:r,help:o,howToFix:i,name:s,occurrences:a,offendingElements:l}=n,c=l.length?r:`${r} (Count: ${a})`;et(c,`${sn}/${s}`,{hint:`${i} ${o}`,elements:l})}(n.lint(e,t)));await n}},cn={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var un=Object.freeze({__proto__:null,name:sn,default:ln,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await ln.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const dn="local-refs-exist",pn={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},fn=i in pn?i:"en";const hn=new Ht(dn,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(mn);if(n.length)return{name:dn,offendingElements:n,occurrences:n.length,...pn[fn]}}));function mn(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const gn="no-headingless-sections",bn={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},wn=i in bn?i:"en",yn=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const vn=new Ht(gn,(function(e,t){const n=[...t.querySelectorAll("section")].filter(yn);if(n.length)return{name:gn,offendingElements:n,occurrences:n.length,...bn[wn]}})),kn="no-http-props",xn={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},$n=i in xn?i:"en";const _n=new Ht(kn,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:kn,occurrences:n.length,...xn[$n]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),Sn="no-unused-vars",En={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Cn=i in En?i:"en";const An=new Ht(Sn,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=Ie(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:Sn,offendingElements:n,occurrences:n.length,...En[Cn]}})),Ln="privsec-section",Nn={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},Tn=i in Nn?i:"en";const Rn=new Ht(Ln,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Ln,occurrences:1,...Nn[Tn]}}));ln.register(_n,vn,An,on,hn,Qt,Kt,Rn);const jn={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0};ln.register(Rn);const zn=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}],["cc-by-nd",{name:"Creative Commons Attribution-NoDerivatives 4.0 International Public License",short:"CC-BY-ND",url:"https://creativecommons.org/licenses/by-nd/4.0/legalcode.nl"}]]),Pn={lint:{"privsec-section":!0},doJsonLd:!0,license:"cc-by",specStatus:"GN-BASIS",logos:[{src:"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg",alt:"Geonovum",id:"Geonovum",height:67,width:132,url:"https://www.geonovum.nl/"}]};var On=Object.freeze({__proto__:null,name:"geonovum/defaults",run:function(e){const t=!1!==e.lint&&{...jn.lint,...Pn.lint,...e.lint};Object.assign(e,{...jn,...Pn,...e,lint:t}),Object.assign(e,function(e){return{isCCBY:"cc-by"===e.license,licenseInfo:zn.get(e.license),isBasic:"GN-BASIS"===e.specStatus,isRegular:"GN-BASIS"===e.specStatus}}(e))}});var In=String.raw`@keyframes pop{ + </div>`;const i=new Map([["labelledby",o]]);At(Rt,i),document.body.append(jt,Rt),jt.addEventListener("click",()=>this.closeModal(n)),jt.classList.toggle("respec-show-overlay"),Rt.hidden=!1,qt(Rt)}};function Ut(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${Oe(e.elements.map(Wt))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return vt(`${t}${e.message}${n}${r}${o}`)}function Wt(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&Ft.closeModal()}),window.respecUI=Ft,ot("error",e=>Ft.error(e)),ot("warn",e=>Ft.warning(e));var Ht=Object.freeze({__proto__:null,name:"core/ui",ui:Ft});var Gt=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const Vt=new WeakMap;class Zt{constructor(e,t){Vt.set(this,{name:e,lintingFunction:t})}get name(){return Vt.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return Vt.get(this).lintingFunction(e,t)}}const Kt="check-charset",Jt={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},Xt=i in Jt?i:"en";const Yt=new Zt(Kt,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:Kt,occurrences:n.length,...Jt[Xt]}})),Qt="check-internal-slots",en={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},tn=i in en?i:"en";const nn=new Zt(Qt,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:Qt,offendingElements:n,occurrences:n.length,...en[tn]}})),rn="check-punctuation",on=[".",":","!","?"],sn={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${on.map(e=>`"${e}"`).join(", ")}.`}},an=i in sn?i:"en";const ln=new Zt(rn,(function(e,t){const n=new RegExp(`[${on.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:rn,offendingElements:r,occurrences:r.length,...sn[an]}})),cn="core/linter",un=new WeakMap;const dn=new class{constructor(){un.set(this,{rules:new Set})}get rules(){return un.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...un.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...pn,...t},{description:r,help:o,howToFix:i,name:s,occurrences:a,offendingElements:l}=n,c=l.length?r:`${r} (Count: ${a})`;et(c,`${cn}/${s}`,{hint:`${i} ${o}`,elements:l})}(n.lint(e,t)));await n}},pn={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var fn=Object.freeze({__proto__:null,name:cn,default:dn,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await dn.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const hn="local-refs-exist",mn={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},gn=i in mn?i:"en";const bn=new Zt(hn,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(wn);if(n.length)return{name:hn,offendingElements:n,occurrences:n.length,...mn[gn]}}));function wn(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const yn="no-headingless-sections",vn={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},kn=i in vn?i:"en",xn=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const $n=new Zt(yn,(function(e,t){const n=[...t.querySelectorAll("section")].filter(xn);if(n.length)return{name:yn,offendingElements:n,occurrences:n.length,...vn[kn]}})),_n="no-http-props",Sn={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},En=i in Sn?i:"en";const Cn=new Zt(_n,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:_n,occurrences:n.length,...Sn[En]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),An="no-unused-vars",Ln={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Nn=i in Ln?i:"en";const Tn=new Zt(An,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=Ie(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:An,offendingElements:n,occurrences:n.length,...Ln[Nn]}})),Rn="privsec-section",jn={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},zn=i in jn?i:"en";const Pn=new Zt(Rn,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Rn,occurrences:1,...jn[zn]}}));dn.register(Cn,$n,Tn,ln,bn,nn,Yt,Pn);const On={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0};dn.register(Pn);const In=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}],["cc-by-nd",{name:"Creative Commons Attribution-NoDerivatives 4.0 International Public License",short:"CC-BY-ND",url:"https://creativecommons.org/licenses/by-nd/4.0/legalcode.nl"}]]),Dn={lint:{"privsec-section":!0},doJsonLd:!0,license:"cc-by",specStatus:"GN-BASIS",logos:[{src:"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg",alt:"Geonovum",id:"Geonovum",height:67,width:132,url:"https://www.geonovum.nl/"}]};var qn=Object.freeze({__proto__:null,name:"geonovum/defaults",run:function(e){const t=!1!==e.lint&&{...On.lint,...Dn.lint,...e.lint};Object.assign(e,{...On,...Dn,...e,lint:t}),Object.assign(e,function(e){return{isCCBY:"cc-by"===e.license,licenseInfo:In.get(e.license),isBasic:"GN-BASIS"===e.specStatus,isRegular:"GN-BASIS"===e.specStatus}}(e))}});var Mn=String.raw`@keyframes pop{ 0%{transform:scale(1,1)} 25%{transform:scale(1.25,1.25);opacity:.75} 100%{transform:scale(1,1)} @@ -134,7 +136,7 @@ h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left: } @media print{ .removeOnSave{display:none} -}`;const Dn=function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=In,document.head.appendChild(e),e}();var qn=Object.freeze({__proto__:null,name:"core/style",run:function(e){e.noReSpecCSS&&Dn.remove()}});const Mn="geonovum/style";function Bn(e){const t=document.createElement("link");return t.rel="stylesheet",t.href=`https://tools.geostandaarden.nl/respec/style/${e}.css`,t}const Fn=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preconnect",href:"https://tools.geostandaarden.nl/"},{hint:"preload",href:"https://tools.geostandaarden.nl/respec/style/base.css",as:"style"},{hint:"preload",href:"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg",as:"image"}],t=document.createDocumentFragment();for(const n of e.map(ze))t.appendChild(n);return t}(),Un=document.createElement("link");Un.rel="shortcut icon",Un.type="image/x-icon",Un.href="https://tools.geostandaarden.nl/respec/style/logos/Geonovum.ico",document.head.prepend(Un),document.head.querySelector("meta[name=viewport]")||Fn.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(Fn);var Wn=Object.freeze({__proto__:null,name:Mn,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'GN-BASIS'.";e.specStatus="GN-BASIS",et(t,Mn)}document.body.querySelector("figure.scalable")&&(document.head.appendChild(Bn("leaflet")),document.head.appendChild(Bn("font-awesome")));let t="";switch(e.specStatus.toUpperCase()){case"GN-WV":t+="GN-WV.css";break;case"GN-CV":t+="GN-CV.css";break;case"GN-VV":t+="GN-VV.css";break;case"GN-DEF":t+="GN-DEF.css";break;case"GN-BASIS":t+="GN-BASIS.css";break;default:t="base.css"}e.noToc||ot("end-all",()=>{!function(e,t){const n=e.createElement("script");n.addEventListener("load",()=>{window.location.hash&&(window.location.href=window.location.hash)},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,"2016")},{once:!0}),function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,"https://tools.geostandaarden.nl/respec/style/"+t)}});const Hn={en:{status_at_publication:Ne`This section describes the status of this +}`;const Bn=function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=Mn,document.head.appendChild(e),e}();var Fn=Object.freeze({__proto__:null,name:"core/style",run:function(e){e.noReSpecCSS&&Bn.remove()}});const Un="geonovum/style";function Wn(e){const t=document.createElement("link");return t.rel="stylesheet",t.href=`https://tools.geostandaarden.nl/respec/style/${e}.css`,t}const Hn=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preconnect",href:"https://tools.geostandaarden.nl/"},{hint:"preload",href:"https://tools.geostandaarden.nl/respec/style/base.css",as:"style"},{hint:"preload",href:"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg",as:"image"}],t=document.createDocumentFragment();for(const n of e.map(ze))t.appendChild(n);return t}(),Gn=document.createElement("link");Gn.rel="shortcut icon",Gn.type="image/x-icon",Gn.href="https://tools.geostandaarden.nl/respec/style/logos/Geonovum.ico",document.head.prepend(Gn),document.head.querySelector("meta[name=viewport]")||Hn.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(Hn);var Vn=Object.freeze({__proto__:null,name:Un,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'GN-BASIS'.";e.specStatus="GN-BASIS",et(t,Un)}document.body.querySelector("figure.scalable")&&(document.head.appendChild(Wn("leaflet")),document.head.appendChild(Wn("font-awesome")));let t="";switch(e.specStatus.toUpperCase()){case"GN-WV":t+="GN-WV.css";break;case"GN-CV":t+="GN-CV.css";break;case"GN-VV":t+="GN-VV.css";break;case"GN-DEF":t+="GN-DEF.css";break;case"GN-BASIS":t+="GN-BASIS.css";break;default:t="base.css"}e.noToc||ot("end-all",()=>{!function(e,t){const n=e.createElement("script");n.addEventListener("load",()=>{window.location.hash&&(window.location.href=window.location.hash)},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,"2016")},{once:!0}),function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,"https://tools.geostandaarden.nl/respec/style/"+t)}});const Zn={en:{status_at_publication:Ne`This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current Geonovum publications and the latest revision of this document can be found via @@ -146,80 +148,80 @@ h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left: laatste gepubliceerde versie van dit document zijn te vinden op <a href="https://www.geonovum.nl/geo-standaarden/alle-standaarden" >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a - >.`}};Object.keys(Hn).forEach(e=>{o[e]||(o[e]={}),Object.assign(o[e],Hn[e])});var Gn=Object.freeze({__proto__:null,name:"geonovum/l10n"});const Vn="core/github";let Zn,Kn;const Jn=new Promise((e,t)=>{Zn=e,Kn=e=>{Qe(e,Vn),t(new Error(e))}}),Xn=De({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});var Yn=Object.freeze({__proto__:null,name:Vn,github:Jn,run:async function(e){if(!e.hasOwnProperty("github")||!e.github)return void Zn(null);if("object"==typeof e.github&&!e.github.hasOwnProperty("repoURL")){return void Kn("Config option `[github](https://github.com/w3c/respec/wiki/github)` is missing property `repoURL`.")}let t,n=e.github.repoURL||e.github;n.endsWith("/")||(n+="/");try{t=new URL(n,"https://github.com")}catch{return void Kn(`\`respecConf.github\` is not a valid URL? (${t})`)}if("https://github.com"!==t.origin){return void Kn(`\`respecConf.github\` must be HTTPS and pointing to GitHub. (${t})`)}const[r,o]=t.pathname.split("/").filter(e=>e);if(!r||!o){return void Kn("`respecConf.github` URL needs a path with, for example, w3c/my-spec")}const i=e.github.branch||"gh-pages",s=new URL("./issues/",t).href,a={edDraftURI:`https://${r.toLowerCase()}.github.io/${o}/`,githubToken:void 0,githubUser:void 0,issueBase:s,atRiskBase:s,otherLinks:[],pullBase:new URL("./pulls/",t).href,shortName:o},l={key:Xn.participate,data:[{value:`GitHub ${r}/${o}`,href:t},{value:Xn.file_a_bug,href:a.issueBase},{value:Xn.commit_history,href:new URL("./commits/"+i,t.href).href},{value:"Pull requests",href:a.pullBase}]};let c="https://respec.org/github";if(e.githubAPI)if(new URL(e.githubAPI).hostname===window.parent.location.hostname)c=e.githubAPI;else{et("`respecConfig.githubAPI` should not be added manually.",Vn)}const u={branch:i,repoURL:t.href,apiBase:c,fullName:`${r}/${o}`};Zn(u);const d={...a,...e,github:u,githubAPI:c};Object.assign(e,d),e.otherLinks.unshift(l)}});const Qn="core/data-include";function er(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=qe(e,r.dataset.oninclude,n),i="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=bt(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&kt(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:i}),i||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var tr=Object.freeze({__proto__:null,name:Qn,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);er(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),Qe(r,Qn,{elements:[e]})}});await Promise.all(t)}});var nr=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=qe(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const rr=/^[a-z]+(\s+[a-z]+)+$/,or=/\B"([^"]*)"\B/,ir=/(\w+)\((.*)\)$/,sr=/^\[\[(\w+)\]\]$/,ar=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,lr=/^(\w+)\["([\w- ]*)"\]$/,cr=/\.?(\w+\(.*\)$)/;function ur(e){const{identifier:t,renderParent:n}=e;if(n)return Ne`<a data-xref-type="_IDL_" data-link-type="idl" + >.`}};Object.keys(Zn).forEach(e=>{o[e]||(o[e]={}),Object.assign(o[e],Zn[e])});var Kn=Object.freeze({__proto__:null,name:"geonovum/l10n"});const Jn="core/github";let Xn,Yn;const Qn=new Promise((e,t)=>{Xn=e,Yn=e=>{Qe(e,Jn),t(new Error(e))}}),er=De({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});var tr=Object.freeze({__proto__:null,name:Jn,github:Qn,run:async function(e){if(!e.hasOwnProperty("github")||!e.github)return void Xn(null);if("object"==typeof e.github&&!e.github.hasOwnProperty("repoURL")){return void Yn("Config option `[github](https://github.com/w3c/respec/wiki/github)` is missing property `repoURL`.")}let t,n=e.github.repoURL||e.github;n.endsWith("/")||(n+="/");try{t=new URL(n,"https://github.com")}catch{return void Yn(`\`respecConf.github\` is not a valid URL? (${t})`)}if("https://github.com"!==t.origin){return void Yn(`\`respecConf.github\` must be HTTPS and pointing to GitHub. (${t})`)}const[r,o]=t.pathname.split("/").filter(e=>e);if(!r||!o){return void Yn("`respecConf.github` URL needs a path with, for example, w3c/my-spec")}const i=e.github.branch||"gh-pages",s=new URL("./issues/",t).href,a={edDraftURI:`https://${r.toLowerCase()}.github.io/${o}/`,githubToken:void 0,githubUser:void 0,issueBase:s,atRiskBase:s,otherLinks:[],pullBase:new URL("./pulls/",t).href,shortName:o},l={key:er.participate,data:[{value:`GitHub ${r}/${o}`,href:t},{value:er.file_a_bug,href:a.issueBase},{value:er.commit_history,href:new URL("./commits/"+i,t.href).href},{value:"Pull requests",href:a.pullBase}]};let c="https://respec.org/github";if(e.githubAPI)if(new URL(e.githubAPI).hostname===window.parent.location.hostname)c=e.githubAPI;else{et("`respecConfig.githubAPI` should not be added manually.",Jn)}const u={branch:i,repoURL:t.href,apiBase:c,fullName:`${r}/${o}`};Xn(u);const d={...a,...e,github:u,githubAPI:c};Object.assign(e,d),e.otherLinks.unshift(l)}});const nr="core/data-include";function rr(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=qe(e,r.dataset.oninclude,n),i="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=vt(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&_t(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:i}),i||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var or=Object.freeze({__proto__:null,name:nr,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);rr(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),Qe(r,nr,{elements:[e]})}});await Promise.all(t)}});var ir=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=qe(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const sr=/^[a-z]+(\s+[a-z]+)+$/,ar=/\B"([^"]*)"\B/,lr=/(\w+)\((.*)\)$/,cr=/^\[\[(\w+)\]\]$/,ur=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,dr=/^(\w+)\["([\w- ]*)"\]$/,pr=/\.?(\w+\(.*\)$)/;function fr(e){const{identifier:t,renderParent:n}=e;if(n)return Ne`<a data-xref-type="_IDL_" data-link-type="idl" ><code>${t}</code></a - >`}function dr(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Ne`${n&&r?".":""}<a + >`}function hr(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Ne`${n&&r?".":""}<a data-xref-type="attribute" data-link-for=${o} data-xref-for=${o} data-lt="${`[[${t}]]`}" ><code>[[${t}]]</code></a - >`}function pr(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Ne`${r?".":""}<a + >`}function mr(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Ne`${r?".":""}<a data-link-type="idl" data-xref-type="attribute|dict-member" data-link-for="${o}" data-xref-for="${o}" ><code>${n}</code></a - >`}function fr(e){const{args:t,identifier:n,type:r,parent:o,renderParent:i}=e,{identifier:s}=o||{},a=function(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Ne`${e}, `);return Ne`${r}${n[n.length-1]}`}(t,e=>Ne`<var>${e}</var>`),l=`${n}(${t.join(", ")})`;return Ne`${o&&i?".":""}<a + >`}function gr(e){const{args:t,identifier:n,type:r,parent:o,renderParent:i}=e,{identifier:s}=o||{},a=function(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Ne`${e}, `);return Ne`${r}${n[n.length-1]}`}(t,e=>Ne`<var>${e}</var>`),l=`${n}(${t.join(", ")})`;return Ne`${o&&i?".":""}<a data-link-type="idl" data-xref-type="${r}" data-link-for="${s}" data-xref-for="${s}" data-lt="${l}" ><code>${n}</code></a - ><code>(${a})</code>`}function hr(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Ne`"<a + ><code>(${a})</code>`}function br(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Ne`"<a data-link-type="idl" data-xref-type="enum-value" data-link-for="${o}" data-xref-for="${o}" data-lt="${n?null:"the-empty-string"}" ><code>${n}</code></a - >"`}function mr(e){const{identifier:t}=e;return Ne`"<a + >"`}function wr(e){const{identifier:t}=e;return Ne`"<a data-link-type="idl" data-cite="WebIDL" data-xref-type="exception" ><code>${t}</code></a - >"`}function gr(e){const{identifier:t}=e;return Ne`<a + >"`}function yr(e){const{identifier:t}=e;return Ne`<a data-link-type="idl" data-cite="WebIDL" data-xref-type="interface" ><code>${t}</code></a - >`}function br(e){let t;try{t=function(e){const[t,n]=e.split(cr),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),i=[];for(;r.length;){const t=r.pop();if(ir.test(t)){const[,e,n]=t.match(ir),r=n.split(/,\s*/).filter(e=>e);i.push({type:"method",identifier:e,args:r,renderParent:o})}else if(lr.test(t)){const[,e,n]=t.match(lr);i.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(or.test(t)){const[,e]=t.match(or);o?i.push({type:"exception",identifier:e}):i.push({type:"enum",enumValue:e,renderParent:o})}else if(sr.test(t)){const[,e]=t.match(sr);i.push({type:"internal-slot",identifier:e,renderParent:o})}else if(ar.test(t)&&r.length){const[,e]=t.match(ar);i.push({type:"attribute",identifier:e,renderParent:o})}else if(rr.test(t))i.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!ar.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);i.push({type:"base",identifier:t,renderParent:o})}}return i.forEach((e,t,n)=>{e.parent=n[t+1]||null}),i.reverse()}(e)}catch(t){const n=Ne`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return Qe(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Ne(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=ur(e);t&&r.push(t);break}case"attribute":r.push(pr(e));break;case"internal-slot":r.push(dr(e));break;case"method":r.push(fr(e));break;case"enum":r.push(hr(e));break;case"exception":r.push(mr(e));break;case"idl-primitive":r.push(gr(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const wr=new Set(["alias","reference"]),yr=async function(){return await Le.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const vr={get ready(){return yr},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!wr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!wr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...wr].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!wr.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...wr],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},kr={},xr=new URL("https://api.specref.org/bibrefs?refs="),$r=ze({hint:"dns-prefetch",href:xr.origin});let _r;document.head.appendChild($r);const Sr=new Promise(e=>{_r=e});async function Er(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(xr.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await vr.addAll(o)}catch(e){console.error(e)}return o}async function Cr(e){const t=await Sr;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await Cr(n.aliasOf):n}var Ar=Object.freeze({__proto__:null,biblio:kr,name:"core/biblio",updateFromNetwork:Er,resolveRef:Cr,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=kr;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await vr.ready;const n=e.map(async e=>({id:e,data:await vr.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{kr[e.id]=e.data});const i=o.noData.map(e=>e.id);if(i.length){const e=await Er(i,{forceUpdate:!0});Object.assign(kr,e)}Object.assign(kr,this.conf.localBiblio),(()=>{_r(this.conf.biblio)})()}}});const Lr="core/render-biblio",Nr=De({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),Tr=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),Rr=(jr=".",e=>{const t=e.trim();return!t||t.endsWith(jr)?t:t+jr});var jr;function zr(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(Pr)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),i=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),s=Ne`<section> + >`}function vr(e){let t;try{t=function(e){const[t,n]=e.split(pr),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),i=[];for(;r.length;){const t=r.pop();if(lr.test(t)){const[,e,n]=t.match(lr),r=n.split(/,\s*/).filter(e=>e);i.push({type:"method",identifier:e,args:r,renderParent:o})}else if(dr.test(t)){const[,e,n]=t.match(dr);i.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(ar.test(t)){const[,e]=t.match(ar);o?i.push({type:"exception",identifier:e}):i.push({type:"enum",enumValue:e,renderParent:o})}else if(cr.test(t)){const[,e]=t.match(cr);i.push({type:"internal-slot",identifier:e,renderParent:o})}else if(ur.test(t)&&r.length){const[,e]=t.match(ur);i.push({type:"attribute",identifier:e,renderParent:o})}else if(sr.test(t))i.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!ur.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);i.push({type:"base",identifier:t,renderParent:o})}}return i.forEach((e,t,n)=>{e.parent=n[t+1]||null}),i.reverse()}(e)}catch(t){const n=Ne`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return Qe(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Ne(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=fr(e);t&&r.push(t);break}case"attribute":r.push(mr(e));break;case"internal-slot":r.push(hr(e));break;case"method":r.push(gr(e));break;case"enum":r.push(br(e));break;case"exception":r.push(wr(e));break;case"idl-primitive":r.push(yr(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const kr=new Set(["alias","reference"]),xr=async function(){return await Le.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const $r={get ready(){return xr},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!kr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!kr.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...kr].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!kr.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...kr],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},_r={},Sr=new URL("https://api.specref.org/bibrefs?refs="),Er=ze({hint:"dns-prefetch",href:Sr.origin});let Cr;document.head.appendChild(Er);const Ar=new Promise(e=>{Cr=e});async function Lr(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(Sr.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await $r.addAll(o)}catch(e){console.error(e)}return o}async function Nr(e){const t=await Ar;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await Nr(n.aliasOf):n}var Tr=Object.freeze({__proto__:null,biblio:_r,name:"core/biblio",updateFromNetwork:Lr,resolveRef:Nr,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=_r;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await $r.ready;const n=e.map(async e=>({id:e,data:await $r.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{_r[e.id]=e.data});const i=o.noData.map(e=>e.id);if(i.length){const e=await Lr(i,{forceUpdate:!0});Object.assign(_r,e)}Object.assign(_r,this.conf.localBiblio),(()=>{Cr(this.conf.biblio)})()}}});const Rr="core/render-biblio",jr=De({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),zr=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),Pr=(Or=".",e=>{const t=e.trim();return!t||t.endsWith(Or)?t:t+Or});var Or;function Ir(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(Dr)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),i=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),s=Ne`<section> <h3>${t}</h3> - <dl class="bibliography">${i.map(Ir)}</dl> - </section>`;Me(s,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());Qe(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,Lr),console.warn("Bad references: ",t)})}(r),s}function Pr(e){let t=kr[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;Qe(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,Lr)}else n=t.aliasOf,t=kr[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function Or(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Ne`<cite + <dl class="bibliography">${i.map(Mr)}</dl> + </section>`;Me(s,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());Qe(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,Rr),console.warn("Bad references: ",t)})}(r),s}function Dr(e){let t=_r[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;Qe(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,Rr)}else n=t.aliasOf,t=_r[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function qr(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Ne`<cite ><a class="bibref" href="${r}" data-link-type="biblio">${t||n}</a></cite - >`;return t?o:Ne`[${o}]`}function Ir({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Ne` + >`;return t?o:Ne`[${o}]`}function Mr({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Ne` <dt id="${n}">[${e}]</dt> - <dd>${{html:Dr(t)}}</dd> + <dd>${{html:Br(t)}}</dd> `:Ne` <dt id="${n}">[${e}]</dt> <dd><em class="respec-offending-element">Reference not found.</em></dd> - `}function Dr(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${Rr(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(Tr.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var qr=Object.freeze({__proto__:null,name:Lr,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Ne`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Ne`<h2>${Nr.references}</h2>`),r.classList.add("appendix"),n.length){const e=zr(n,Nr.norm_references);r.appendChild(e)}if(t.length){const e=zr(t,Nr.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:Or});const Mr="core/inlines",Br={},Fr=De({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),Ur=/(?:`[^`]+`)(?!`)/,Wr=/(?:{{[^}]+}})/,Hr=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,Gr=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,Vr=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,Zr=/(?:\[=[^=]+=\])/,Kr=/(?:\[\^[^^]+\^\])/;function Jr(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[i,s,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Ne`<code + `}function Br(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${Pr(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(zr.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var Fr=Object.freeze({__proto__:null,name:Rr,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Ne`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Ne`<h2>${jr.references}</h2>`),r.classList.add("appendix"),n.length){const e=Ir(n,jr.norm_references);r.appendChild(e)}if(t.length){const e=Ir(t,jr.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:qr});const Ur="core/inlines",Wr={},Hr=De({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),Gr=/(?:`[^`]+`)(?!`)/,Vr=/(?:{{[^}]+}})/,Zr=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,Kr=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,Jr=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,Xr=/(?:\[=[^=]+=\])/,Yr=/(?:\[\^[^^]+\^\])/;function Qr(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[i,s,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Ne`<code ><a data-xref-type="${i}" data-xref-for="${s}" >${a}</a ></code - >`}function Xr(e){const t=Ie(e),n=Ne`<em class="rfc2119">${t}</em>`;return Br[t]=!0,n}function Yr(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Ne`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Ne`<a href="${t}"></a>`;const n=Ne`<span>${e}</span>`;return Qe(`Wasn't able to expand ${e} as it didn't match any id in the document.`,Mr,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function Qr(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):br(Ie(t))}function eo(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,i]=r.split("|").map(Ie),{type:s,illegal:a}=Ue(o,t.parentNode),l=Or(o,i),c=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(c)){const e=l.childNodes[1]||l;et("Normative references in informative sections are not allowed. ",Mr,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==s||a?n.normativeReferences.add(c):n.informativeReferences.add(c),l.childNodes[1]?l.childNodes:[l]}function to(e,t,n){return"ABBR"===t.parentElement.tagName?e:Ne`<abbr title="${n.get(e)}">${e}</abbr>`}function no(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Ne`<var data-type="${r}">${n}</var>`}function ro(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,i]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],s=io(i),a=n?Ie(n):null;return Ne`<a + >`}function eo(e){const t=Ie(e),n=Ne`<em class="rfc2119">${t}</em>`;return Wr[t]=!0,n}function to(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Ne`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Ne`<a href="${t}"></a>`;const n=Ne`<span>${e}</span>`;return Qe(`Wasn't able to expand ${e} as it didn't match any id in the document.`,Ur,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function no(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):vr(Ie(t))}function ro(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,i]=r.split("|").map(Ie),{type:s,illegal:a}=Ue(o,t.parentNode),l=qr(o,i),c=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(c)){const e=l.childNodes[1]||l;et("Normative references in informative sections are not allowed. ",Ur,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==s||a?n.normativeReferences.add(c):n.informativeReferences.add(c),l.childNodes[1]?l.childNodes:[l]}function oo(e,t,n){return"ABBR"===t.parentElement.tagName?e:Ne`<abbr title="${n.get(e)}">${e}</abbr>`}function io(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Ne`<var data-type="${r}">${n}</var>`}function so(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,i]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],s=lo(i),a=n?Ie(n):null;return Ne`<a data-link-type="dfn" data-link-for="${a}" data-xref-for="${a}" data-lt="${o}" >${s}</a - >`}function oo(e){const t=e.slice(1,-1);return Ne`<code>${t}</code>`}function io(e){return Ur.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?oo(e):io(e)):document.createTextNode(e)}var so=Object.freeze({__proto__:null,name:Mr,rfc2119Usage:Br,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new Ve,e.informativeReferences=new Ve,e.respecRFC2119||(e.respecRFC2119=Br);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,i=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),i=[];let s;for(;s=o.nextNode();)i.push(s);return i}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),s=Fr.rfc2119Keywords(),a=new RegExp(`(${[s.source,Wr.source,Hr.source,Gr.source,Vr.source,Zr.source,Ur.source,Kr.source,...o?[o]:[]].join("|")})`);for(const n of i){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let i=!0;for(const a of r)if(i=!i,i)if(a.startsWith("{{")){const e=Qr(a);o.append(e)}else if(a.startsWith("[[[")){const e=Yr(a);o.append(e)}else if(a.startsWith("[[")){const t=eo(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=no(a);o.append(e)}else if(a.startsWith("[=")){const e=ro(a);o.append(e)}else if(a.startsWith("`")){const e=oo(a);o.append(e)}else if(a.startsWith("[^")){const e=Jr(a);o.append(e)}else if(t.has(a)){const e=to(a,n,t);o.append(e)}else{if(!s.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=Xr(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const ao=new Xe;function lo(e,t){for(const n of t)ao.has(n)||ao.set(n,new Set),ao.get(n).add(e)}var co=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=Be(e);lo(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===Ie(e.textContent)||(e.dataset.lt=t.join("|"))})}});var uo=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=Ie(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=Ie(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=Ie(n).toLowerCase(),o=Re.isSingular(r)?Re.plural(r):Re.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),lo(e,n)}})}});var po=String.raw`span.example-title{text-transform:none} + >`}function ao(e){const t=e.slice(1,-1);return Ne`<code>${t}</code>`}function lo(e){return Gr.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?ao(e):lo(e)):document.createTextNode(e)}var co=Object.freeze({__proto__:null,name:Ur,rfc2119Usage:Wr,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new Ve,e.informativeReferences=new Ve,e.respecRFC2119||(e.respecRFC2119=Wr);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,i=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),i=[];let s;for(;s=o.nextNode();)i.push(s);return i}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),s=Hr.rfc2119Keywords(),a=new RegExp(`(${[s.source,Vr.source,Zr.source,Kr.source,Jr.source,Xr.source,Gr.source,Yr.source,...o?[o]:[]].join("|")})`);for(const n of i){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let i=!0;for(const a of r)if(i=!i,i)if(a.startsWith("{{")){const e=no(a);o.append(e)}else if(a.startsWith("[[[")){const e=to(a);o.append(e)}else if(a.startsWith("[[")){const t=ro(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=io(a);o.append(e)}else if(a.startsWith("[=")){const e=so(a);o.append(e)}else if(a.startsWith("`")){const e=ao(a);o.append(e)}else if(a.startsWith("[^")){const e=Qr(a);o.append(e)}else if(t.has(a)){const e=oo(a,n,t);o.append(e)}else{if(!s.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=eo(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const uo=new Xe;function po(e,t){for(const n of t)uo.has(n)||uo.set(n,new Set),uo.get(n).add(e)}var fo=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=Be(e);po(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===Ie(e.textContent)||(e.dataset.lt=t.join("|"))})}});var ho=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=Ie(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=Ie(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=Ie(n).toLowerCase(),o=Re.isSingular(r)?Re.plural(r):Re.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),po(e,n)}})}});var mo=String.raw`span.example-title{text-transform:none} aside.example,div.example,div.illegal-example{padding:.5em;margin:1em 0;position:relative;clear:both} div.illegal-example{color:red} div.illegal-example p{color:#000} aside.example,div.example{padding:.5em;border-left-width:.5em;border-left-style:solid;border-color:#e0cb52;background:#fcfaee} aside.example div.example{border-left-width:.1em;border-color:#999;background:#fff} aside.example div.example span.example-title{color:#999} -.example pre{background-color:rgba(0,0,0,.03)}`;const fo=De({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}});function ho(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Ne`<span class="example-title">: ${n.title}</span>`:"";return Ne`<div class="marker"> - <a class="self-link">${fo.example}<bdi>${r}</bdi></a +.example pre{background-color:rgba(0,0,0,.03)}`;const go=De({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}});function bo(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Ne`<span class="example-title">: ${n.title}</span>`:"";return Ne`<div class="marker"> + <a class="self-link">${go.example}<bdi>${r}</bdi></a >${o} - </div>`}var mo=Object.freeze({__proto__:null,name:"core/examples",run:function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;document.head.insertBefore(Ne`<style> - ${po} - </style>`,document.querySelector("link"));let t=0;e.forEach(e=>{const n=e.classList.contains("illegal-example"),r={number:t,illegal:n},{title:o}=e;if("aside"===e.localName){++t;const n=ho(e,t,r);e.prepend(n),o?Me(e,"example-"+t,o):Me(e,"example",String(t));const{id:i}=e;n.querySelector("a.self-link").href="#"+i,rt("example",r)}else{const n=!!e.closest("aside");n||++t,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const i=e.id?e.id:null;i&&e.removeAttribute("id");const s=ho(e,n?0:t,r),a=Ne`<div class="example" id="${i}"> + </div>`}var wo=Object.freeze({__proto__:null,name:"core/examples",run:function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;document.head.insertBefore(Ne`<style> + ${mo} + </style>`,document.querySelector("link"));let t=0;e.forEach(e=>{const n=e.classList.contains("illegal-example"),r={number:t,illegal:n},{title:o}=e;if("aside"===e.localName){++t;const n=bo(e,t,r);e.prepend(n),o?Me(e,"example-"+t,o):Me(e,"example",String(t));const{id:i}=e;n.querySelector("a.self-link").href="#"+i,rt("example",r)}else{const n=!!e.closest("aside");n||++t,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const i=e.id?e.id:null;i&&e.removeAttribute("id");const s=bo(e,n?0:t,r),a=Ne`<div class="example" id="${i}"> ${s} ${e.cloneNode(!0)} - </div>`;o&&Me(a,"example-"+t,o),Me(a,"example",String(t));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),n||rt("example",r)}})}});var go=String.raw`.issue-label{text-transform:initial} + </div>`;o&&Me(a,"example-"+t,o),Me(a,"example",String(t));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),n||rt("example",r)}})}});var yo=String.raw`.issue-label{text-transform:initial} .warning>p:first-child{margin-top:0} .warning{padding:.5em;border-left-width:.5em;border-left-style:solid} span.warning{padding:.1em .5em .15em} @@ -228,26 +230,26 @@ span.warning{padding:.1em .5em .15em} .warning-title:before{content:"⚠";font-size:1.3em;float:left;padding-right:.3em;margin-top:-.3em} li.task-list-item{list-style:none} input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} -.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}`;const bo="core/issues-notes",wo=De({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function yo(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:i,displayType:s,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),i=t?"issue":n?"warning":r?"ednote":"note",s=t?o?wo.feature_at_risk:wo.issue:n?wo.warning:r?wo.editors_note:wo.note;return{type:i,displayType:s,isFeatureAtRisk:o}}(e),l="issue"===i,c="span"===e.localName,{number:u}=e.dataset,d={type:i,inline:c,title:e.title,number:r(e)};if(!c){const r=Ne`<div class="${a?i+" atrisk":i}" role="${"note"===i?"note":null}"></div>`,c=document.createElement("span"),p=Ne`<div role="heading" class="${i+"-title marker"}">${c}</div>`;Me(p,"h",i);let f,h=s;if(e.id?(r.id=e.id,e.removeAttribute("id")):Me(r,"issue-container",d.number?"number-"+d.number:""),l){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Ne`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Ne`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(c.before(e),e.append(c)),c.classList.add("issue-number"),f=t.get(u),!f){et(`Failed to fetch issue number ${u}.`,bo)}f&&!d.title&&(d.title=f.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Ne`<span style="text-transform: none">: ${t.title}</span>`:"";return Ne`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(wo.issue,d,r.id))}if(c.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=f?f.labels:[];f&&"CLOSED"===f.state&&r.classList.add("closed"),p.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const i=(s=n,parseInt(s,16)>8388607.5?"#000":"#fff");var s;return Ne`<a +.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}`;const vo="core/issues-notes",ko=De({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function xo(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:i,displayType:s,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),i=t?"issue":n?"warning":r?"ednote":"note",s=t?o?ko.feature_at_risk:ko.issue:n?ko.warning:r?ko.editors_note:ko.note;return{type:i,displayType:s,isFeatureAtRisk:o}}(e),l="issue"===i,c="span"===e.localName,{number:u}=e.dataset,d={type:i,inline:c,title:e.title,number:r(e)};if(!c){const r=Ne`<div class="${a?i+" atrisk":i}" role="${"note"===i?"note":null}"></div>`,c=document.createElement("span"),p=Ne`<div role="heading" class="${i+"-title marker"}">${c}</div>`;Me(p,"h",i);let f,h=s;if(e.id?(r.id=e.id,e.removeAttribute("id")):Me(r,"issue-container",d.number?"number-"+d.number:""),l){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Ne`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Ne`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(c.before(e),e.append(c)),c.classList.add("issue-number"),f=t.get(u),!f){et(`Failed to fetch issue number ${u}.`,vo)}f&&!d.title&&(d.title=f.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Ne`<span style="text-transform: none">: ${t.title}</span>`:"";return Ne`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(ko.issue,d,r.id))}if(c.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=f?f.labels:[];f&&"CLOSED"===f.state&&r.classList.add("closed"),p.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const i=(s=n,parseInt(s,16)>8388607.5?"#000":"#fff");var s;return Ne`<a class="respec-gh-label" style="${`background-color: #${n}; color: ${i}`}" href="${o.href}" >${r}</a >`}(e,n)),o=e.map(e=>e.name),i=Oe(o);r.length&&r.unshift(document.createTextNode(" "));if(o.length){return Ne`<span class="issue-label" aria-label="${`This issue is labelled as ${i}.`}" >: ${t}${r}</span - >`}return Ne`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(i),m.removeAttribute("data-number"),f&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(f.bodyHTML)),r.append(p,m);const g=He(p,"section").length+2;p.setAttribute("aria-level",g)}rt(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Ne`<p>${wo.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${wo.issue_summary}</h2>`)}(o)}var vo=Object.freeze({__proto__:null,name:bo,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return Qe(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,bo),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),{head:r}=document;r.insertBefore(Ne`<style> - ${go} - </style>`,r.querySelector("link")),yo(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const ko="core/best-practices",xo={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},$o=De(xo),_o=i in xo?i:"en";var So=Object.freeze({__proto__:null,name:ko,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=Me(e,"bp"),o=Ne`<a class="marker self-link" href="${"#"+r}" - ><bdi lang="${_o}">${$o.best_practice}${t+1}</bdi></a - >`;if(n){const t=Ne`<li>${o}: ${Ze(e)}</li>`;n.appendChild(t)}const i=e.closest("div");if(!i)return void e.classList.add("advisement");i.classList.add("advisement");const s=Ne`${o.cloneNode(!0)}: ${e}`;i.prepend(...s.childNodes)}),e.length)t&&(t.appendChild(Ne`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){et("Using best practices summary (#bp-summary) but no best practices found.",ko),t.remove()}}});const Eo="core/figures",Co=De({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var Ao=Object.freeze({__proto__:null,name:Eo,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;Me(e,"fig",r),We(t,Ne`<span class="fig-title"></span>`),t.prepend(Co.fig,Ne`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{Fe(e,"span").removeAttribute("href")}),Ne`<li class="tofline"> + >`}return Ne`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(i),m.removeAttribute("data-number"),f&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(f.bodyHTML)),r.append(p,m);const g=He(p,"section").length+2;p.setAttribute("aria-level",g)}rt(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Ne`<p>${ko.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${ko.issue_summary}</h2>`)}(o)}var $o=Object.freeze({__proto__:null,name:vo,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return Qe(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,vo),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),{head:r}=document;r.insertBefore(Ne`<style> + ${yo} + </style>`,r.querySelector("link")),xo(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const _o="core/best-practices",So={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},Eo=De(So),Co=i in So?i:"en";var Ao=Object.freeze({__proto__:null,name:_o,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=Me(e,"bp"),o=Ne`<a class="marker self-link" href="${"#"+r}" + ><bdi lang="${Co}">${Eo.best_practice}${t+1}</bdi></a + >`;if(n){const t=Ne`<li>${o}: ${Ze(e)}</li>`;n.appendChild(t)}const i=e.closest("div");if(!i)return void e.classList.add("advisement");i.classList.add("advisement");const s=Ne`${o.cloneNode(!0)}: ${e}`;i.prepend(...s.childNodes)}),e.length)t&&(t.appendChild(Ne`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){et("Using best practices summary (#bp-summary) but no best practices found.",_o),t.remove()}}});const Lo="core/figures",No=De({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var To=Object.freeze({__proto__:null,name:Lo,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;Me(e,"fig",r),We(t,Ne`<span class="fig-title"></span>`),t.prepend(No.fig,Ne`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{Fe(e,"span").removeAttribute("href")}),Ne`<li class="tofline"> <a class="tocxref" href="${"#"+e}">${n.childNodes}</a> - </li>`}(t.id,r));else{et("Found a `<figure>` without a `<figcaption>`.",Eo,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Ne`<h2>${Co.list_of_figures}</h2>`,Ne`<ul class="tof"> + </li>`}(t.id,r));else{et("Found a `<figure>` without a `<figcaption>`.",Lo,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Ne`<h2>${No.list_of_figures}</h2>`,Ne`<ul class="tof"> ${e} - </ul>`))}});const Lo="core/data-cite",No="__SPEC__";async function To(e){const{key:t,frag:n,path:r}=e;let o="",i="";if(t===No)o=document.location.href;else{const e=await Cr(t);if(!e)return null;o=e.href,i=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:i}}function Ro(e,t,n){const{href:r,title:o}=t,i=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?We(e,t):(t.textContent=o,e.append(t)),i){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){Qe("Exporting an linked external definition is not allowed.",Lo,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,i){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function jo(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const zo=jo("#"),Po=jo("/");function Oo(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:i}=r?Oo(r):{key:No,isNormative:!1};return t.cite=i?o:"?"+o,t.citeFrag=n.replace("#",""),Oo(e)}const i=r?"#"+r:zo(n),s=o||Po(n).split("#")[0],{type:a}=Ue(n,e),l="normative"===a,c=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(c)),isNormative:l,frag:i,path:s}}function Io(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var Do=Object.freeze({__proto__:null,name:Lo,THIS_SPEC:No,toCiteDetails:Oo,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(Oo).map(async e=>({entry:e,result:await Cr(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await Er(n);r&&Object.assign(kr,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=Oo(t),r=await To(n);if(r)Ro(t,r,n);else{et(`Couldn't find a match for "${e}"`,Lo,{elements:[t]})}}ot("beforesave",Io)}});const qo="core/link-to-dfn",Mo=[],Bo=De({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function Fo(e){const t=new Map,n=[];for(const r of ao.get(e)){const{dfnFor:o="",dfnType:i="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(i)){const e=t.get(o).get(i),s="dfn"===e.localName,a="dfn"===r.localName,l=i===(e.dataset.dfnType||"dfn"),c=o===(e.dataset.dfnFor||"");if(s&&a&&l&&c){n.push(r);continue}}const s="idl"in r.dataset||"dfn"!==i?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(s,r),Me(r,"dfn",e)}return{result:t,duplicates:n}}function Uo(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return Be(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function Wo(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:i}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==i)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=Ho(e)&&Ho(t,n);r&&!o||We(e,document.createElement("code"))}(e,t),!r}function Ho(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function Go(e){e.forEach(e=>{et(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,qo,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var Vo=Object.freeze({__proto__:null,name:qo,possibleExternalLinks:Mo,run:async function(e){const t=function(){const e=new Xe;for(const t of ao.keys()){const{result:n,duplicates:r}=Fo(t);e.set(t,n),r.length>0&&Qe(Bo.duplicateMsg(t),qo,{title:Bo.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=Uo(e,t);if(r){Wo(e,r,t)||Mo.push(e)}else""===e.dataset.cite?n.push(e):Mo.push(e)}Go(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=Oo(t);r!==No&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||Go(Mo)}});const Zo="core/contrib";var Ko=Object.freeze({__proto__:null,name:Zo,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void Qe("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",Zo)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Ne(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=Oe(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await async function(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,i;if("caches"in window)try{if(o=await caches.open(r.origin),i=await o.match(n),i&&new Date(i.headers.get("Expires"))>new Date)return i}catch(e){console.error("Failed to use Cache API.",e)}const s=await fetch(n);if(!s.ok&&i)return console.warn("Returning a stale cached response for "+r),i;if(o&&s.ok){const e=s.clone(),r=new Headers(s.headers),i=new Date(Date.now()+t);r.set("Expires",i.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return s}(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return Qe("Error loading contributors from GitHub.",Zo),console.error(e),null}}}(t,n)}});var Jo=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{Fe(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const Xo=["h2","h3","h4","h5","h6"],Yo=["h1",...Xo],Qo="core/structure",ei=De({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function ti(e,t,{prefix:n=""}={}){let r=!1,o=0,i=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const s=Ne`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=i,r=!0);let e=a.isIntro?"":r?ni(i-o+1):n+i;const l=e.split(".").length;if(1===l&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(i+=1,a.header.prepend(Ne`<bdi class="secno">${e} </bdi>`)),l<=t){const n=a.header.id||a.element.id,r=oi(a.header,n),o=ti(a.subsections,t,{prefix:e});o&&r.append(o),s.append(r)}}return s}function ni(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function ri(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!Xo.includes(o.localName))continue;const i=o.textContent;Me(e,null,i),r.push({element:e,header:o,title:i,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:ri(e,{tocIntroductory:t})})}return r}function oi(e,t){const n=Ne`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=Fe(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{Fe(e,"span").removeAttribute("id")}),Ne`<li class="tocline">${n}</li>`}var ii=Object.freeze({__proto__:null,name:Qo,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=Yo.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(He(e,"section").length+1,6);e.localName!==t&&Fe(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){Qe("`data-max-toc` must have a value between 0-6 (inclusive).",Qo,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=ti(ri(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Ne`<nav id="toc"></nav>`,n=Ne`<h2 class="introductory">${ei.toc}</h2>`;Me(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Ne`<p role="navigation" id="back-to-top"> + </ul>`))}});const Ro="core/data-cite",jo="__SPEC__";async function zo(e){const{key:t,frag:n,path:r}=e;let o="",i="";if(t===jo)o=document.location.href;else{const e=await Nr(t);if(!e)return null;o=e.href,i=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:i}}function Po(e,t,n){const{href:r,title:o}=t,i=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?We(e,t):(t.textContent=o,e.append(t)),i){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){Qe("Exporting an linked external definition is not allowed.",Ro,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,i){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function Oo(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const Io=Oo("#"),Do=Oo("/");function qo(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:i}=r?qo(r):{key:jo,isNormative:!1};return t.cite=i?o:"?"+o,t.citeFrag=n.replace("#",""),qo(e)}const i=r?"#"+r:Io(n),s=o||Do(n).split("#")[0],{type:a}=Ue(n,e),l="normative"===a,c=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(c)),isNormative:l,frag:i,path:s}}function Mo(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var Bo=Object.freeze({__proto__:null,name:Ro,THIS_SPEC:jo,toCiteDetails:qo,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(qo).map(async e=>({entry:e,result:await Nr(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await Lr(n);r&&Object.assign(_r,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=qo(t),r=await zo(n);if(r)Po(t,r,n);else{et(`Couldn't find a match for "${e}"`,Ro,{elements:[t]})}}ot("beforesave",Mo)}});const Fo="core/link-to-dfn",Uo=[],Wo=De({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function Ho(e){const t=new Map,n=[];for(const r of uo.get(e)){const{dfnFor:o="",dfnType:i="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(i)){const e=t.get(o).get(i),s="dfn"===e.localName,a="dfn"===r.localName,l=i===(e.dataset.dfnType||"dfn"),c=o===(e.dataset.dfnFor||"");if(s&&a&&l&&c){n.push(r);continue}}const s="idl"in r.dataset||"dfn"!==i?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(s,r),Me(r,"dfn",e)}return{result:t,duplicates:n}}function Go(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return Be(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function Vo(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:i}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==i)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=Zo(e)&&Zo(t,n);r&&!o||We(e,document.createElement("code"))}(e,t),!r}function Zo(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function Ko(e){e.forEach(e=>{et(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,Fo,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var Jo=Object.freeze({__proto__:null,name:Fo,possibleExternalLinks:Uo,run:async function(e){const t=function(){const e=new Xe;for(const t of uo.keys()){const{result:n,duplicates:r}=Ho(t);e.set(t,n),r.length>0&&Qe(Wo.duplicateMsg(t),Fo,{title:Wo.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=Go(e,t);if(r){Vo(e,r,t)||Uo.push(e)}else""===e.dataset.cite?n.push(e):Uo.push(e)}Ko(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=qo(t);r!==jo&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||Ko(Uo)}});const Xo="core/contrib";var Yo=Object.freeze({__proto__:null,name:Xo,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void Qe("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",Xo)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Ne(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=Oe(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await async function(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,i;if("caches"in window)try{if(o=await caches.open(r.origin),i=await o.match(n),i&&new Date(i.headers.get("Expires"))>new Date)return i}catch(e){console.error("Failed to use Cache API.",e)}const s=await fetch(n);if(!s.ok&&i)return console.warn("Returning a stale cached response for "+r),i;if(o&&s.ok){const e=s.clone(),r=new Headers(s.headers),i=new Date(Date.now()+t);r.set("Expires",i.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return s}(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return Qe("Error loading contributors from GitHub.",Xo),console.error(e),null}}}(t,n)}});var Qo=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{Fe(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const ei=["h2","h3","h4","h5","h6"],ti=["h1",...ei],ni="core/structure",ri=De({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function oi(e,t,{prefix:n=""}={}){let r=!1,o=0,i=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const s=Ne`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=i,r=!0);let e=a.isIntro?"":r?ii(i-o+1):n+i;const l=e.split(".").length;if(1===l&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(i+=1,a.header.prepend(Ne`<bdi class="secno">${e} </bdi>`)),l<=t){const n=a.header.id||a.element.id,r=ai(a.header,n),o=oi(a.subsections,t,{prefix:e});o&&r.append(o),s.append(r)}}return s}function ii(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function si(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!ei.includes(o.localName))continue;const i=o.textContent;Me(e,null,i),r.push({element:e,header:o,title:i,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:si(e,{tocIntroductory:t})})}return r}function ai(e,t){const n=Ne`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=Fe(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{Fe(e,"span").removeAttribute("id")}),Ne`<li class="tocline">${n}</li>`}var li=Object.freeze({__proto__:null,name:ni,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=ti.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(He(e,"section").length+1,6);e.localName!==t&&Fe(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){Qe("`data-max-toc` must have a value between 0-6 (inclusive).",ni,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=oi(si(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Ne`<nav id="toc"></nav>`,n=Ne`<h2 class="introductory">${ri.toc}</h2>`;Me(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Ne`<p role="navigation" id="back-to-top"> <a href="#title"><abbr title="Back to Top">↑</abbr></a> - </p>`;document.body.append(o)}(t)}rt("toc")}});const si=De({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var ai=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Ne`<p><em>${si.informative}</em></p>`)})}});var li=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(Me(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Ne` + </p>`;document.body.append(o)}(t)}rt("toc")}});const ci=De({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var ui=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Ne`<p><em>${ci.informative}</em></p>`)})}});var di=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(Me(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Ne` <a href="${"#"+t}" class="self-link" aria-label="§"></a> - `)}}});var ci=Object.freeze({__proto__:null,name:"geonovum/conformance",run:function(){const e=document.querySelector("section#conformance");e&&function(e){const t=Ne` + `)}}});var pi=Object.freeze({__proto__:null,name:"geonovum/conformance",run:function(){const e=document.querySelector("section#conformance");e&&function(e){const t=Ne` <h2>Conformiteit</h2> <p> Naast onderdelen die als niet normatief gemarkeerd zijn, zijn ook alle @@ -255,22 +257,20 @@ input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} is alles in dit document normatief. </p> <p>Informatief en normatief.</p> - `;e.prepend(...t.childNodes)}(e)}});const ui=new Map([["text/html","html"],["application/xml","xml"]]);function di(e,t=document){const n=ui.get(e);if(!n){const t=[...ui.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=function(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;Ke(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Pe(r);const o=e.createDocumentFragment(),i=e.querySelector("meta[name='viewport']");i&&t.firstChild!==i&&o.appendChild(i);let s=e.querySelector("meta[charset], meta[content*='charset=']");s||(s=Ne`<meta charset="utf-8" />`);o.appendChild(s);const a="ReSpec "+(window.respecVersion||"Developer Channel"),l=Ne` - <meta name="generator" content="${a}" /> - `;o.appendChild(l),t.prepend(o),rt("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}n("core/exporter",{rsDocToDataURL:di});const pi="ui/save-html",fi=De({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),hi=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return di(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return di(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function mi(e){const{id:t,href:n,fileName:r,title:o,type:i}=e;return Ne`<a + `;e.prepend(...t.childNodes)}(e)}});const fi="ui/save-html",hi=De({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),mi=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return at(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return at(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function gi(e){const{id:t,href:n,fileName:r,title:o,type:i}=e;return Ne`<a href="${n}" id="${t}" download="${r}" type="${i}" class="respec-save-button" - onclick=${()=>qt.closeModal()} + onclick=${()=>Ft.closeModal()} >${o}</a - >`}const gi={async show(e){await document.respec.ready;const t=Ne`<div class="respec-save-buttons"> - ${hi.map(mi)} - </div>`;qt.freshModal(fi.save_snapshot,t,e)}},bi="download"in HTMLAnchorElement.prototype;let wi;bi&&(wi=qt.addCommand(fi.save_snapshot,(function(){if(!bi)return;gi.show(wi)}),"Ctrl+Shift+Alt+S","💾"));var yi=Object.freeze({__proto__:null,name:pi,exportDocument:function(e,t){return et("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",pi,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),di(t)}});const vi="https://respec.org/specref/",ki=De({en:{search_specref:"Search Specref"},nl:{search_specref:"Doorzoek Specref"},ja:{search_specref:"仕様検索"},de:{search_specref:"Spezifikationen durchsuchen"},zh:{search_specref:"搜索 Specref"}}),xi=qt.addCommand(ki.search_specref,(function(){const e=Ne` - <iframe class="respec-iframe" src="${vi}" onload=${e=>e.target.classList.add("ready")}></iframe> - <a href="${vi}" target="_blank">Open Search UI in a new tab</a> - `;qt.freshModal(ki.search_specref,e,xi)}),"Ctrl+Shift+Alt+space","🔎");var $i=Object.freeze({__proto__:null});const _i=De({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const Si=document.createElement("div"),Ei=Ne.bind(Si),Ci=qt.addCommand(`${_i.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(Ai).forEach(t=>{e.push(t)});Ei` + >`}const bi={async show(e){await document.respec.ready;const t=Ne`<div class="respec-save-buttons"> + ${mi.map(gi)} + </div>`;Ft.freshModal(hi.save_snapshot,t,e)}},wi="download"in HTMLAnchorElement.prototype;let yi;wi&&(yi=Ft.addCommand(hi.save_snapshot,(function(){if(!wi)return;bi.show(yi)}),"Ctrl+Shift+Alt+S","💾"));var vi=Object.freeze({__proto__:null,name:fi,exportDocument:function(e,t){return et("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",fi,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),at(t)}});const ki="https://respec.org/specref/",xi=De({en:{search_specref:"Search Specref"},nl:{search_specref:"Doorzoek Specref"},ja:{search_specref:"仕様検索"},de:{search_specref:"Spezifikationen durchsuchen"},zh:{search_specref:"搜索 Specref"}}),$i=Ft.addCommand(xi.search_specref,(function(){const e=Ne` + <iframe class="respec-iframe" src="${ki}" onload=${e=>e.target.classList.add("ready")}></iframe> + <a href="${ki}" target="_blank">Open Search UI in a new tab</a> + `;Ft.freshModal(xi.search_specref,e,$i)}),"Ctrl+Shift+Alt+space","🔎");var _i=Object.freeze({__proto__:null});const Si=De({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const Ei=document.createElement("div"),Ci=Ne.bind(Ei),Ai=Ft.addCommand(`${Si.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(Li).forEach(t=>{e.push(t)});Ci` <p> ReSpec is a document production toolchain, with a notable focus on W3C specifications. </p> @@ -294,12 +294,12 @@ input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} </thead> <tbody>${e}</tbody> </table> -`,qt.freshModal(`${_i.about_respec} - ${window.respecVersion}`,Si,Ci)}),"Ctrl+Shift+Alt+A","ℹ️");function Ai({name:e,duration:t}){return Ne` +`,Ft.freshModal(`${Si.about_respec} - ${window.respecVersion}`,Ei,Ai)}),"Ctrl+Shift+Alt+A","ℹ️");function Li({name:e,duration:t}){return Ne` <tr> <td><a href="${`https://github.com/w3c/respec/blob/develop/src/${e}.js`}">${e}</a></td> <td>${t}</td> </tr> - `}var Li=Object.freeze({__proto__:null});var Ni=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});var Ti=String.raw`.hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa} + `}var Ni=Object.freeze({__proto__:null});var Ti=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});var Ri=String.raw`.hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa} .hljs-comment,.hljs-quote{color:#717277;font-style:italic} .hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4} .hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#ca4706;font-weight:700} @@ -310,21 +310,21 @@ input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} .hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#336ae3} .hljs-emphasis{font-style:italic} .hljs-strong{font-weight:700} -.hljs-link{text-decoration:underline}`;async function Ri(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-geonovum.js",document.baseURI).href));return await t.text()}const ji=ze({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(ji);const zi=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return hs}))).default}catch{return Ri("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",zi.then(e=>({worker:e})));const Pi=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight");async function Oi(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Pi(),languages:t},r=await zi;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(i){const{data:{id:s,language:a,value:l}}=i;s===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:l}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:i}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${i}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=i,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Ii=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Oi);document.head.appendChild(Ne`<style> - ${Ti} - </style>`),await Promise.all(n)}});const Di=De({en:{missing_test_suite_uri:"Found tests in your spec, but missing '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.",tests:"tests",test:"test"},ja:{missing_test_suite_uri:"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.",tests:"テスト",test:"テスト"},de:{missing_test_suite_uri:"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.",tests:"Tests",test:"Test"},zh:{missing_test_suite_uri:"本规范中包含测试,但在 ReSpec 配置中缺少 '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。",tests:"测试",test:"测试"}}),qi="core/data-tests";function Mi(e){const t=[],[n]=new URL(e).pathname.split("/").reverse(),r=n.split(".");let[o]=r;if(r.find(e=>"https"===e)){const e=document.createElement("span");e.textContent="🔒",e.setAttribute("aria-label","requires a secure connection"),e.setAttribute("title","Test requires HTTPS"),o=o.replace(".https",""),t.push(e)}if(o.split(".").join("-").split("-").find(e=>"manual"===e)){const e=document.createElement("span");e.textContent="💪",e.setAttribute("aria-label","the test must be run manually"),e.setAttribute("title","Manual test"),o=o.replace("-manual",""),t.push(e)}return Ne` +.hljs-link{text-decoration:underline}`;async function ji(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-geonovum.js",document.baseURI).href));return await t.text()}const zi=ze({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(zi);const Pi=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return ms}))).default}catch{return ji("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",Pi.then(e=>({worker:e})));const Oi=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight");async function Ii(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Oi(),languages:t},r=await Pi;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(i){const{data:{id:s,language:a,value:l}}=i;s===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:l}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:i}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${i}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=i,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Di=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Ii);document.head.appendChild(Ne`<style> + ${Ri} + </style>`),await Promise.all(n)}});const qi=De({en:{missing_test_suite_uri:"Found tests in your spec, but missing '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.",tests:"tests",test:"test"},ja:{missing_test_suite_uri:"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.",tests:"テスト",test:"テスト"},de:{missing_test_suite_uri:"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.",tests:"Tests",test:"Test"},zh:{missing_test_suite_uri:"本规范中包含测试,但在 ReSpec 配置中缺少 '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。",tests:"测试",test:"测试"}}),Mi="core/data-tests";function Bi(e){const t=[],[n]=new URL(e).pathname.split("/").reverse(),r=n.split(".");let[o]=r;if(r.find(e=>"https"===e)){const e=document.createElement("span");e.textContent="🔒",e.setAttribute("aria-label","requires a secure connection"),e.setAttribute("title","Test requires HTTPS"),o=o.replace(".https",""),t.push(e)}if(o.split(".").join("-").split("-").find(e=>"manual"===e)){const e=document.createElement("span");e.textContent="💪",e.setAttribute("aria-label","the test must be run manually"),e.setAttribute("title","Manual test"),o=o.replace("-manual",""),t.push(e)}return Ne` <li> <a href="${e}">${o}</a> ${t} </li> - `}function Bi(e,t){return e.map(e=>{try{return new URL(e,t).href}catch{et("Bad URI: "+e,qi)}}).filter(e=>e)}function Fi(e,t){const n=e.filter((e,t,n)=>n.indexOf(e)!==t);if(n.length){const e="Duplicate tests found",r='To fix, remove duplicates from "data-tests": '+n.map(e=>new URL(e).pathname).join(", ");et(e,qi,{hint:r,elements:[t]})}}function Ui(e){const t=[...new Set(e)];return Ne` + `}function Fi(e,t){return e.map(e=>{try{return new URL(e,t).href}catch{et("Bad URI: "+e,Mi)}}).filter(e=>e)}function Ui(e,t){const n=e.filter((e,t,n)=>n.indexOf(e)!==t);if(n.length){const e="Duplicate tests found",r='To fix, remove duplicates from "data-tests": '+n.map(e=>new URL(e).pathname).join(", ");et(e,Mi,{hint:r,elements:[t]})}}function Wi(e){const t=[...new Set(e)];return Ne` <details class="respec-tests-details removeOnSave"> <summary>tests: ${t.length}</summary> <ul> - ${t.map(Mi)} + ${t.map(Bi)} </ul> </details> - `}var Wi=Object.freeze({__proto__:null,name:qi,run:function(e){const t=[...document.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);if(t.length)if(e.testSuiteURI)for(const n of t){const t=Bi(n.dataset.tests.split(/,/gm).map(e=>e.trim()),e.testSuiteURI);Fi(t,n);const r=Ui(t);n.append(r)}else Qe(Di.missing_test_suite_uri,qi)}});const Hi="core/list-sorter";function Gi(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function Vi(e,t){return[...e.querySelectorAll(":scope > li")].sort(Gi(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function Zi(e,t){return[...e.querySelectorAll(":scope > dt")].sort(Gi(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:i}=t;for(;i&&i.nextSibling;){o.appendChild(i.cloneNode(!0));const{nodeType:e,nodeName:t}=i.nextSibling;if(e===n&&t===r)break;i=i.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var Ki=Object.freeze({__proto__:null,name:Hi,sortListItems:Vi,sortDefinitionTerms:Zi,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=Zi(t,n);break;case"ol":case"ul":e=Vi(t,n);break;default:et(`ReSpec can't sort ${t.localName} elements.`,Hi,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});var Ji=String.raw`var:hover{text-decoration:underline;cursor:pointer} + `}var Hi=Object.freeze({__proto__:null,name:Mi,run:function(e){const t=[...document.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);if(t.length)if(e.testSuiteURI)for(const n of t){const t=Fi(n.dataset.tests.split(/,/gm).map(e=>e.trim()),e.testSuiteURI);Ui(t,n);const r=Wi(t);n.append(r)}else Qe(qi.missing_test_suite_uri,Mi)}});const Gi="core/list-sorter";function Vi(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function Zi(e,t){return[...e.querySelectorAll(":scope > li")].sort(Vi(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function Ki(e,t){return[...e.querySelectorAll(":scope > dt")].sort(Vi(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:i}=t;for(;i&&i.nextSibling;){o.appendChild(i.cloneNode(!0));const{nodeType:e,nodeName:t}=i.nextSibling;if(e===n&&t===r)break;i=i.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var Ji=Object.freeze({__proto__:null,name:Gi,sortListItems:Zi,sortDefinitionTerms:Ki,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=Ki(t,n);break;case"ol":case"ul":e=Zi(t,n);break;default:et(`ReSpec can't sort ${t.localName} elements.`,Gi,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});var Xi=String.raw`var:hover{text-decoration:underline;cursor:pointer} var.respec-hl{color:var(--color,#000);background-color:var(--bg-color);box-shadow:0 0 0 2px var(--bg-color)} var.respec-hl-c1{--bg-color:#f4d200} var.respec-hl-c2{--bg-color:#ff87a2} @@ -335,7 +335,7 @@ var.respec-hl-c6{--bg-color:#82ddff} var.respec-hl-c7{--bg-color:#ffbcf2} @media print{ var.respec-hl{background:0 0;color:#000;box-shadow:unset} -}`;function Xi(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=Ie(e.textContent),n=e.closest("section"),r=Qi(e),o=[...n.querySelectorAll("var")].filter(e=>Ie(e.textContent)===t&&e.closest("section")===n),i=o[0].classList.contains("respec-hl");if(Yi.set(r,i),i)return o.forEach(e=>es(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=Qi(t);n.forEach(t=>es(t,e)),[...Yi.keys()].forEach(e=>Yi.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const Yi=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function Qi(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===Yi.get("respec-hl-c1")?"respec-hl-c1":[...Yi.keys()].find(e=>Yi.get(e))||"respec-hl-c1"}function es(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var ts=Object.freeze({__proto__:null,name:"core/highlight-vars",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=Ji,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",Xi)),ot("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(es)})}});var ns=String.raw`dfn{cursor:pointer} +}`;function Yi(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=Ie(e.textContent),n=e.closest("section"),r=es(e),o=[...n.querySelectorAll("var")].filter(e=>Ie(e.textContent)===t&&e.closest("section")===n),i=o[0].classList.contains("respec-hl");if(Qi.set(r,i),i)return o.forEach(e=>ts(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=es(t);n.forEach(t=>ts(t,e)),[...Qi.keys()].forEach(e=>Qi.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const Qi=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function es(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===Qi.get("respec-hl-c1")?"respec-hl-c1":[...Qi.keys()].find(e=>Qi.get(e))||"respec-hl-c1"}function ts(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var ns=Object.freeze({__proto__:null,name:"core/highlight-vars",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=Xi,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",Yi)),ot("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(ts)})}});var rs=String.raw`dfn{cursor:pointer} .dfn-panel{position:absolute;z-index:35;min-width:300px;max-width:500px;padding:.5em .75em;margin-top:.6em;font:small Helvetica Neue,sans-serif,Droid Sans Fallback;background:#fff;color:#000;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px} .dfn-panel:not(.docked)>.caret{position:absolute;top:-9px} .dfn-panel:not(.docked)>.caret::after,.dfn-panel:not(.docked)>.caret::before{content:"";position:absolute;border:10px solid transparent;border-top:0;border-bottom:10px solid #fff;top:0} @@ -352,7 +352,7 @@ var.respec-hl{background:0 0;color:#000;box-shadow:unset} .dfn-panel a[href]:hover{border-bottom-width:1px} .dfn-panel ul{padding:0} .dfn-panel li{margin-left:1em} -.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}`;function rs(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Ne` +.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}`;function os(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Ne` <aside class="dfn-panel" id="${o}" hidden> <span class="caret"></span> <div> @@ -377,7 +377,7 @@ var.respec-hl{background:0 0;color:#000;box-shadow:unset} ${[...n].map(o)} </ul>`}(t,r)} </aside> - `}var os=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){document.head.insertBefore(Ne`<style> - ${ns} - </style>`,document.querySelector("link"));const e=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),t=document.createDocumentFragment();for(const n of e)t.append(rs(n));document.body.append(t);const n=document.createElement("script");n.id="respec-dfn-panel",n.textContent=await async function(){try{return(await Promise.resolve().then((function(){return ms}))).default}catch{return Ri("./src/core/dfn-panel.runtime.js")}}(),document.body.append(n)}});var is=String.raw`.assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}`;var ss=Object.freeze({__proto__:null,name:"core/algorithms",run:function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=is,document.head.appendChild(e)}}});const as="core/anchor-expander";function ls(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void Qe(`Found matching element "${t}", but it has no title or marker.`,as,{title:"Missing title.",elements:[n]})}const o=Ze(r);n.append(...o.childNodes),n.classList.add("box-ref")}function cs(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void Qe(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,as,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...Ze(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const i=r.querySelector(".fig-title");!n.hasAttribute("title")&&i&&(n.title=Ie(i.textContent))}function us(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)ds(r,n),ps(r,n);else{n.textContent=n.getAttribute("href");Qe("Found matching section, but the section was lacking a heading element.",as,{title:`No matching id in document: "${t}".`,elements:[n]})}}function ds(e,t){const n=e.querySelector(".self-link"),r=[...Ze(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=Fe(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function ps(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var fs=Object.freeze({__proto__:null,name:as,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":ds(n,t);break;case"section":us(n,e,t);break;case"figure":cs(n,e,t);break;case"aside":case"div":ls(n,e,t);break;default:t.textContent=t.getAttribute("href");Qe("ReSpec doesn't support expanding this kind of reference.",as,{title:`Can't expand "#${e}".`,elements:[t]})}ps(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");Qe(`Couldn't expand inline reference. The id "${e}" is not in the document.`,as,{title:`No matching id in document: ${e}.`,elements:[t]})}}}}),hs=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),ms=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'})}(); + `}var is=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){document.head.insertBefore(Ne`<style> + ${rs} + </style>`,document.querySelector("link"));const e=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),t=document.createDocumentFragment();for(const n of e)t.append(os(n));document.body.append(t);const n=document.createElement("script");n.id="respec-dfn-panel",n.textContent=await async function(){try{return(await Promise.resolve().then((function(){return gs}))).default}catch{return ji("./src/core/dfn-panel.runtime.js")}}(),document.body.append(n)}});var ss=String.raw`.assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}`;var as=Object.freeze({__proto__:null,name:"core/algorithms",run:function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=ss,document.head.appendChild(e)}}});const ls="core/anchor-expander";function cs(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void Qe(`Found matching element "${t}", but it has no title or marker.`,ls,{title:"Missing title.",elements:[n]})}const o=Ze(r);n.append(...o.childNodes),n.classList.add("box-ref")}function us(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void Qe(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,ls,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...Ze(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const i=r.querySelector(".fig-title");!n.hasAttribute("title")&&i&&(n.title=Ie(i.textContent))}function ds(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)ps(r,n),fs(r,n);else{n.textContent=n.getAttribute("href");Qe("Found matching section, but the section was lacking a heading element.",ls,{title:`No matching id in document: "${t}".`,elements:[n]})}}function ps(e,t){const n=e.querySelector(".self-link"),r=[...Ze(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=Fe(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function fs(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var hs=Object.freeze({__proto__:null,name:ls,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":ps(n,t);break;case"section":ds(n,e,t);break;case"figure":us(n,e,t);break;case"aside":case"div":cs(n,e,t);break;default:t.textContent=t.getAttribute("href");Qe("ReSpec doesn't support expanding this kind of reference.",ls,{title:`Can't expand "#${e}".`,elements:[t]})}fs(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");Qe(`Couldn't expand inline reference. The id "${e}" is not in the document.`,ls,{title:`No matching id in document: ${e}.`,elements:[t]})}}}}),ms=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),gs=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'})}(); //# sourceMappingURL=respec-geonovum.js.map diff --git a/builds/respec-geonovum.js.map b/builds/respec-geonovum.js.map index 5e7e8a9fac..ec8ab5a58d 100644 --- a/builds/respec-geonovum.js.map +++ b/builds/respec-geonovum.js.map @@ -1 +1 @@ -{"version":3,"file":"respec-geonovum.js","sources":["../profiles/geonovum.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/styles/ui.css.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/geonovum/defaults.js","../src/styles/respec.css.js","../src/core/style.js","../src/geonovum/style.js","../src/geonovum/l10n.js","../src/core/github.js","../src/core/data-include.js","../src/core/data-transform.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/styles/examples.css.js","../src/core/examples.js","../src/styles/issues-notes.css.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/geonovum/conformance.js","../src/core/exporter.js","../src/ui/save-html.js","../src/ui/search-specref.js","../src/ui/about-respec.js","../src/core/seo.js","../src/styles/highlight.css.js","../src/core/text-loader.js","../src/core/worker.js","../src/core/highlight.js","../src/core/data-tests.js","../src/core/list-sorter.js","../src/styles/var.css.js","../src/core/highlight-vars.js","../src/styles/dfn-panel.css.js","../src/core/dfn-panel.js","../src/styles/algorithms.css.js","../src/core/algorithms.js","../src/core/anchor-expander.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/geonovum/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/geonovum/style.js\"),\n import(\"../src/geonovum/l10n.js\"),\n import(\"../src/core/github.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/geonovum/conformance.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/search-specref.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/data-tests.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n /* Linter must be the last thing to run */\n import(\"../src/core/linter.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/* global define */\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.respec-modal .close-button {\n position: absolute;\n z-index: inherit;\n padding: 0.2em;\n font-weight: bold;\n cursor: pointer;\n margin-left: 5px;\n border: none;\n background: transparent;\n}\n\n#respec-ui {\n position: fixed;\n display: flex;\n flex-direction: row-reverse;\n top: 20px;\n right: 20px;\n width: 202px;\n text-align: right;\n z-index: 9000;\n}\n\n#respec-pill,\n.respec-info-button {\n background: #fff;\n height: 2.5em;\n color: rgb(120, 120, 120);\n border: 1px solid #ccc;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n}\n\n.respec-info-button {\n border: none;\n opacity: 0.75;\n border-radius: 2em;\n margin-right: 1em;\n min-width: 3.5em;\n}\n\n.respec-info-button:focus,\n.respec-info-button:hover {\n opacity: 1;\n transition: opacity 0.2s;\n}\n\n#respec-pill:disabled {\n font-size: 2.8px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(40, 40, 40, 0.2);\n border-right: 1.1em solid rgba(40, 40, 40, 0.2);\n border-bottom: 1.1em solid rgba(40, 40, 40, 0.2);\n border-left: 1.1em solid #ffffff;\n transform: translateZ(0);\n animation: respec-spin 0.5s infinite linear;\n box-shadow: none;\n}\n\n#respec-pill:disabled,\n#respec-pill:disabled:after {\n border-radius: 50%;\n width: 10em;\n height: 10em;\n}\n\n@keyframes respec-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.respec-hidden {\n visibility: hidden;\n opacity: 0;\n transition: visibility 0s 0.2s, opacity 0.2s linear;\n}\n\n.respec-visible {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.2s linear;\n}\n\n#respec-pill:hover,\n#respec-pill:focus {\n color: rgb(0, 0, 0);\n background-color: rgb(245, 245, 245);\n transition: color 0.2s;\n}\n\n#respec-menu {\n position: absolute;\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n background: #fff;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n width: 200px;\n display: none;\n text-align: left;\n margin-top: 32px;\n font-size: 0.8em;\n}\n\n#respec-menu:not([hidden]) {\n display: block;\n}\n\n#respec-menu li {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n.respec-save-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(47%, 2fr));\n grid-gap: 0.5cm;\n padding: 0.5cm;\n}\n\n.respec-save-button:link {\n padding-top: 16px;\n color: rgb(240, 240, 240);\n background: rgb(42, 90, 168);\n justify-self: stretch;\n height: 1cm;\n text-decoration: none;\n text-align: center;\n font-size: inherit;\n border: none;\n border-radius: 0.2cm;\n}\n\n.respec-save-button:link:hover {\n color: white;\n background: rgb(42, 90, 168);\n padding: 0;\n margin: 0;\n border: 0;\n padding-top: 16px;\n}\n\n.respec-save-button:link:focus {\n background: #193766;\n}\n\n#respec-ui button:focus,\n#respec-pill:focus,\n.respec-option:focus {\n outline: 0;\n outline-style: none;\n}\n\n#respec-pill-error {\n background-color: red;\n color: white;\n}\n\n#respec-pill-warning {\n background-color: orange;\n color: white;\n}\n\n.respec-warning-list,\n.respec-error-list {\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: sans-serif;\n background-color: rgb(255, 251, 230);\n font-size: 0.85em;\n}\n\n.respec-warning-list > li,\n.respec-error-list > li {\n padding: 0.4em 0.7em;\n}\n\n.respec-warning-list > li::before {\n content: \"⚠️\";\n padding-right: 0.5em;\n}\n.respec-warning-list p,\n.respec-error-list p {\n padding: 0;\n margin: 0;\n}\n\n.respec-warning-list li {\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 245, 194);\n}\n\n.respec-error-list,\n.respec-error-list li {\n background-color: rgb(255, 240, 240);\n}\n\n.respec-error-list li::before {\n content: \"💥\";\n padding-right: 0.5em;\n}\n\n.respec-error-list li {\n padding: 0.4em 0.7em;\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 215, 215);\n}\n\n.respec-error-list li > p {\n margin: 0;\n padding: 0;\n display: inline-block;\n}\n\n.respec-error-list li > p:first-child,\n.respec-warning-list li > p:first-child {\n display: inline;\n}\n\n.respec-warning-list > li li,\n.respec-error-list > li li {\n margin: 0;\n list-style: disc;\n}\n\n#respec-overlay {\n display: block;\n position: fixed;\n z-index: 10000;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n background: #000;\n}\n\n.respec-show-overlay {\n transition: opacity 0.2s linear;\n opacity: 0.5;\n}\n\n.respec-hide-overlay {\n transition: opacity 0.2s linear;\n opacity: 0;\n}\n\n.respec-modal {\n display: block;\n position: fixed;\n z-index: 11000;\n margin: auto;\n top: 10%;\n background: #fff;\n border: 5px solid #666;\n min-width: 20%;\n width: 79%;\n padding: 0;\n max-height: 80%;\n overflow-y: auto;\n margin: 0 -0.5cm;\n}\n\n@media screen and (min-width: 78em) {\n .respec-modal {\n width: 62%;\n }\n}\n\n.respec-modal h3 {\n margin: 0;\n padding: 0.2em;\n text-align: center;\n color: black;\n background: linear-gradient(\n to bottom,\n rgba(238, 238, 238, 1) 0%,\n rgba(238, 238, 238, 1) 50%,\n rgba(204, 204, 204, 1) 100%\n );\n font-size: 1em;\n}\n\n.respec-modal .inside div p {\n padding-left: 1cm;\n}\n\n#respec-menu button.respec-option {\n background: white;\n padding: 0 0.2cm;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n padding: 1.2em 1.2em;\n}\n\n#respec-menu button.respec-option:hover,\n#respec-menu button:focus {\n background-color: #eeeeee;\n}\n\n.respec-cmd-icon {\n padding-right: 0.5em;\n}\n\n#respec-ui button.respec-option:last-child {\n border: none;\n border-radius: inherit;\n}\n\n.respec-button-copy-paste {\n position: absolute;\n height: 28px;\n width: 40px;\n cursor: pointer;\n background-image: linear-gradient(#fcfcfc, #eee);\n border: 1px solid rgb(144, 184, 222);\n border-left: 0;\n border-radius: 0px 0px 3px 0;\n -webkit-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n top: 0;\n left: 127px;\n}\n\n@media print {\n #respec-ui {\n display: none;\n }\n}\n\n.respec-iframe {\n width: 100%;\n min-height: 550px;\n height: 100%;\n overflow: hidden;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n.respec-iframe:not(.ready) {\n background: url(\"https://respec.org/xref/loader.gif\") no-repeat center;\n}\n\n.respec-iframe + a[href] {\n font-size: 0.9rem;\n float: right;\n margin: 0 0.5em 0.5em;\n border-bottom-width: 1px;\n}\n`;\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport css from \"../styles/ui.css.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Sets the defaults for Geonovum documents\n */\nexport const name = \"geonovum/defaults\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\n\nlinter.register(privsecSectionRule);\n\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n [\n \"cc-by-nd\",\n {\n name:\n \"Creative Commons Attribution-NoDerivatives 4.0 International Public License\",\n short: \"CC-BY-ND\",\n url: \"https://creativecommons.org/licenses/by-nd/4.0/legalcode.nl\",\n },\n ],\n]);\n\nconst geonovumDefaults = {\n lint: {\n \"privsec-section\": true,\n },\n doJsonLd: true,\n license: \"cc-by\",\n specStatus: \"GN-BASIS\",\n logos: [\n {\n src: \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg\",\n alt: \"Geonovum\",\n id: \"Geonovum\",\n height: 67,\n width: 132,\n url: \"https://www.geonovum.nl/\",\n },\n ],\n};\n\nfunction computeProps(conf) {\n return {\n isCCBY: conf.license === \"cc-by\",\n licenseInfo: licenses.get(conf.license),\n isBasic: conf.specStatus === \"GN-BASIS\",\n isRegular: conf.specStatus === \"GN-BASIS\",\n };\n}\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...geonovumDefaults.lint,\n ...conf.lint,\n };\n Object.assign(conf, {\n ...coreDefaults,\n ...geonovumDefaults,\n ...conf,\n lint,\n });\n // computed properties\n Object.assign(conf, computeProps(conf));\n}\n","/* ReSpec specific CSS */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n@keyframes pop {\n 0% {\n transform: scale(1, 1);\n }\n 25% {\n transform: scale(1.25, 1.25);\n opacity: 0.75;\n }\n 100% {\n transform: scale(1, 1);\n }\n}\n\n/* Override code highlighter background */\n.hljs {\n background: transparent !important;\n}\n\n/* --- INLINES --- */\nh1 abbr,\nh2 abbr,\nh3 abbr,\nh4 abbr,\nh5 abbr,\nh6 abbr,\na abbr {\n border: none;\n}\n\ndfn {\n font-weight: bold;\n}\n\na.internalDFN {\n color: inherit;\n border-bottom: 1px solid #99c;\n text-decoration: none;\n}\n\na.externalDFN {\n color: inherit;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\na.bibref {\n text-decoration: none;\n}\n\n.respec-offending-element:target {\n animation: pop 0.25s ease-in-out 0s 1;\n}\n\n.respec-offending-element,\na[href].respec-offending-element {\n text-decoration: red wavy underline;\n}\n@supports not (text-decoration: red wavy underline) {\n .respec-offending-element:not(pre) {\n display: inline-block;\n }\n .respec-offending-element {\n /* Red squiggly line */\n background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=)\n bottom repeat-x;\n }\n}\n\n#references :target {\n background: #eaf3ff;\n animation: pop 0.4s ease-in-out 0s 1;\n}\n\ncite .bibref {\n font-style: normal;\n}\n\ncode {\n color: #c63501;\n}\n\nth code {\n color: inherit;\n}\n\na[href].orcid {\n padding-left: 4px;\n padding-right: 4px;\n}\n\na[href].orcid > svg {\n margin-bottom: -2px;\n}\n\n/* --- TOC --- */\n\n.toc a,\n.tof a {\n text-decoration: none;\n}\n\na .secno,\na .figno {\n color: #000;\n}\n\nul.tof,\nol.tof {\n list-style: none outside none;\n}\n\n.caption {\n margin-top: 0.5em;\n font-style: italic;\n}\n\n/* --- TABLE --- */\n\ntable.simple {\n border-spacing: 0;\n border-collapse: collapse;\n border-bottom: 3px solid #005a9c;\n}\n\n.simple th {\n background: #005a9c;\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th a {\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th[scope=\"row\"] {\n background: inherit;\n color: inherit;\n border-top: 1px solid #ddd;\n}\n\n.simple td {\n padding: 3px 10px;\n border-top: 1px solid #ddd;\n}\n\n.simple tr:nth-child(even) {\n background: #f0f6ff;\n}\n\n/* --- DL --- */\n\n.section dd > p:first-child {\n margin-top: 0;\n}\n\n.section dd > p:last-child {\n margin-bottom: 0;\n}\n\n.section dd {\n margin-bottom: 1em;\n}\n\n.section dl.attrs dd,\n.section dl.eldef dd {\n margin-bottom: 0;\n}\n\n#issue-summary > ul {\n column-count: 2;\n}\n\n#issue-summary li {\n list-style: none;\n display: inline-block;\n}\n\ndetails.respec-tests-details {\n margin-left: 1em;\n display: inline-block;\n vertical-align: top;\n}\n\ndetails.respec-tests-details > * {\n padding-right: 2em;\n}\n\ndetails.respec-tests-details[open] {\n z-index: 999999;\n position: absolute;\n border: thin solid #cad3e2;\n border-radius: 0.3em;\n background-color: white;\n padding-bottom: 0.5em;\n}\n\ndetails.respec-tests-details[open] > summary {\n border-bottom: thin solid #cad3e2;\n padding-left: 1em;\n margin-bottom: 1em;\n line-height: 2em;\n}\n\ndetails.respec-tests-details > ul {\n width: 100%;\n margin-top: -0.3em;\n}\n\ndetails.respec-tests-details > li {\n padding-left: 1em;\n}\n\na[href].self-link:hover {\n opacity: 1;\n text-decoration: none;\n background-color: transparent;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n position: relative;\n}\n\naside.example .marker > a.self-link {\n color: inherit;\n}\n\nh2 > a.self-link,\nh3 > a.self-link,\nh4 > a.self-link,\nh5 > a.self-link,\nh6 > a.self-link {\n border: none;\n color: inherit;\n font-size: 83%;\n height: 2em;\n left: -1.6em;\n opacity: 0.5;\n position: absolute;\n text-align: center;\n text-decoration: none;\n top: 0;\n transition: opacity 0.2s;\n width: 2em;\n}\n\nh2 > a.self-link::before,\nh3 > a.self-link::before,\nh4 > a.self-link::before,\nh5 > a.self-link::before,\nh6 > a.self-link::before {\n content: \"§\";\n display: block;\n}\n\n@media (max-width: 767px) {\n dd {\n margin-left: 0;\n }\n\n /* Don't position self-link in headings off-screen */\n h2 > a.self-link,\n h3 > a.self-link,\n h4 > a.self-link,\n h5 > a.self-link,\n h6 > a.self-link {\n left: auto;\n top: auto;\n }\n}\n\n@media print {\n .removeOnSave {\n display: none;\n }\n}\n`;\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport css from \"../styles/respec.css.js\";\n\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = css;\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport function run(conf) {\n if (conf.noReSpecCSS) {\n styleElement.remove();\n }\n}\n","// @ts-check\n// Module geonovum/style\n// Inserts a link to the appropriate Geonovum style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"geonovum/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n script.addEventListener(\n \"load\",\n () => {\n if (window.location.hash) {\n window.location.href = window.location.hash;\n }\n },\n { once: true }\n );\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createStyle(css_name) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = `https://tools.geostandaarden.nl/respec/style/${css_name}.css`;\n return link;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C fixup.js\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preconnect\", // for Geonovum styles and scripts.\n href: \"https://tools.geostandaarden.nl/\",\n },\n {\n hint: \"preload\", // all Geonovum specs import base.css.\n href: \"https://tools.geostandaarden.nl/respec/style/base.css\",\n as: \"style\",\n },\n {\n hint: \"preload\", // all Geonovum specs show the logo.\n href: \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg\",\n as: \"image\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// add favicon for Geonovum\nconst favicon = document.createElement(\"link\");\nfavicon.rel = \"shortcut icon\";\nfavicon.type = \"image/x-icon\";\nfavicon.href =\n \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.ico\";\ndocument.head.prepend(favicon);\n\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\n// export function run(conf, doc, cb) {\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'GN-BASIS'.\";\n conf.specStatus = \"GN-BASIS\";\n showWarning(msg, name);\n }\n\n if (document.body.querySelector(\"figure.scalable\")) {\n // Apply leaflet style if class scalable is present\n document.head.appendChild(createStyle(\"leaflet\"));\n document.head.appendChild(createStyle(\"font-awesome\"));\n }\n\n let styleFile = \"\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"GN-WV\":\n styleFile += \"GN-WV.css\";\n break;\n case \"GN-CV\":\n styleFile += \"GN-CV.css\";\n break;\n case \"GN-VV\":\n styleFile += \"GN-VV.css\";\n break;\n case \"GN-DEF\":\n styleFile += \"GN-DEF.css\";\n break;\n case \"GN-BASIS\":\n styleFile += \"GN-BASIS.css\";\n break;\n default:\n styleFile = \"base.css\";\n }\n\n if (!conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, \"2016\");\n },\n { once: true }\n );\n }\n const finalStyleURL = `https://tools.geostandaarden.nl/respec/style/${styleFile}`;\n linkCSS(document, finalStyleURL);\n}\n","// @ts-check\n// Module geonovum/l10n\n// Looks at the lang attribute on the root element and uses it to manage the config.l10n object so\n// that other parts of the system can localise their text\nimport { html } from \"../core/import-maps.js\";\nimport { l10n } from \"../core/l10n.js\";\nexport const name = \"geonovum/l10n\";\nconst additions = {\n en: {\n status_at_publication: html`This section describes the status of this\n document at the time of its publication. Other documents may supersede\n this document. A list of current Geonovum publications and the latest\n revision of this document can be found via\n <a href=\"https://www.geonovum.nl/geo-standaarden/alle-standaarden\"\n >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a\n >(in Dutch).`,\n },\n nl: {\n status_at_publication: html`Deze paragraaf beschrijft de status van dit\n document ten tijde van publicatie. Het is mogelijk dat er actuelere\n versies van dit document bestaan. Een lijst van Geonovum publicaties en de\n laatste gepubliceerde versie van dit document zijn te vinden op\n <a href=\"https://www.geonovum.nl/geo-standaarden/alle-standaarden\"\n >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a\n >.`,\n },\n};\n\nObject.keys(additions).forEach(key => {\n if (!l10n[key]) l10n[key] = {};\n Object.assign(l10n[key], additions[key]);\n});\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://api.specref.org/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\n/** @param {BiblioData|string} ref */\nfunction stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","/* --- EXAMPLES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nspan.example-title {\n text-transform: none;\n}\n\naside.example,\ndiv.example,\ndiv.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\n\ndiv.illegal-example {\n color: red;\n}\n\ndiv.illegal-example p {\n color: black;\n}\n\naside.example,\ndiv.example {\n padding: 0.5em;\n border-left-width: 0.5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: 0.1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example span.example-title {\n color: #999;\n}\n\n.example pre {\n background-color: rgba(0, 0, 0, 0.03);\n}\n`;\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport css from \"../styles/examples.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","/* --- ISSUES/NOTES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.issue-label {\n text-transform: initial;\n}\n\n.warning > p:first-child { margin-top: 0 }\n.warning {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n}\nspan.warning { padding: .1em .5em .15em; }\n\n.issue.closed span.issue-number {\n text-decoration: line-through;\n}\n\n.warning {\n border-color: #f11;\n border-width: .2em;\n border-style: solid;\n background: #fbe9e9;\n}\n\n.warning-title:before{\n content: \"⚠\"; /*U+26A0 WARNING SIGN*/\n font-size: 1.3em;\n float: left;\n padding-right: .3em;\n margin-top: -0.3em;\n}\n\nli.task-list-item {\n list-style: none;\n}\n\ninput.task-list-item-checkbox {\n margin: 0 0.35em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.issue a.respec-gh-label {\n padding: 5px;\n margin: 0 2px 0 2px;\n font-size: 10px;\n text-transform: none;\n text-decoration: none;\n font-weight: bold;\n border-radius: 4px;\n position: relative;\n bottom: 2px;\n border: none;\n display: inline-block;\n}\n`;\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport css from \"../styles/issues-notes.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","// @ts-check\n// Module geonovum/conformance\n// Handle the conformance section properly.\n// based on W3C conformance, but because Geonovum has different requirements, have a separate module\nimport { html } from \"../core/import-maps.js\";\nexport const name = \"geonovum/conformance\";\n\n/**\n * @param {Element} conformance\n */\nfunction processConformance(conformance) {\n const content = html`\n <h2>Conformiteit</h2>\n <p>\n Naast onderdelen die als niet normatief gemarkeerd zijn, zijn ook alle\n diagrammen, voorbeelden, en noten in dit document niet normatief. Verder\n is alles in dit document normatief.\n </p>\n <p>Informatief en normatief.</p>\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run() {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance) {\n processConformance(conformance);\n }\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nfunction serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/search-specref\n// Search Specref database\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst URL = \"https://respec.org/specref/\";\n\nconst localizationStrings = {\n en: {\n search_specref: \"Search Specref\",\n },\n nl: {\n search_specref: \"Doorzoek Specref\",\n },\n ja: {\n search_specref: \"仕様検索\",\n },\n de: {\n search_specref: \"Spezifikationen durchsuchen\",\n },\n zh: {\n search_specref: \"搜索 Specref\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst button = ui.addCommand(\n l10n.search_specref,\n show,\n \"Ctrl+Shift+Alt+space\",\n \"🔎\"\n);\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n /** @type {HTMLElement} */\n const specrefSearchUI = html`\n <iframe class=\"respec-iframe\" src=\"${URL}\" onload=${onLoad}></iframe>\n <a href=\"${URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.search_specref, specrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","/*\nAdapted from Atom One Light by Daniel Gamage for ReSpec, with better color contrast\nOriginal One Light Syntax theme from https://github.com/atom/one-light-syntax\nbase: #fafafa\nmono-1: #383a42\nmono-2: #686b77\nmono-3: #a0a1a7\nhue-1: #0184bb\nhue-2: #4078f2\nhue-3: #a626a4\nhue-4: #50a14f\nhue-5: #e45649\nhue-5-2: #c91243\nhue-6: #986801\nhue-6-2: #c18401\n*/\n\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n color: #383a42;\n background: #fafafa;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #717277;\n font-style: italic;\n}\n\n.hljs-doctag,\n.hljs-keyword,\n.hljs-formula {\n color: #a626a4;\n}\n\n.hljs-section,\n.hljs-name,\n.hljs-selector-tag,\n.hljs-deletion,\n.hljs-subst {\n color: #ca4706;\n font-weight: bold;\n}\n\n.hljs-literal {\n color: #0b76c5;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta-string {\n color: #42803C;\n}\n\n.hljs-built_in,\n.hljs-class .hljs-title {\n color: #9a6a01;\n}\n\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-type,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-number {\n color: #986801;\n}\n\n.hljs-symbol,\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-title {\n color: #336ae3;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n.hljs-link {\n text-decoration: underline;\n}\n`;\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport css from \"../styles/highlight.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n document.head.appendChild(\n html`<style>\n ${css}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\n/**\n * Module core/data-tests\n *\n * Allows specs to link to test files in a test suite, by adding `details` of where\n * particular tests for a testable assertion can be found.\n *\n * `data-tests` takes a space separated list of URLs, e.g. data-test=\"foo.html bar.html\".\n *\n * Docs: https://github.com/w3c/respec/wiki/data-tests\n */\nimport { getIntlData, showError, showWarning } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst localizationStrings = {\n en: {\n missing_test_suite_uri:\n \"Found tests in your spec, but missing '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.\",\n tests: \"tests\",\n test: \"test\",\n },\n ja: {\n missing_test_suite_uri:\n \"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.\",\n tests: \"テスト\",\n test: \"テスト\",\n },\n de: {\n missing_test_suite_uri:\n \"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.\",\n tests: \"Tests\",\n test: \"Test\",\n },\n zh: {\n missing_test_suite_uri:\n \"本规范中包含测试,但在 ReSpec 配置中缺少 '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。\",\n tests: \"测试\",\n test: \"测试\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport const name = \"core/data-tests\";\n\nfunction toListItem(href) {\n const emojiList = [];\n const [testFile] = new URL(href).pathname.split(\"/\").reverse();\n const testParts = testFile.split(\".\");\n let [testFileName] = testParts;\n\n const isSecureTest = testParts.find(part => part === \"https\");\n if (isSecureTest) {\n const requiresConnectionEmoji = document.createElement(\"span\");\n requiresConnectionEmoji.textContent = \"🔒\";\n requiresConnectionEmoji.setAttribute(\n \"aria-label\",\n \"requires a secure connection\"\n );\n requiresConnectionEmoji.setAttribute(\"title\", \"Test requires HTTPS\");\n testFileName = testFileName.replace(\".https\", \"\");\n emojiList.push(requiresConnectionEmoji);\n }\n\n const isManualTest = testFileName\n .split(\".\")\n .join(\"-\")\n .split(\"-\")\n .find(part => part === \"manual\");\n if (isManualTest) {\n const manualPerformEmoji = document.createElement(\"span\");\n manualPerformEmoji.textContent = \"💪\";\n manualPerformEmoji.setAttribute(\n \"aria-label\",\n \"the test must be run manually\"\n );\n manualPerformEmoji.setAttribute(\"title\", \"Manual test\");\n testFileName = testFileName.replace(\"-manual\", \"\");\n emojiList.push(manualPerformEmoji);\n }\n\n const testList = html`\n <li>\n <a href=\"${href}\">${testFileName}</a>\n ${emojiList}\n </li>\n `;\n return testList;\n}\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n if (!testables.length) {\n return;\n }\n if (!conf.testSuiteURI) {\n showError(l10n.missing_test_suite_uri, name);\n return;\n }\n\n for (const elem of testables) {\n const tests = elem.dataset.tests.split(/,/gm).map(url => url.trim());\n const testURLs = toTestURLs(tests, conf.testSuiteURI);\n handleDuplicates(testURLs, elem);\n const details = toHTML(testURLs);\n elem.append(details);\n }\n}\n\n/**\n * @param {string[]} tests\n * @param {string} testSuiteURI\n */\nfunction toTestURLs(tests, testSuiteURI) {\n return tests\n .map(test => {\n try {\n return new URL(test, testSuiteURI).href;\n } catch {\n const msg = `Bad URI: ${test}`;\n showWarning(msg, name);\n }\n })\n .filter(href => href);\n}\n\n/**\n * @param {string[]} testURLs\n * @param {HTMLElement} elem\n */\nfunction handleDuplicates(testURLs, elem) {\n const duplicates = testURLs.filter(\n (link, i, self) => self.indexOf(link) !== i\n );\n if (duplicates.length) {\n const msg = `Duplicate tests found`;\n const hint = `To fix, remove duplicates from \"data-tests\": ${duplicates\n .map(url => new URL(url).pathname)\n .join(\", \")}`;\n showWarning(msg, name, { hint, elements: [elem] });\n }\n}\n\n/**\n * @param {string[]} testURLs\n */\nfunction toHTML(testURLs) {\n const uniqueList = [...new Set(testURLs)];\n const details = html`\n <details class=\"respec-tests-details removeOnSave\">\n <summary>tests: ${uniqueList.length}</summary>\n <ul>\n ${uniqueList.map(toListItem)}\n </ul>\n </details>\n `;\n return details;\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\nvar.respec-hl {\n color: var(--color, #000);\n background-color: var(--bg-color);\n box-shadow: 0 0 0px 2px var(--bg-color);\n}\n\n/* highlight colors\n https://github.com/w3c/tr-design/issues/152\n*/\nvar.respec-hl-c1 {\n --bg-color: #f4d200;\n}\n\nvar.respec-hl-c2 {\n --bg-color: #ff87a2;\n}\n\nvar.respec-hl-c3 {\n --bg-color: #96e885;\n}\n\nvar.respec-hl-c4 {\n --bg-color: #3eeed2;\n}\n\nvar.respec-hl-c5 {\n --bg-color: #eacfb6;\n}\n\nvar.respec-hl-c6 {\n --bg-color: #82ddff;\n}\n\nvar.respec-hl-c7 {\n --bg-color: #ffbcf2;\n}\n\n@media print {\n var.respec-hl {\n background: none;\n color: #000;\n box-shadow: unset;\n }\n}\n`;\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport css from \"../styles/var.css.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","/* dfn popup panel that list all local references to a dfn */\n/**\n * TODO: Revert changes due to https://github.com/w3c/respec/pull/2888 when\n * https://github.com/w3c/css-validator/pull/111 is fixed.\n */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\ndfn {\n cursor: pointer;\n}\n\n.dfn-panel {\n position: absolute;\n z-index: 35;\n min-width: 300px;\n max-width: 500px;\n padding: 0.5em 0.75em;\n margin-top: 0.6em;\n font: small Helvetica Neue, sans-serif, Droid Sans Fallback;\n background: #fff;\n color: black;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n}\n/* Triangle/caret */\n.dfn-panel:not(.docked) > .caret {\n position: absolute;\n top: -9px;\n}\n.dfn-panel:not(.docked) > .caret::before,\n.dfn-panel:not(.docked) > .caret::after {\n content: \"\";\n position: absolute;\n border: 10px solid transparent;\n border-top: 0;\n border-bottom: 10px solid #fff;\n top: 0;\n}\n.dfn-panel:not(.docked) > .caret::before {\n border-bottom: 9px solid #a2a9b1;\n}\n\n.dfn-panel * {\n margin: 0;\n}\n\n.dfn-panel b {\n display: block;\n color: #000;\n margin-top: 0.25em;\n}\n\n.dfn-panel ul a[href] {\n color: #333;\n}\n\n.dfn-panel > div {\n display: flex;\n}\n\n.dfn-panel a.self-link {\n font-weight: bold;\n margin-right: auto;\n}\n\n.dfn-panel .marker {\n padding: 0.1em;\n margin-left: 0.5em;\n border-radius: 0.2em;\n text-align: center;\n white-space: nowrap;\n font-size: 90%;\n color: #040b1c;\n}\n\n.dfn-panel .marker.dfn-exported {\n background: #d1edfd;\n box-shadow: 0 0 0 0.125em #1ca5f940;\n}\n.dfn-panel .marker.idl-block {\n background: #8ccbf2;\n box-shadow: 0 0 0 0.125em #0670b161;\n}\n\n.dfn-panel a:not(:hover) {\n text-decoration: none !important;\n border-bottom: none !important;\n}\n\n.dfn-panel a[href]:hover {\n border-bottom-width: 1px;\n}\n\n.dfn-panel ul {\n padding: 0;\n}\n\n.dfn-panel li {\n margin-left: 1em;\n}\n\n.dfn-panel.docked {\n position: fixed;\n left: 0.5em;\n top: unset;\n bottom: 2em;\n margin: 0 auto;\n /* 0.75em from padding (x2), 0.5em from left position, 0.2em border (x2) */\n max-width: calc(100vw - 0.75em * 2 - 0.5em - 0.2em * 2);\n max-height: 30vh;\n overflow: auto;\n}\n`;\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport css from \"../styles/dfn-panel.css.js\";\nimport { fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","/* For assertions in lists containing algorithms */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.assert {\n background: #eee;\n border-left: 0.5em solid #aaa;\n padding: 0.3em;\n}\n`;\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\nimport css from \"../styles/algorithms.css.js\";\n\nexport const name = \"core/algorithms\";\n\nexport function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","test","rtrim","relativeBase","indexOf","str","invert","l","length","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","source","obj","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","key","i","arguments","Object","hasOwnProperty","splitCells","tableRow","count","cells","match","offset","escaped","curr","split","splice","push","trim","findClosingBracket","b","level","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","raw","title","text","type","Tokenizer_1","options","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","slice","join","indentCodeCompensation","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","def","tag","table","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","nextChar","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","lastIndex","Math","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","tokens","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","token","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","body","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parse","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","unshift","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","t","defineProperty","r","a","delete","configurable","o","s","WeakSet","add","m","u","insertBefore","selected","selectedIndex","f","querySelectorAll","y","w","x","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","v","p","g","Array","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","constructor","_wire$","defineProperties","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","isArray","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","concat","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","attribute","values","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","it","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","dispatch","component","setState","idb","_idb","_marked","_pluralize","getIntlData","x_and_y","x_y_and_z","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","array","mapper","docLang","Intl","ListFormat","format","lastComma","and","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","data","runTransforms","flist","funcArgs","methods","meth","showWarning","addId","pfx","txt","noLC","id","normalize","getElementById","nextId","getDfnTitles","titleSet","Set","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","ref","element","closestInformative","closest","isInformative","querySelector","startsWith","illegal","wrapInner","outer","wrapper","parents","selector","parent","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","super","getCanonicalKey","existingKey","find","makeSafeCopy","clone","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","comment","walkTree","nextNode","CaseInsensitiveMap","entries","RespecError","plugin","isWarning","assign","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","subscriptions","topic","from","cb","arg","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","respecVersion","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","head","includeConfig","params","URLSearchParams","search","overrideEntries","filter","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","reindent","lines","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","prepend","Builder","current","tagName","position","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","indentation","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","css","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hash","hasLink","isLegacyFrag","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","zh","defaultLang","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","nl","hasNoHeading","offendingMembers","getOwnPropertyNames","endsWith","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","isRecTrack","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","specStatus","highlightVars","addSectionLinks","privsecSectionRule","licenses","short","geonovumDefaults","doJsonLd","license","logos","alt","height","width","isCCBY","licenseInfo","isBasic","isRegular","computeProps","insertStyle","noReSpecCSS","createStyle","css_name","resourceHints","createResourceHints","favicon","delimiter","separator","toKeyValuePairs","initial-scale","shrink-to-fit","createMetaViewport","styleFile","noToc","attachFixupScript","styles","frag","reduce","nextLink","linkCSS","additions","status_at_publication","resolveGithubPromise","rejectGithubPromise","github","file_a_bug","participate","commit_history","ko","ja","es","ghURL","tempURL","repoURL","org","repo","pathname","branch","issueBase","newProps","edDraftURI","githubToken","githubUser","atRiskBase","otherLinks","pullBase","shortName","otherLink","githubAPI","hostname","normalizedGHObj","apiBase","fullName","normalizedConfig","processResponse","rawData","el","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","include","includeId","response","fetch","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","identifier","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","joined","htmlJoinComma","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","pop","allArgs","SyntaxError","reverse","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","unique","openIdb","biblioDB","isAlias","resolveAlias","TypeError","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","reference","promisesToAdd","flatMap","isInDB","put","close","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","ok","status","json","addAll","resolveRef","entry","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","authors","etAl","publisher","date","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","abbr","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","terms","plurals","size","userDefinedPlurals","uniquePlurals","makeTitle","num","report","number","examples","contains","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","note","handleIssues","ins","ghIssues","getIssueNumber","Number","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","searchParams","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","hasChildNodes","insertAdjacentHTML","makeIssueSectionSummary","issuesAndNotes","issueNumbers","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","container","list_of_figures","fig","img","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","every","decorateTableOfFigures","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","cleanup","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","duplicates","dfnFor","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","idl","first","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","xref","editors","editor","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","res","input","maxAge","Request","cache","cachedResponse","caches","Date","headers","clonedResponse","customHeaders","Headers","expiryDate","now","toISOString","cacheResponse","Response","blob","fetchAndCache","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","prefix","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","span","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","isNaN","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","conformance","processConformance","mimeTypes","rsDocToDataURL","mimeType","validTypes","cloneDoc","insertions","metaViewport","metaCharset","metaGenerator","XMLSerializer","serializeToString","outerHTML","prettify","doctype","encodeURIComponent","save_snapshot","downloadLinks","fileName","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","search_specref","specrefSearchUI","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","fetchBase","workerPromise","workerScript","default","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","namespace","counter","gen","idGenerator","msgIdGenerator","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","missing_test_suite_uri","tests","toListItem","emojiList","testFile","testParts","testFileName","requiresConnectionEmoji","manualPerformEmoji","toTestURLs","testSuiteURI","handleDuplicates","testURLs","uniqueList","testables","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","re","activeClass","outputDoc","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors"],"mappings":"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,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC5f6BkC,GAAU,SAASC,GAAgB,IAAIC,EAAE,GAAG,IAAIA,EAAE5b,QAAQA,QAAQ,MAAMuK,GAAGqR,EAAE5b,QAAQ,SAAS4b,EAAErR,GAAG,IAAI1C,EAAE0C,EAAEsR,eAAeC,EAAEvR,EAAES,eAAeH,EAAEkR,EAAEza,UAAU,OAAOuJ,EAAEmR,OAAO,SAASzR,GAAG,OAAOvI,KAAKd,IAAIqJ,WAAWA,EAAEvI,KAAK4F,IAAIiD,EAAElK,IAAI,SAAS4J,GAAG,OAAOvI,KAAKd,IAAIqJ,GAAGA,EAAEvI,KA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"} \ No newline at end of file +{"version":3,"file":"respec-geonovum.js","sources":["../profiles/geonovum.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/exporter.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/styles/ui.css.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/geonovum/defaults.js","../src/styles/respec.css.js","../src/core/style.js","../src/geonovum/style.js","../src/geonovum/l10n.js","../src/core/github.js","../src/core/data-include.js","../src/core/data-transform.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/styles/examples.css.js","../src/core/examples.js","../src/styles/issues-notes.css.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/geonovum/conformance.js","../src/ui/save-html.js","../src/ui/search-specref.js","../src/ui/about-respec.js","../src/core/seo.js","../src/styles/highlight.css.js","../src/core/text-loader.js","../src/core/worker.js","../src/core/highlight.js","../src/core/data-tests.js","../src/core/list-sorter.js","../src/styles/var.css.js","../src/core/highlight-vars.js","../src/styles/dfn-panel.css.js","../src/core/dfn-panel.js","../src/styles/algorithms.css.js","../src/core/algorithms.js","../src/core/anchor-expander.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/geonovum/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/geonovum/style.js\"),\n import(\"../src/geonovum/l10n.js\"),\n import(\"../src/core/github.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/geonovum/conformance.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/search-specref.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/data-tests.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n /* Linter must be the last thing to run */\n import(\"../src/core/linter.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/* global define */\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nexport function serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { serialize } from \"../core/exporter.js\";\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n\n async toHTML() {\n return serialize(\"html\", document);\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.respec-modal .close-button {\n position: absolute;\n z-index: inherit;\n padding: 0.2em;\n font-weight: bold;\n cursor: pointer;\n margin-left: 5px;\n border: none;\n background: transparent;\n}\n\n#respec-ui {\n position: fixed;\n display: flex;\n flex-direction: row-reverse;\n top: 20px;\n right: 20px;\n width: 202px;\n text-align: right;\n z-index: 9000;\n}\n\n#respec-pill,\n.respec-info-button {\n background: #fff;\n height: 2.5em;\n color: rgb(120, 120, 120);\n border: 1px solid #ccc;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n}\n\n.respec-info-button {\n border: none;\n opacity: 0.75;\n border-radius: 2em;\n margin-right: 1em;\n min-width: 3.5em;\n}\n\n.respec-info-button:focus,\n.respec-info-button:hover {\n opacity: 1;\n transition: opacity 0.2s;\n}\n\n#respec-pill:disabled {\n font-size: 2.8px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(40, 40, 40, 0.2);\n border-right: 1.1em solid rgba(40, 40, 40, 0.2);\n border-bottom: 1.1em solid rgba(40, 40, 40, 0.2);\n border-left: 1.1em solid #ffffff;\n transform: translateZ(0);\n animation: respec-spin 0.5s infinite linear;\n box-shadow: none;\n}\n\n#respec-pill:disabled,\n#respec-pill:disabled:after {\n border-radius: 50%;\n width: 10em;\n height: 10em;\n}\n\n@keyframes respec-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.respec-hidden {\n visibility: hidden;\n opacity: 0;\n transition: visibility 0s 0.2s, opacity 0.2s linear;\n}\n\n.respec-visible {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.2s linear;\n}\n\n#respec-pill:hover,\n#respec-pill:focus {\n color: rgb(0, 0, 0);\n background-color: rgb(245, 245, 245);\n transition: color 0.2s;\n}\n\n#respec-menu {\n position: absolute;\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n background: #fff;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n width: 200px;\n display: none;\n text-align: left;\n margin-top: 32px;\n font-size: 0.8em;\n}\n\n#respec-menu:not([hidden]) {\n display: block;\n}\n\n#respec-menu li {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n.respec-save-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(47%, 2fr));\n grid-gap: 0.5cm;\n padding: 0.5cm;\n}\n\n.respec-save-button:link {\n padding-top: 16px;\n color: rgb(240, 240, 240);\n background: rgb(42, 90, 168);\n justify-self: stretch;\n height: 1cm;\n text-decoration: none;\n text-align: center;\n font-size: inherit;\n border: none;\n border-radius: 0.2cm;\n}\n\n.respec-save-button:link:hover {\n color: white;\n background: rgb(42, 90, 168);\n padding: 0;\n margin: 0;\n border: 0;\n padding-top: 16px;\n}\n\n.respec-save-button:link:focus {\n background: #193766;\n}\n\n#respec-ui button:focus,\n#respec-pill:focus,\n.respec-option:focus {\n outline: 0;\n outline-style: none;\n}\n\n#respec-pill-error {\n background-color: red;\n color: white;\n}\n\n#respec-pill-warning {\n background-color: orange;\n color: white;\n}\n\n.respec-warning-list,\n.respec-error-list {\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: sans-serif;\n background-color: rgb(255, 251, 230);\n font-size: 0.85em;\n}\n\n.respec-warning-list > li,\n.respec-error-list > li {\n padding: 0.4em 0.7em;\n}\n\n.respec-warning-list > li::before {\n content: \"⚠️\";\n padding-right: 0.5em;\n}\n.respec-warning-list p,\n.respec-error-list p {\n padding: 0;\n margin: 0;\n}\n\n.respec-warning-list li {\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 245, 194);\n}\n\n.respec-error-list,\n.respec-error-list li {\n background-color: rgb(255, 240, 240);\n}\n\n.respec-error-list li::before {\n content: \"💥\";\n padding-right: 0.5em;\n}\n\n.respec-error-list li {\n padding: 0.4em 0.7em;\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 215, 215);\n}\n\n.respec-error-list li > p {\n margin: 0;\n padding: 0;\n display: inline-block;\n}\n\n.respec-error-list li > p:first-child,\n.respec-warning-list li > p:first-child {\n display: inline;\n}\n\n.respec-warning-list > li li,\n.respec-error-list > li li {\n margin: 0;\n list-style: disc;\n}\n\n#respec-overlay {\n display: block;\n position: fixed;\n z-index: 10000;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n background: #000;\n}\n\n.respec-show-overlay {\n transition: opacity 0.2s linear;\n opacity: 0.5;\n}\n\n.respec-hide-overlay {\n transition: opacity 0.2s linear;\n opacity: 0;\n}\n\n.respec-modal {\n display: block;\n position: fixed;\n z-index: 11000;\n margin: auto;\n top: 10%;\n background: #fff;\n border: 5px solid #666;\n min-width: 20%;\n width: 79%;\n padding: 0;\n max-height: 80%;\n overflow-y: auto;\n margin: 0 -0.5cm;\n}\n\n@media screen and (min-width: 78em) {\n .respec-modal {\n width: 62%;\n }\n}\n\n.respec-modal h3 {\n margin: 0;\n padding: 0.2em;\n text-align: center;\n color: black;\n background: linear-gradient(\n to bottom,\n rgba(238, 238, 238, 1) 0%,\n rgba(238, 238, 238, 1) 50%,\n rgba(204, 204, 204, 1) 100%\n );\n font-size: 1em;\n}\n\n.respec-modal .inside div p {\n padding-left: 1cm;\n}\n\n#respec-menu button.respec-option {\n background: white;\n padding: 0 0.2cm;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n padding: 1.2em 1.2em;\n}\n\n#respec-menu button.respec-option:hover,\n#respec-menu button:focus {\n background-color: #eeeeee;\n}\n\n.respec-cmd-icon {\n padding-right: 0.5em;\n}\n\n#respec-ui button.respec-option:last-child {\n border: none;\n border-radius: inherit;\n}\n\n.respec-button-copy-paste {\n position: absolute;\n height: 28px;\n width: 40px;\n cursor: pointer;\n background-image: linear-gradient(#fcfcfc, #eee);\n border: 1px solid rgb(144, 184, 222);\n border-left: 0;\n border-radius: 0px 0px 3px 0;\n -webkit-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n top: 0;\n left: 127px;\n}\n\n@media print {\n #respec-ui {\n display: none;\n }\n}\n\n.respec-iframe {\n width: 100%;\n min-height: 550px;\n height: 100%;\n overflow: hidden;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n.respec-iframe:not(.ready) {\n background: url(\"https://respec.org/xref/loader.gif\") no-repeat center;\n}\n\n.respec-iframe + a[href] {\n font-size: 0.9rem;\n float: right;\n margin: 0 0.5em 0.5em;\n border-bottom-width: 1px;\n}\n`;\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport css from \"../styles/ui.css.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Sets the defaults for Geonovum documents\n */\nexport const name = \"geonovum/defaults\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\n\nlinter.register(privsecSectionRule);\n\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n [\n \"cc-by-nd\",\n {\n name:\n \"Creative Commons Attribution-NoDerivatives 4.0 International Public License\",\n short: \"CC-BY-ND\",\n url: \"https://creativecommons.org/licenses/by-nd/4.0/legalcode.nl\",\n },\n ],\n]);\n\nconst geonovumDefaults = {\n lint: {\n \"privsec-section\": true,\n },\n doJsonLd: true,\n license: \"cc-by\",\n specStatus: \"GN-BASIS\",\n logos: [\n {\n src: \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg\",\n alt: \"Geonovum\",\n id: \"Geonovum\",\n height: 67,\n width: 132,\n url: \"https://www.geonovum.nl/\",\n },\n ],\n};\n\nfunction computeProps(conf) {\n return {\n isCCBY: conf.license === \"cc-by\",\n licenseInfo: licenses.get(conf.license),\n isBasic: conf.specStatus === \"GN-BASIS\",\n isRegular: conf.specStatus === \"GN-BASIS\",\n };\n}\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...geonovumDefaults.lint,\n ...conf.lint,\n };\n Object.assign(conf, {\n ...coreDefaults,\n ...geonovumDefaults,\n ...conf,\n lint,\n });\n // computed properties\n Object.assign(conf, computeProps(conf));\n}\n","/* ReSpec specific CSS */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n@keyframes pop {\n 0% {\n transform: scale(1, 1);\n }\n 25% {\n transform: scale(1.25, 1.25);\n opacity: 0.75;\n }\n 100% {\n transform: scale(1, 1);\n }\n}\n\n/* Override code highlighter background */\n.hljs {\n background: transparent !important;\n}\n\n/* --- INLINES --- */\nh1 abbr,\nh2 abbr,\nh3 abbr,\nh4 abbr,\nh5 abbr,\nh6 abbr,\na abbr {\n border: none;\n}\n\ndfn {\n font-weight: bold;\n}\n\na.internalDFN {\n color: inherit;\n border-bottom: 1px solid #99c;\n text-decoration: none;\n}\n\na.externalDFN {\n color: inherit;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\na.bibref {\n text-decoration: none;\n}\n\n.respec-offending-element:target {\n animation: pop 0.25s ease-in-out 0s 1;\n}\n\n.respec-offending-element,\na[href].respec-offending-element {\n text-decoration: red wavy underline;\n}\n@supports not (text-decoration: red wavy underline) {\n .respec-offending-element:not(pre) {\n display: inline-block;\n }\n .respec-offending-element {\n /* Red squiggly line */\n background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=)\n bottom repeat-x;\n }\n}\n\n#references :target {\n background: #eaf3ff;\n animation: pop 0.4s ease-in-out 0s 1;\n}\n\ncite .bibref {\n font-style: normal;\n}\n\ncode {\n color: #c63501;\n}\n\nth code {\n color: inherit;\n}\n\na[href].orcid {\n padding-left: 4px;\n padding-right: 4px;\n}\n\na[href].orcid > svg {\n margin-bottom: -2px;\n}\n\n/* --- TOC --- */\n\n.toc a,\n.tof a {\n text-decoration: none;\n}\n\na .secno,\na .figno {\n color: #000;\n}\n\nul.tof,\nol.tof {\n list-style: none outside none;\n}\n\n.caption {\n margin-top: 0.5em;\n font-style: italic;\n}\n\n/* --- TABLE --- */\n\ntable.simple {\n border-spacing: 0;\n border-collapse: collapse;\n border-bottom: 3px solid #005a9c;\n}\n\n.simple th {\n background: #005a9c;\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th a {\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th[scope=\"row\"] {\n background: inherit;\n color: inherit;\n border-top: 1px solid #ddd;\n}\n\n.simple td {\n padding: 3px 10px;\n border-top: 1px solid #ddd;\n}\n\n.simple tr:nth-child(even) {\n background: #f0f6ff;\n}\n\n/* --- DL --- */\n\n.section dd > p:first-child {\n margin-top: 0;\n}\n\n.section dd > p:last-child {\n margin-bottom: 0;\n}\n\n.section dd {\n margin-bottom: 1em;\n}\n\n.section dl.attrs dd,\n.section dl.eldef dd {\n margin-bottom: 0;\n}\n\n#issue-summary > ul {\n column-count: 2;\n}\n\n#issue-summary li {\n list-style: none;\n display: inline-block;\n}\n\ndetails.respec-tests-details {\n margin-left: 1em;\n display: inline-block;\n vertical-align: top;\n}\n\ndetails.respec-tests-details > * {\n padding-right: 2em;\n}\n\ndetails.respec-tests-details[open] {\n z-index: 999999;\n position: absolute;\n border: thin solid #cad3e2;\n border-radius: 0.3em;\n background-color: white;\n padding-bottom: 0.5em;\n}\n\ndetails.respec-tests-details[open] > summary {\n border-bottom: thin solid #cad3e2;\n padding-left: 1em;\n margin-bottom: 1em;\n line-height: 2em;\n}\n\ndetails.respec-tests-details > ul {\n width: 100%;\n margin-top: -0.3em;\n}\n\ndetails.respec-tests-details > li {\n padding-left: 1em;\n}\n\na[href].self-link:hover {\n opacity: 1;\n text-decoration: none;\n background-color: transparent;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n position: relative;\n}\n\naside.example .marker > a.self-link {\n color: inherit;\n}\n\nh2 > a.self-link,\nh3 > a.self-link,\nh4 > a.self-link,\nh5 > a.self-link,\nh6 > a.self-link {\n border: none;\n color: inherit;\n font-size: 83%;\n height: 2em;\n left: -1.6em;\n opacity: 0.5;\n position: absolute;\n text-align: center;\n text-decoration: none;\n top: 0;\n transition: opacity 0.2s;\n width: 2em;\n}\n\nh2 > a.self-link::before,\nh3 > a.self-link::before,\nh4 > a.self-link::before,\nh5 > a.self-link::before,\nh6 > a.self-link::before {\n content: \"§\";\n display: block;\n}\n\n@media (max-width: 767px) {\n dd {\n margin-left: 0;\n }\n\n /* Don't position self-link in headings off-screen */\n h2 > a.self-link,\n h3 > a.self-link,\n h4 > a.self-link,\n h5 > a.self-link,\n h6 > a.self-link {\n left: auto;\n top: auto;\n }\n}\n\n@media print {\n .removeOnSave {\n display: none;\n }\n}\n`;\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport css from \"../styles/respec.css.js\";\n\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = css;\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport function run(conf) {\n if (conf.noReSpecCSS) {\n styleElement.remove();\n }\n}\n","// @ts-check\n// Module geonovum/style\n// Inserts a link to the appropriate Geonovum style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"geonovum/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n script.addEventListener(\n \"load\",\n () => {\n if (window.location.hash) {\n window.location.href = window.location.hash;\n }\n },\n { once: true }\n );\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createStyle(css_name) {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = `https://tools.geostandaarden.nl/respec/style/${css_name}.css`;\n return link;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C fixup.js\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preconnect\", // for Geonovum styles and scripts.\n href: \"https://tools.geostandaarden.nl/\",\n },\n {\n hint: \"preload\", // all Geonovum specs import base.css.\n href: \"https://tools.geostandaarden.nl/respec/style/base.css\",\n as: \"style\",\n },\n {\n hint: \"preload\", // all Geonovum specs show the logo.\n href: \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.svg\",\n as: \"image\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// add favicon for Geonovum\nconst favicon = document.createElement(\"link\");\nfavicon.rel = \"shortcut icon\";\nfavicon.type = \"image/x-icon\";\nfavicon.href =\n \"https://tools.geostandaarden.nl/respec/style/logos/Geonovum.ico\";\ndocument.head.prepend(favicon);\n\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\n// export function run(conf, doc, cb) {\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'GN-BASIS'.\";\n conf.specStatus = \"GN-BASIS\";\n showWarning(msg, name);\n }\n\n if (document.body.querySelector(\"figure.scalable\")) {\n // Apply leaflet style if class scalable is present\n document.head.appendChild(createStyle(\"leaflet\"));\n document.head.appendChild(createStyle(\"font-awesome\"));\n }\n\n let styleFile = \"\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"GN-WV\":\n styleFile += \"GN-WV.css\";\n break;\n case \"GN-CV\":\n styleFile += \"GN-CV.css\";\n break;\n case \"GN-VV\":\n styleFile += \"GN-VV.css\";\n break;\n case \"GN-DEF\":\n styleFile += \"GN-DEF.css\";\n break;\n case \"GN-BASIS\":\n styleFile += \"GN-BASIS.css\";\n break;\n default:\n styleFile = \"base.css\";\n }\n\n if (!conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, \"2016\");\n },\n { once: true }\n );\n }\n const finalStyleURL = `https://tools.geostandaarden.nl/respec/style/${styleFile}`;\n linkCSS(document, finalStyleURL);\n}\n","// @ts-check\n// Module geonovum/l10n\n// Looks at the lang attribute on the root element and uses it to manage the config.l10n object so\n// that other parts of the system can localise their text\nimport { html } from \"../core/import-maps.js\";\nimport { l10n } from \"../core/l10n.js\";\nexport const name = \"geonovum/l10n\";\nconst additions = {\n en: {\n status_at_publication: html`This section describes the status of this\n document at the time of its publication. Other documents may supersede\n this document. A list of current Geonovum publications and the latest\n revision of this document can be found via\n <a href=\"https://www.geonovum.nl/geo-standaarden/alle-standaarden\"\n >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a\n >(in Dutch).`,\n },\n nl: {\n status_at_publication: html`Deze paragraaf beschrijft de status van dit\n document ten tijde van publicatie. Het is mogelijk dat er actuelere\n versies van dit document bestaan. Een lijst van Geonovum publicaties en de\n laatste gepubliceerde versie van dit document zijn te vinden op\n <a href=\"https://www.geonovum.nl/geo-standaarden/alle-standaarden\"\n >https://www.geonovum.nl/geo-standaarden/alle-standaarden</a\n >.`,\n },\n};\n\nObject.keys(additions).forEach(key => {\n if (!l10n[key]) l10n[key] = {};\n Object.assign(l10n[key], additions[key]);\n});\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://api.specref.org/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\n/** @param {BiblioData|string} ref */\nfunction stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","/* --- EXAMPLES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nspan.example-title {\n text-transform: none;\n}\n\naside.example,\ndiv.example,\ndiv.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\n\ndiv.illegal-example {\n color: red;\n}\n\ndiv.illegal-example p {\n color: black;\n}\n\naside.example,\ndiv.example {\n padding: 0.5em;\n border-left-width: 0.5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: 0.1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example span.example-title {\n color: #999;\n}\n\n.example pre {\n background-color: rgba(0, 0, 0, 0.03);\n}\n`;\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport css from \"../styles/examples.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","/* --- ISSUES/NOTES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.issue-label {\n text-transform: initial;\n}\n\n.warning > p:first-child { margin-top: 0 }\n.warning {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n}\nspan.warning { padding: .1em .5em .15em; }\n\n.issue.closed span.issue-number {\n text-decoration: line-through;\n}\n\n.warning {\n border-color: #f11;\n border-width: .2em;\n border-style: solid;\n background: #fbe9e9;\n}\n\n.warning-title:before{\n content: \"⚠\"; /*U+26A0 WARNING SIGN*/\n font-size: 1.3em;\n float: left;\n padding-right: .3em;\n margin-top: -0.3em;\n}\n\nli.task-list-item {\n list-style: none;\n}\n\ninput.task-list-item-checkbox {\n margin: 0 0.35em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.issue a.respec-gh-label {\n padding: 5px;\n margin: 0 2px 0 2px;\n font-size: 10px;\n text-transform: none;\n text-decoration: none;\n font-weight: bold;\n border-radius: 4px;\n position: relative;\n bottom: 2px;\n border: none;\n display: inline-block;\n}\n`;\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport css from \"../styles/issues-notes.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","// @ts-check\n// Module geonovum/conformance\n// Handle the conformance section properly.\n// based on W3C conformance, but because Geonovum has different requirements, have a separate module\nimport { html } from \"../core/import-maps.js\";\nexport const name = \"geonovum/conformance\";\n\n/**\n * @param {Element} conformance\n */\nfunction processConformance(conformance) {\n const content = html`\n <h2>Conformiteit</h2>\n <p>\n Naast onderdelen die als niet normatief gemarkeerd zijn, zijn ook alle\n diagrammen, voorbeelden, en noten in dit document niet normatief. Verder\n is alles in dit document normatief.\n </p>\n <p>Informatief en normatief.</p>\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run() {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance) {\n processConformance(conformance);\n }\n}\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/search-specref\n// Search Specref database\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst URL = \"https://respec.org/specref/\";\n\nconst localizationStrings = {\n en: {\n search_specref: \"Search Specref\",\n },\n nl: {\n search_specref: \"Doorzoek Specref\",\n },\n ja: {\n search_specref: \"仕様検索\",\n },\n de: {\n search_specref: \"Spezifikationen durchsuchen\",\n },\n zh: {\n search_specref: \"搜索 Specref\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst button = ui.addCommand(\n l10n.search_specref,\n show,\n \"Ctrl+Shift+Alt+space\",\n \"🔎\"\n);\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n /** @type {HTMLElement} */\n const specrefSearchUI = html`\n <iframe class=\"respec-iframe\" src=\"${URL}\" onload=${onLoad}></iframe>\n <a href=\"${URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.search_specref, specrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","/*\nAdapted from Atom One Light by Daniel Gamage for ReSpec, with better color contrast\nOriginal One Light Syntax theme from https://github.com/atom/one-light-syntax\nbase: #fafafa\nmono-1: #383a42\nmono-2: #686b77\nmono-3: #a0a1a7\nhue-1: #0184bb\nhue-2: #4078f2\nhue-3: #a626a4\nhue-4: #50a14f\nhue-5: #e45649\nhue-5-2: #c91243\nhue-6: #986801\nhue-6-2: #c18401\n*/\n\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n color: #383a42;\n background: #fafafa;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #717277;\n font-style: italic;\n}\n\n.hljs-doctag,\n.hljs-keyword,\n.hljs-formula {\n color: #a626a4;\n}\n\n.hljs-section,\n.hljs-name,\n.hljs-selector-tag,\n.hljs-deletion,\n.hljs-subst {\n color: #ca4706;\n font-weight: bold;\n}\n\n.hljs-literal {\n color: #0b76c5;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta-string {\n color: #42803C;\n}\n\n.hljs-built_in,\n.hljs-class .hljs-title {\n color: #9a6a01;\n}\n\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-type,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-number {\n color: #986801;\n}\n\n.hljs-symbol,\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-title {\n color: #336ae3;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n.hljs-link {\n text-decoration: underline;\n}\n`;\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport css from \"../styles/highlight.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n document.head.appendChild(\n html`<style>\n ${css}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\n/**\n * Module core/data-tests\n *\n * Allows specs to link to test files in a test suite, by adding `details` of where\n * particular tests for a testable assertion can be found.\n *\n * `data-tests` takes a space separated list of URLs, e.g. data-test=\"foo.html bar.html\".\n *\n * Docs: https://github.com/w3c/respec/wiki/data-tests\n */\nimport { getIntlData, showError, showWarning } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst localizationStrings = {\n en: {\n missing_test_suite_uri:\n \"Found tests in your spec, but missing '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.\",\n tests: \"tests\",\n test: \"test\",\n },\n ja: {\n missing_test_suite_uri:\n \"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.\",\n tests: \"テスト\",\n test: \"テスト\",\n },\n de: {\n missing_test_suite_uri:\n \"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.\",\n tests: \"Tests\",\n test: \"Test\",\n },\n zh: {\n missing_test_suite_uri:\n \"本规范中包含测试,但在 ReSpec 配置中缺少 '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。\",\n tests: \"测试\",\n test: \"测试\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport const name = \"core/data-tests\";\n\nfunction toListItem(href) {\n const emojiList = [];\n const [testFile] = new URL(href).pathname.split(\"/\").reverse();\n const testParts = testFile.split(\".\");\n let [testFileName] = testParts;\n\n const isSecureTest = testParts.find(part => part === \"https\");\n if (isSecureTest) {\n const requiresConnectionEmoji = document.createElement(\"span\");\n requiresConnectionEmoji.textContent = \"🔒\";\n requiresConnectionEmoji.setAttribute(\n \"aria-label\",\n \"requires a secure connection\"\n );\n requiresConnectionEmoji.setAttribute(\"title\", \"Test requires HTTPS\");\n testFileName = testFileName.replace(\".https\", \"\");\n emojiList.push(requiresConnectionEmoji);\n }\n\n const isManualTest = testFileName\n .split(\".\")\n .join(\"-\")\n .split(\"-\")\n .find(part => part === \"manual\");\n if (isManualTest) {\n const manualPerformEmoji = document.createElement(\"span\");\n manualPerformEmoji.textContent = \"💪\";\n manualPerformEmoji.setAttribute(\n \"aria-label\",\n \"the test must be run manually\"\n );\n manualPerformEmoji.setAttribute(\"title\", \"Manual test\");\n testFileName = testFileName.replace(\"-manual\", \"\");\n emojiList.push(manualPerformEmoji);\n }\n\n const testList = html`\n <li>\n <a href=\"${href}\">${testFileName}</a>\n ${emojiList}\n </li>\n `;\n return testList;\n}\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n if (!testables.length) {\n return;\n }\n if (!conf.testSuiteURI) {\n showError(l10n.missing_test_suite_uri, name);\n return;\n }\n\n for (const elem of testables) {\n const tests = elem.dataset.tests.split(/,/gm).map(url => url.trim());\n const testURLs = toTestURLs(tests, conf.testSuiteURI);\n handleDuplicates(testURLs, elem);\n const details = toHTML(testURLs);\n elem.append(details);\n }\n}\n\n/**\n * @param {string[]} tests\n * @param {string} testSuiteURI\n */\nfunction toTestURLs(tests, testSuiteURI) {\n return tests\n .map(test => {\n try {\n return new URL(test, testSuiteURI).href;\n } catch {\n const msg = `Bad URI: ${test}`;\n showWarning(msg, name);\n }\n })\n .filter(href => href);\n}\n\n/**\n * @param {string[]} testURLs\n * @param {HTMLElement} elem\n */\nfunction handleDuplicates(testURLs, elem) {\n const duplicates = testURLs.filter(\n (link, i, self) => self.indexOf(link) !== i\n );\n if (duplicates.length) {\n const msg = `Duplicate tests found`;\n const hint = `To fix, remove duplicates from \"data-tests\": ${duplicates\n .map(url => new URL(url).pathname)\n .join(\", \")}`;\n showWarning(msg, name, { hint, elements: [elem] });\n }\n}\n\n/**\n * @param {string[]} testURLs\n */\nfunction toHTML(testURLs) {\n const uniqueList = [...new Set(testURLs)];\n const details = html`\n <details class=\"respec-tests-details removeOnSave\">\n <summary>tests: ${uniqueList.length}</summary>\n <ul>\n ${uniqueList.map(toListItem)}\n </ul>\n </details>\n `;\n return details;\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\nvar.respec-hl {\n color: var(--color, #000);\n background-color: var(--bg-color);\n box-shadow: 0 0 0px 2px var(--bg-color);\n}\n\n/* highlight colors\n https://github.com/w3c/tr-design/issues/152\n*/\nvar.respec-hl-c1 {\n --bg-color: #f4d200;\n}\n\nvar.respec-hl-c2 {\n --bg-color: #ff87a2;\n}\n\nvar.respec-hl-c3 {\n --bg-color: #96e885;\n}\n\nvar.respec-hl-c4 {\n --bg-color: #3eeed2;\n}\n\nvar.respec-hl-c5 {\n --bg-color: #eacfb6;\n}\n\nvar.respec-hl-c6 {\n --bg-color: #82ddff;\n}\n\nvar.respec-hl-c7 {\n --bg-color: #ffbcf2;\n}\n\n@media print {\n var.respec-hl {\n background: none;\n color: #000;\n box-shadow: unset;\n }\n}\n`;\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport css from \"../styles/var.css.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","/* dfn popup panel that list all local references to a dfn */\n/**\n * TODO: Revert changes due to https://github.com/w3c/respec/pull/2888 when\n * https://github.com/w3c/css-validator/pull/111 is fixed.\n */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\ndfn {\n cursor: pointer;\n}\n\n.dfn-panel {\n position: absolute;\n z-index: 35;\n min-width: 300px;\n max-width: 500px;\n padding: 0.5em 0.75em;\n margin-top: 0.6em;\n font: small Helvetica Neue, sans-serif, Droid Sans Fallback;\n background: #fff;\n color: black;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n}\n/* Triangle/caret */\n.dfn-panel:not(.docked) > .caret {\n position: absolute;\n top: -9px;\n}\n.dfn-panel:not(.docked) > .caret::before,\n.dfn-panel:not(.docked) > .caret::after {\n content: \"\";\n position: absolute;\n border: 10px solid transparent;\n border-top: 0;\n border-bottom: 10px solid #fff;\n top: 0;\n}\n.dfn-panel:not(.docked) > .caret::before {\n border-bottom: 9px solid #a2a9b1;\n}\n\n.dfn-panel * {\n margin: 0;\n}\n\n.dfn-panel b {\n display: block;\n color: #000;\n margin-top: 0.25em;\n}\n\n.dfn-panel ul a[href] {\n color: #333;\n}\n\n.dfn-panel > div {\n display: flex;\n}\n\n.dfn-panel a.self-link {\n font-weight: bold;\n margin-right: auto;\n}\n\n.dfn-panel .marker {\n padding: 0.1em;\n margin-left: 0.5em;\n border-radius: 0.2em;\n text-align: center;\n white-space: nowrap;\n font-size: 90%;\n color: #040b1c;\n}\n\n.dfn-panel .marker.dfn-exported {\n background: #d1edfd;\n box-shadow: 0 0 0 0.125em #1ca5f940;\n}\n.dfn-panel .marker.idl-block {\n background: #8ccbf2;\n box-shadow: 0 0 0 0.125em #0670b161;\n}\n\n.dfn-panel a:not(:hover) {\n text-decoration: none !important;\n border-bottom: none !important;\n}\n\n.dfn-panel a[href]:hover {\n border-bottom-width: 1px;\n}\n\n.dfn-panel ul {\n padding: 0;\n}\n\n.dfn-panel li {\n margin-left: 1em;\n}\n\n.dfn-panel.docked {\n position: fixed;\n left: 0.5em;\n top: unset;\n bottom: 2em;\n margin: 0 auto;\n /* 0.75em from padding (x2), 0.5em from left position, 0.2em border (x2) */\n max-width: calc(100vw - 0.75em * 2 - 0.5em - 0.2em * 2);\n max-height: 30vh;\n overflow: auto;\n}\n`;\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport css from \"../styles/dfn-panel.css.js\";\nimport { fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","/* For assertions in lists containing algorithms */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.assert {\n background: #eee;\n border-left: 0.5em solid #aaa;\n padding: 0.3em;\n}\n`;\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\nimport css from \"../styles/algorithms.css.js\";\n\nexport const name = \"core/algorithms\";\n\nexport function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","unescape","_","n","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","base","href","test","rtrim","relativeBase","indexOf","str","invert","l","length","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","source","obj","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","exec","merge","key","i","arguments","Object","hasOwnProperty","splitCells","tableRow","count","cells","match","offset","escaped","curr","split","splice","push","trim","findClosingBracket","b","level","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","raw","title","text","type","Tokenizer_1","options","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","slice","join","indentCodeCompensation","heading","trimmed","depth","nptable","item","header","align","hr","blockquote","list","bull","isordered","ordered","start","loose","items","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","def","tag","table","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","nextChar","punctuation","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","lastIndex","Math","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","tokens","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","token","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","body","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parse","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","unshift","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","opts","prevRenderer","ret","prevTokenizer","lexInline","parser","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","t","defineProperty","r","a","delete","configurable","o","s","WeakSet","add","m","u","insertBefore","selected","selectedIndex","f","querySelectorAll","y","w","x","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","v","p","g","Array","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","constructor","_wire$","defineProperties","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","isArray","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","concat","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","attribute","values","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","it","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","dispatch","component","setState","idb","_idb","_marked","_pluralize","getIntlData","x_and_y","x_y_and_z","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","array","mapper","docLang","Intl","ListFormat","format","lastComma","and","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","data","runTransforms","flist","funcArgs","methods","meth","showWarning","addId","pfx","txt","noLC","id","normalize","getElementById","nextId","getDfnTitles","titleSet","Set","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","ref","element","closestInformative","closest","isInformative","querySelector","startsWith","illegal","wrapInner","outer","wrapper","parents","selector","parent","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","super","getCanonicalKey","existingKey","find","makeSafeCopy","clone","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","comment","walkTree","nextNode","CaseInsensitiveMap","entries","RespecError","plugin","isWarning","assign","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","subscriptions","topic","from","cb","arg","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","mimeTypes","rsDocToDataURL","mimeType","validTypes","TypeError","encodeURIComponent","cloneDoc","head","insertions","metaViewport","metaCharset","respecVersion","metaGenerator","prepend","cleanup","XMLSerializer","serializeToString","el","outerHTML","prettify","doctype","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","includeConfig","params","URLSearchParams","search","overrideEntries","filter","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","reindent","lines","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","Builder","current","tagName","position","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","indentation","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","css","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hash","hasLink","isLegacyFrag","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","zh","defaultLang","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","nl","hasNoHeading","offendingMembers","getOwnPropertyNames","endsWith","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","isRecTrack","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","specStatus","highlightVars","addSectionLinks","privsecSectionRule","licenses","short","geonovumDefaults","doJsonLd","license","logos","alt","height","width","isCCBY","licenseInfo","isBasic","isRegular","computeProps","insertStyle","noReSpecCSS","createStyle","css_name","resourceHints","createResourceHints","favicon","delimiter","separator","toKeyValuePairs","initial-scale","shrink-to-fit","createMetaViewport","styleFile","noToc","attachFixupScript","styles","frag","reduce","nextLink","linkCSS","additions","status_at_publication","resolveGithubPromise","rejectGithubPromise","github","file_a_bug","participate","commit_history","ko","ja","es","ghURL","tempURL","repoURL","org","repo","pathname","branch","issueBase","newProps","edDraftURI","githubToken","githubUser","atRiskBase","otherLinks","pullBase","shortName","otherLink","githubAPI","hostname","normalizedGHObj","apiBase","fullName","normalizedConfig","processResponse","rawData","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","include","includeId","response","fetch","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","identifier","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","joined","htmlJoinComma","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","pop","allArgs","SyntaxError","reverse","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","unique","openIdb","biblioDB","isAlias","resolveAlias","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","reference","promisesToAdd","flatMap","isInDB","put","close","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","ok","status","json","addAll","resolveRef","entry","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","authors","etAl","publisher","date","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","abbr","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","terms","plurals","size","userDefinedPlurals","uniquePlurals","makeTitle","num","report","number","examples","contains","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","note","handleIssues","ins","ghIssues","getIssueNumber","Number","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","searchParams","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","hasChildNodes","insertAdjacentHTML","makeIssueSectionSummary","issuesAndNotes","issueNumbers","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","container","list_of_figures","fig","img","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","every","decorateTableOfFigures","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","duplicates","dfnFor","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","idl","first","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","xref","editors","editor","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","res","input","maxAge","Request","cache","cachedResponse","caches","Date","headers","clonedResponse","customHeaders","Headers","expiryDate","now","toISOString","cacheResponse","Response","blob","fetchAndCache","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","prefix","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","span","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","isNaN","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","conformance","processConformance","save_snapshot","downloadLinks","fileName","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","search_specref","specrefSearchUI","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","fetchBase","workerPromise","workerScript","default","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","namespace","counter","gen","idGenerator","msgIdGenerator","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","missing_test_suite_uri","tests","toListItem","emojiList","testFile","testParts","testFileName","requiresConnectionEmoji","manualPerformEmoji","toTestURLs","testSuiteURI","handleDuplicates","testURLs","uniqueList","testables","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","re","activeClass","outputDoc","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors"],"mappings":"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,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC5f6BkC,GAAU,SAASC,GAAgB,IAAIC,EAAE,GAAG,IAAIA,EAAE5b,QAAQA,QAAQ,MAAMuK,GAAGqR,EAAE5b,QAAQ,SAAS4b,EAAErR,GAAG,IAAI1C,EAAE0C,EAAEsR,eAAeC,EAAEvR,EAAES,eAAeH,EAAEkR,EAAEza,UAAU,OAAOuJ,EAAEmR,OAAO,SAASzR,GAAG,OAAOvI,KAAKd,IAAIqJ,WAAWA,EAAEvI,KAAK4F,IAAIiD,EAAElK,IAAI,SAAS4J,GAAG,OAAOvI,KAAKd,IAAIqJ,GAAGA,EAAEvI,KA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"} \ No newline at end of file diff --git a/builds/respec-w3c.js b/builds/respec-w3c.js index ed5954eeaf..fdd3588724 100644 --- a/builds/respec-w3c.js +++ b/builds/respec-w3c.js @@ -1,5 +1,7 @@ -window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return jn})),Promise.resolve().then((function(){return mr})),Promise.resolve().then((function(){return gr})),Promise.resolve().then((function(){return i})),Promise.resolve().then((function(){return vr})),Promise.resolve().then((function(){return is})),Promise.resolve().then((function(){return ls})),Promise.resolve().then((function(){return ps})),Promise.resolve().then((function(){return hs})),Promise.resolve().then((function(){return vs})),Promise.resolve().then((function(){return $s})),Promise.resolve().then((function(){return Kn})),Promise.resolve().then((function(){return Mn})),Promise.resolve().then((function(){return Cs})),Promise.resolve().then((function(){return Ts})),Promise.resolve().then((function(){return ao})),Promise.resolve().then((function(){return Ps})),Promise.resolve().then((function(){return Is})),Promise.resolve().then((function(){return Os})),Promise.resolve().then((function(){return Mi})),Promise.resolve().then((function(){return qi})),Promise.resolve().then((function(){return Gi})),Promise.resolve().then((function(){return Vi})),Promise.resolve().then((function(){return Ki})),Promise.resolve().then((function(){return na})),Promise.resolve().then((function(){return aa})),Promise.resolve().then((function(){return ua})),Promise.resolve().then((function(){return La})),Promise.resolve().then((function(){return ci})),Promise.resolve().then((function(){return Ja})),Promise.resolve().then((function(){return uc})),Promise.resolve().then((function(){return Ua})),Promise.resolve().then((function(){return dc})),Promise.resolve().then((function(){return yi})),Promise.resolve().then((function(){return Sc})),Promise.resolve().then((function(){return Cc})),Promise.resolve().then((function(){return Ec})),Promise.resolve().then((function(){return Oc})),Promise.resolve().then((function(){return zc})),Promise.resolve().then((function(){return Wc})),Promise.resolve().then((function(){return Bc})),Promise.resolve().then((function(){return Xc})),Promise.resolve().then((function(){return cl})),Promise.resolve().then((function(){return pl})),Promise.resolve().then((function(){return bl})),Promise.resolve().then((function(){return $l})),Promise.resolve().then((function(){return Sl})),Promise.resolve().then((function(){return Rl})),Promise.resolve().then((function(){return Nl})),Promise.resolve().then((function(){return ya})),Promise.resolve().then((function(){return Fl})),Promise.resolve().then((function(){return Vl})),Promise.resolve().then((function(){return Ql})),Promise.resolve().then((function(){return nu})),Promise.resolve().then((function(){return ou})),Promise.resolve().then((function(){return iu})),Promise.resolve().then((function(){return fu})),Promise.resolve().then((function(){return wu})),Promise.resolve().then((function(){return Ro})),Promise.resolve().then((function(){return xu}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},s=r.lang;var i=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:s,run:function(e){e.l10n=o[s]||o.en}});let a,c;const l=new WeakMap,u=new WeakMap,d=new WeakMap,p=new WeakMap,f=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(c||(c=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(l.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",s),e.removeEventListener("abort",s)},o=()=>{t(),r()},s=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",s),e.addEventListener("abort",s)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",s)},o=()=>{t(b(e.result)),r()},s=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",s)});return t.then(t=>{t instanceof IDBCursor&&l.set(t,e)}).catch(()=>{}),f.set(t,e),t}(e);if(p.has(e))return p.get(e);const t=g(e);return t!==e&&(p.set(e,t),f.set(t,e)),t}const w=e=>f.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const s=async function(e,...t){const s=this.transaction(e,o?"readwrite":"readonly");let i=s.store;return r&&(i=i.index(t.shift())),(await Promise.all([i[n](...t),o&&s.done]))[0]};return k.set(t,s),s}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:s}={}){const i=indexedDB.open(e,t),a=b(i);return r&&i.addEventListener("upgradeneeded",e=>{r(b(i.result),e.oldVersion,e.newVersion,b(i.transaction))}),n&&i.addEventListener("blocked",()=>n()),a.then(e=>{s&&e.addEventListener("close",()=>s()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});function S(e,t,n,r,o,{level:s="error",autofix:i,ruleName:a}={}){function c(n){return n>0?e.slice(t,t+n):e.slice(Math.max(t+n,0),t)}function l(n,{precedes:r}={}){const o=n.map(e=>e.trivia+e.value).join(""),s=e[t];return"eof"===s.type?o:r?o+s.trivia:o.slice(s.trivia.length)}const u="eof"!==e[t].type?e[t].line:e.length>1?e[t-1].line:1,d=function(e){const t=e.split("\n");return t[t.length-1]}(l(c(-5),{precedes:!0})),p=c(5),f=l(p),h=d+f.split("\n")[0]+"\n"+(" ".repeat(d.length)+"^"),m="Syntax"===o?"since":"inside",g=`${o} error at line ${u}${e.name?" in "+e.name:""}${n&&n.name?`, ${m} \`${n.partial?"partial ":""}${function(e){const t=[e];for(;e&&e.parent;){const{parent:n}=e;t.unshift(n),e=n}return t.map(e=>function(e,t){let n=e;return t&&(n+=" "+t),n}(e.type,e.name)).join(" -> ")}(n)}\``:""}:\n${h}`;return{message:`${g} ${r}`,bareMessage:r,context:g,line:u,sourceName:e.name,level:s,ruleName:a,autofix:i,input:f,tokens:p}}function _(e,t,n,r){return S(e,t,n,r,"Syntax")}function C(e,t,n,r,o={}){return o.ruleName=n,S(t.source,e.index,t,r,"Validation",o)}class E{constructor({source:e,tokens:t}){Object.defineProperties(this,{source:{value:e},tokens:{value:t,writable:!0},parent:{value:null,writable:!0},this:{value:this}})}toJSON(){const e={type:void 0,name:void 0,inheritance:void 0};let t=this;for(;t!==Object.prototype;){const n=Object.getOwnPropertyDescriptors(t);for(const[t,r]of Object.entries(n))(r.enumerable||r.get)&&(e[t]=this[t]);t=Object.getPrototypeOf(t)}return e}}function R(e,t,{useNullableInner:n}={}){if(!e.union){const r=t.unique.get(e.idlType);if(!r)return;if("typedef"===r.type){const{typedefIncludesDictionary:n}=t.cache;if(n.has(r))return n.get(r);t.cache.typedefIncludesDictionary.set(r,void 0);const o=R(r.idlType,t);if(t.cache.typedefIncludesDictionary.set(r,o),o)return{reference:e,dictionary:o.dictionary}}if("dictionary"===r.type&&(n||!e.nullable))return{reference:e,dictionary:r}}for(const n of e.subtype){const e=R(n,t);if(e)return n.union?e:{reference:n,dictionary:e.dictionary}}}function T(e,t){if(t.cache.dictionaryIncludesRequiredField.has(e))return t.cache.dictionaryIncludesRequiredField.get(e);t.cache.dictionaryIncludesRequiredField.set(e,void 0);let n=e.members.some(e=>e.required);if(!n&&e.inheritance){const r=t.unique.get(e.inheritance);r?T(r,t)&&(n=!0):n=!0}return t.cache.dictionaryIncludesRequiredField.set(e,n),n}class A extends Array{constructor({source:e,tokens:t}){super(),Object.defineProperties(this,{source:{value:e},tokens:{value:t},parent:{value:null,writable:!0}})}}class L extends E{static parser(e,t){return()=>{const n=e.consume(t);if(n)return new L({source:e.source,tokens:{value:n}})}}get value(){return V(this.tokens.value.value)}}function P(e,t){return Z(e,{parser:L.parser(e,t),listName:t+" list"})}const I=["identifier","decimal","integer","string"],D=new Map([...["NoInterfaceObject","LenientSetter","LenientThis","TreatNonObjectAsNull","Unforgeable"].map(e=>[e,"Legacy"+e]),["NamedConstructor","LegacyFactoryFunction"],["OverrideBuiltins","LegacyOverrideBuiltIns"],["TreatNullAs","LegacyNullToEmptyString"]]);function N(e){for(const t of I){const n=P(e,t);if(n.length)return n}e.error("Expected identifiers, strings, decimals, or integers but none found")}class O extends E{static parse(e){const t={assign:e.consume("=")},n=se(new O({source:e.source,tokens:t}));return t.assign&&(t.secondaryName=e.consume(...I)),t.open=e.consume("("),t.open?(n.list=n.rhsIsList?N(e):X(e),t.close=e.consume(")")||e.error("Unexpected token in extended attribute argument list")):n.hasRhs&&!t.secondaryName&&e.error("No right hand side to extended attribute assignment"),n.this}get rhsIsList(){return this.tokens.assign&&!this.tokens.secondaryName}get rhsType(){return this.rhsIsList?this.list[0].tokens.value.type+"-list":this.tokens.secondaryName?this.tokens.secondaryName.type:null}}class j extends E{static parse(e){const t=e.consume("identifier");if(t)return new j({source:e.source,tokens:{name:t},params:O.parse(e)})}constructor({source:e,tokens:t,params:n}){super({source:e,tokens:t}),n.parent=this,Object.defineProperty(this,"params",{value:n})}get type(){return"extended-attribute"}get name(){return this.tokens.name.value}get rhs(){const{rhsType:e,tokens:t,list:n}=this.params;if(!e)return null;return{type:e,value:this.params.rhsIsList?n:V(t.secondaryName.value)}}get arguments(){const{rhsIsList:e,list:t}=this.params;return!t||e?[]:t}*validate(e){const{name:t}=this;if("LegacyNoInterfaceObject"===t){const e="`[LegacyNoInterfaceObject]` extended attribute is an undesirable feature that may be removed from Web IDL in the future. Refer to the [relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more information.";yield C(this.tokens.name,this,"no-nointerfaceobject",e,{level:"warning"})}else if(D.has(t)){const e=`\`[${t}]\` extended attribute is a legacy feature that is now renamed to \`[${D.get(t)}]\`. Refer to the [relevant upstream PR](https://github.com/heycam/webidl/pull/870) for more information.`;yield C(this.tokens.name,this,"renamed-legacy",e,{level:"warning",autofix:(n=this,()=>{const{name:e}=n;n.tokens.name.value=D.get(e),"TreatNullAs"===e&&(n.params.tokens={})})})}var n;for(const t of this.arguments)yield*t.validate(e)}}class z extends A{static parse(e){const t={};if(t.open=e.consume("["),!t.open)return new z({});const n=new z({source:e.source,tokens:t});return n.push(...Z(e,{parser:j.parse,listName:"extended attribute"})),t.close=e.consume("]")||e.error("Unexpected closing token of extended attribute"),n.length||e.error("Found an empty extended attribute"),e.probe("[")&&e.error("Illegal double extended attribute lists, consider merging them"),n}*validate(e){for(const t of this)yield*t.validate(e)}}function W(e,t){const n=e.consume("?");n&&(t.tokens.nullable=n),e.probe("?")&&e.error("Can't nullable more than once")}function M(e,t){let n=function(e,t){const n=e.consume("FrozenArray","ObservableArray","Promise","sequence","record");if(!n)return;const r=se(new U({source:e.source,tokens:{base:n}}));switch(r.tokens.open=e.consume("<")||e.error("No opening bracket after "+n.type),n.type){case"Promise":{e.probe("[")&&e.error("Promise type cannot have extended attribute");const n=ee(e,t)||e.error("Missing Promise subtype");r.subtype.push(n);break}case"sequence":case"FrozenArray":case"ObservableArray":{const o=Q(e,t)||e.error(`Missing ${n.type} subtype`);r.subtype.push(o);break}case"record":{e.probe("[")&&e.error("Record key cannot have extended attribute");const n=e.consume(...ce)||e.error("Record key must be one of: "+ce.join(", ")),o=new U({source:e.source,tokens:{base:n}});o.tokens.separator=e.consume(",")||e.error("Missing comma after record key type"),o.type=t;const s=Q(e,t)||e.error("Error parsing generic type record");r.subtype.push(o,s);break}}return r.idlType||e.error("Error parsing generic type "+n.type),r.tokens.close=e.consume(">")||e.error("Missing closing bracket after "+n.type),r.this}(e,t)||K(e);if(!n){const t=e.consume("identifier",...ce,...ae);if(!t)return;n=new U({source:e.source,tokens:{base:t}}),e.probe("<")&&e.error("Unsupported generic type "+t.value)}return"Promise"===n.generic&&e.probe("?")&&e.error("Promise type cannot be nullable"),n.type=t||null,W(e,n),n.nullable&&"any"===n.idlType&&e.error("Type `any` cannot be made nullable"),n}class U extends E{static parse(e,t){return M(e,t)||function(e,t){const n={};if(n.open=e.consume("("),!n.open)return;const r=se(new U({source:e.source,tokens:n}));for(r.type=t||null;;){const t=Q(e)||e.error("No type after open parenthesis or 'or' in union type");"any"===t.idlType&&e.error("Type `any` cannot be included in a union type"),"Promise"===t.generic&&e.error("Type `Promise` cannot be included in a union type"),r.subtype.push(t);const n=e.consume("or");if(!n)break;t.tokens.separator=n}return r.idlType.length<2&&e.error("At least two types are expected in a union type but found less"),n.close=e.consume(")")||e.error("Unterminated union type"),W(e,r),r.this}(e,t)}constructor({source:e,tokens:t}){super({source:e,tokens:t}),Object.defineProperty(this,"subtype",{value:[],writable:!0}),this.extAttrs=new z({})}get generic(){return this.subtype.length&&this.tokens.base?this.tokens.base.value:""}get nullable(){return Boolean(this.tokens.nullable)}get union(){return Boolean(this.subtype.length)&&!this.tokens.base}get idlType(){if(this.subtype.length)return this.subtype;return V([this.tokens.prefix,this.tokens.base,this.tokens.postfix].filter(e=>e).map(e=>e.value).join(" "))}*validate(e){if(yield*this.extAttrs.validate(e),"void"===this.idlType){const e="`void` is now replaced by `undefined`. Refer to the [relevant GitHub issue](https://github.com/heycam/webidl/issues/60) for more information.";yield C(this.tokens.base,this,"replace-void",e,{autofix:(t=this,()=>{t.tokens.base.value="undefined"})})}var t;const n=!this.union&&e.unique.get(this.idlType),r=this.union?this:n&&"typedef"===n.type?n.idlType:void 0;if(r&&this.nullable){const{reference:t}=R(r,e)||{};if(t){const e=(this.union?t:this).tokens.base,n="Nullable union cannot include a dictionary type.";yield C(e,this,"no-nullable-union-dict",n)}}else for(const t of this.subtype)yield*t.validate(e)}}class F extends E{static parse(e){const t=e.consume("=");if(!t)return null;const n=Y(e)||e.consume("string","null","[","{")||e.error("No value for default"),r=[n];if("["===n.type){const t=e.consume("]")||e.error("Default sequence value must be empty");r.push(t)}else if("{"===n.type){const t=e.consume("}")||e.error("Default dictionary value must be empty");r.push(t)}return new F({source:e.source,tokens:{assign:t},expression:r})}constructor({source:e,tokens:t,expression:n}){super({source:e,tokens:t}),n.parent=this,Object.defineProperty(this,"expression",{value:n})}get type(){return J(this.expression[0]).type}get value(){return J(this.expression[0]).value}get negative(){return J(this.expression[0]).negative}}class q extends E{static parse(e){const t=e.position,n={},r=se(new q({source:e.source,tokens:n}));return r.extAttrs=z.parse(e),n.optional=e.consume("optional"),r.idlType=Q(e,"argument-type"),r.idlType?(n.optional||(n.variadic=e.consume("...")),n.name=e.consume("identifier",...le),n.name?(r.default=n.optional?F.parse(e):null,r.this):e.unconsume(t)):e.unconsume(t)}get type(){return"argument"}get optional(){return!!this.tokens.optional}get variadic(){return!!this.tokens.variadic}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.idlType.validate(e);const t=R(this.idlType,e,{useNullableInner:!0});if(t)if(this.idlType.nullable){const e="Dictionary arguments cannot be nullable.";yield C(this.tokens.name,this,"no-nullable-dict-arg",e)}else if(this.optional){if(!this.default){const e="Optional dictionary arguments must have a default value of `{}`.";yield C(this.tokens.name,this,"dict-arg-default",e,{autofix:B(this)})}}else if(this.parent&&!T(t.dictionary,e)&&function(e){const t=e.parent.arguments||e.parent.list,n=t.indexOf(e);return!t.slice(n+1).some(e=>!e.optional)}(this)){const e="Dictionary argument must be optional if it has no required fields";yield C(this.tokens.name,this,"dict-arg-optional",e,{autofix:(n=this,()=>{const e=oe(n.idlType);n.tokens.optional={type:"optional",value:"optional",trivia:e.trivia},e.trivia=" ",B(n)()})})}var n}}function B(e){return()=>{e.default=F.parse(new fe(" = {}"))}}class H extends E{static parse(e,{special:t,regular:n}={}){const r={special:t},o=se(new H({source:e.source,tokens:r}));return t&&"stringifier"===t.value&&(r.termination=e.consume(";"),r.termination)?(o.arguments=[],o):(t||n||(r.special=e.consume("getter","setter","deleter")),o.idlType=ee(e)||e.error("Missing return type"),r.name=e.consume("identifier","includes"),r.open=e.consume("(")||e.error("Invalid operation"),o.arguments=X(e),r.close=e.consume(")")||e.error("Unterminated operation"),r.termination=e.consume(";")||e.error("Unterminated operation, expected `;`"),o.this)}get type(){return"operation"}get name(){const{name:e}=this.tokens;return e?V(e.value):""}get special(){return this.tokens.special?this.tokens.special.value:""}*validate(e){if(!this.name&&["","static"].includes(this.special)){const e="Regular or static operations must have both a return type and an identifier.";yield C(this.tokens.open,this,"incomplete-op",e)}this.idlType&&(yield*this.idlType.validate(e));for(const t of this.arguments)yield*t.validate(e)}}class G extends E{static parse(e,{special:t,noInherit:n=!1,readonly:r=!1}={}){const o=e.position,s={special:t},i=se(new G({source:e.source,tokens:s}));if(t||n||(s.special=e.consume("inherit")),"inherit"===i.special&&e.probe("readonly")&&e.error("Inherited attributes cannot be read-only"),s.readonly=e.consume("readonly"),r&&!s.readonly&&e.probe("attribute")&&e.error("Attributes must be readonly in this context"),s.base=e.consume("attribute"),s.base){switch(i.idlType=Q(e,"attribute-type")||e.error("Attribute lacks a type"),i.idlType.generic){case"sequence":case"record":e.error(`Attributes cannot accept ${i.idlType.generic} types`)}return s.name=e.consume("identifier","async","required")||e.error("Attribute lacks a name"),s.termination=e.consume(";")||e.error("Unterminated attribute, expected `;`"),i.this}e.unconsume(o)}get type(){return"attribute"}get special(){return this.tokens.special?this.tokens.special.value:""}get readonly(){return!!this.tokens.readonly}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.extAttrs.validate(e),yield*this.idlType.validate(e)}}function V(e){return e.startsWith("_")?e.slice(1):e}function Z(e,{parser:t,allowDangler:n,listName:r="list"}){const o=t(e);if(!o)return[];o.tokens.separator=e.consume(",");const s=[o];for(;o.tokens.separator;){const o=t(e);if(!o){n||e.error("Trailing comma in "+r);break}if(o.tokens.separator=e.consume(","),s.push(o),!o.tokens.separator)break}return s}function Y(e){return e.consume("true","false","Infinity","-Infinity","NaN","decimal","integer")}function J({type:e,value:t}){switch(e){case"true":case"false":return{type:"boolean",value:"true"===e};case"Infinity":case"-Infinity":return{type:"Infinity",negative:e.startsWith("-")};case"[":return{type:"sequence",value:[]};case"{":return{type:"dictionary"};case"decimal":case"integer":return{type:"number",value:t};case"string":return{type:"string",value:t.slice(1,-1)};default:return{type:e}}}function K(e){const{source:t}=e,n=function(){const n=e.consume("unsigned"),r=e.consume("short","long");if(r){const o=e.consume("long");return new U({source:t,tokens:{prefix:n,base:r,postfix:o}})}n&&e.error("Failed to parse integer type")}()||function(){const n=e.consume("unrestricted"),r=e.consume("float","double");if(r)return new U({source:t,tokens:{prefix:n,base:r}});n&&e.error("Failed to parse float type")}();if(n)return n;const r=e.consume("bigint","boolean","byte","octet","undefined");return r?new U({source:t,tokens:{base:r}}):void 0}function X(e){return Z(e,{parser:q.parse,listName:"arguments list"})}function Q(e,t){const n=z.parse(e),r=U.parse(e,t);return r&&(se(r).extAttrs=n),r}function ee(e,t){const n=U.parse(e,t||"return-type");if(n)return n;const r=e.consume("void");if(r){const t=new U({source:e.source,tokens:{base:r}});return t.type="return-type",t}}function te(e){const t=e.consume("stringifier");if(!t)return;return G.parse(e,{special:t})||H.parse(e,{special:t})||e.error("Unterminated stringifier")}function ne(e){const t=e.split("\n");if(t.length){const e=t[t.length-1].match(/^\s+/);if(e)return e[0]}return""}function re(e){return()=>{if(e.extAttrs.length){const t=new fe("Exposed=Window,"),n=j.parse(t);n.tokens.separator=t.consume(",");const r=e.extAttrs[0];/^\s/.test(r.tokens.name.trivia)||(r.tokens.name.trivia=" "+r.tokens.name.trivia),e.extAttrs.unshift(n)}else{se(e).extAttrs=z.parse(new fe("[Exposed=Window]"));const t=e.tokens.base.trivia;e.extAttrs.tokens.open.trivia=t,e.tokens.base.trivia="\n"+ne(t)}}}function oe(e){if(e.extAttrs.length)return e.extAttrs.tokens.open;if("operation"===e.type&&!e.special)return oe(e.idlType);return Object.values(e.tokens).sort((e,t)=>e.index-t.index)[0]}function se(e,t){return t||(t=e),e?new Proxy(e,{get(e,t){const n=e[t];return Array.isArray(n)?se(n,e):n},set(e,n,r){if(e[n]=r,!r)return!0;if(Array.isArray(r))for(const e of r)void 0!==e.parent&&(e.parent=t);else void 0!==r.parent&&(r.parent=t);return!0}}):e}const ie={decimal:/-?(?=[0-9]*\.|[0-9]+[eE])(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/y,integer:/-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/y,identifier:/[_-]?[A-Za-z][0-9A-Z_a-z-]*/y,string:/"[^"]*"/y,whitespace:/[\t\n\r ]+/y,comment:/((\/(\/.*|\*([^*]|\*[^/])*\*\/)[\t\n\r ]*)+)/y,other:/[^\t\n\r 0-9A-Za-z]/y},ae=["ArrayBuffer","DataView","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","Uint8ClampedArray","Float32Array","Float64Array","any","object","symbol"],ce=["ByteString","DOMString","USVString"],le=["async","attribute","callback","const","constructor","deleter","dictionary","enum","getter","includes","inherit","interface","iterable","maplike","namespace","partial","required","setlike","setter","static","stringifier","typedef","unrestricted"],ue=["-Infinity","FrozenArray","Infinity","NaN","ObservableArray","Promise","bigint","boolean","byte","double","false","float","long","mixin","null","octet","optional","or","readonly","record","sequence","short","true","undefined","unsigned","void"].concat(le,ce,ae),de=["(",")",",","...",":",";","<","=",">","?","[","]","{","}"],pe=["_constructor","toString","_toString"];class fe{constructor(e){this.source=function(e){const t=[];let n=0,r="",o=1,s=0;for(;n<e.length;){const a=e.charAt(n);let c=-1;if(/[\t\n\r ]/.test(a)?c=i("whitespace",{noFlushTrivia:!0}):"/"===a&&(c=i("comment",{noFlushTrivia:!0})),-1!==c){const e=t.pop().value;o+=(e.match(/\n/g)||[]).length,r+=e,s-=1}else if(/[-0-9.A-Z_a-z]/.test(a)){if(c=i("decimal"),-1===c&&(c=i("integer")),-1===c){c=i("identifier");const e=t.length-1,n=t[e];if(-1!==c){if(pe.includes(n.value)){const r=V(n.value)+" is a reserved identifier and must not be used.";throw new he(_(t,e,null,r))}ue.includes(n.value)&&(n.type=n.value)}}}else'"'===a&&(c=i("string"));for(const i of de)if(e.startsWith(i,n)){t.push({type:i,value:i,trivia:r,line:o,index:s}),r="",n+=i.length,c=n;break}if(-1===c&&(c=i("other")),-1===c)throw new Error("Token stream not progressing");n=c,s+=1}return t.push({type:"eof",value:"",trivia:r}),t;function i(i,{noFlushTrivia:a}={}){const c=ie[i];c.lastIndex=n;const l=c.exec(e);return l?(t.push({type:i,value:l[0],trivia:r,line:o,index:s}),a||(r=""),c.lastIndex):-1}}(e),this.position=0}error(e){throw new he(_(this.source,this.position,this.current,e))}probe(e){return this.source.length>this.position&&this.source[this.position].type===e}consume(...e){for(const t of e){if(!this.probe(t))continue;const e=this.source[this.position];return this.position++,e}}unconsume(e){this.position=e}}class he extends Error{constructor({message:e,bareMessage:t,context:n,line:r,sourceName:o,input:s,tokens:i}){super(e),this.name="WebIDLParseError",this.bareMessage=t,this.context=n,this.line=r,this.sourceName=o,this.input=s,this.tokens=i}}class me extends L{static parse(e){const t=e.consume("string");if(t)return new me({source:e.source,tokens:{value:t}})}get type(){return"enum-value"}get value(){return super.value.slice(1,-1)}}class ge extends E{static parse(e){const t={};if(t.base=e.consume("enum"),!t.base)return;t.name=e.consume("identifier")||e.error("No name for enum");const n=se(new ge({source:e.source,tokens:t}));return e.current=n.this,t.open=e.consume("{")||e.error("Bodyless enum"),n.values=Z(e,{parser:me.parse,allowDangler:!0,listName:"enumeration"}),e.probe("string")&&e.error("No comma between enum values"),t.close=e.consume("}")||e.error("Unexpected value in enum"),n.values.length||e.error("No value in enum"),t.termination=e.consume(";")||e.error("No semicolon after enum"),n.this}get type(){return"enum"}get name(){return V(this.tokens.name.value)}}class be extends E{static parse(e){const t=e.consume("identifier");if(!t)return;const n={target:t};if(n.includes=e.consume("includes"),n.includes)return n.mixin=e.consume("identifier")||e.error("Incomplete includes statement"),n.termination=e.consume(";")||e.error("No terminating ; for includes statement"),new be({source:e.source,tokens:n});e.unconsume(t.index)}get type(){return"includes"}get target(){return V(this.tokens.target.value)}get includes(){return V(this.tokens.mixin.value)}}class we extends E{static parse(e){const t={},n=se(new we({source:e.source,tokens:t}));if(t.base=e.consume("typedef"),t.base)return n.idlType=Q(e,"typedef-type")||e.error("Typedef lacks a type"),t.name=e.consume("identifier")||e.error("Typedef lacks a name"),e.current=n.this,t.termination=e.consume(";")||e.error("Unterminated typedef, expected `;`"),n.this}get type(){return"typedef"}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.idlType.validate(e)}}class ye extends E{static parse(e,t){const n={base:t},r=se(new ye({source:e.source,tokens:n}));return n.name=e.consume("identifier")||e.error("Callback lacks a name"),e.current=r.this,n.assign=e.consume("=")||e.error("Callback lacks an assignment"),r.idlType=ee(e)||e.error("Callback lacks a return type"),n.open=e.consume("(")||e.error("Callback lacks parentheses for arguments"),r.arguments=X(e),n.close=e.consume(")")||e.error("Unterminated callback"),n.termination=e.consume(";")||e.error("Unterminated callback, expected `;`"),r.this}get type(){return"callback"}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.extAttrs.validate(e),yield*this.idlType.validate(e)}}class ve extends E{static parse(e,t,{type:n,inheritable:r,allowedMembers:o}){const{tokens:s}=t;for(s.name=e.consume("identifier")||e.error("Missing name in "+t.type),e.current=t,t=se(t),r&&Object.assign(s,function(e){const t=e.consume(":");return t?{colon:t,inheritance:e.consume("identifier")||e.error("Inheritance lacks a type")}:{}}(e)),s.open=e.consume("{")||e.error("Bodyless "+n),t.members=[];;){if(s.close=e.consume("}"),s.close)return s.termination=e.consume(";")||e.error("Missing semicolon after "+n),t.this;const r=z.parse(e);let i;for(const[t,...n]of o)if(i=se(t(e,...n)),i)break;i||e.error("Unknown member"),i.extAttrs=r,t.members.push(i.this)}}get partial(){return!!this.tokens.partial}get name(){return V(this.tokens.name.value)}get inheritance(){return this.tokens.inheritance?V(this.tokens.inheritance.value):null}*validate(e){for(const t of this.members)t.validate&&(yield*t.validate(e))}}class ke extends E{static parse(e){const t={};if(t.base=e.consume("const"),!t.base)return;let n=K(e);if(!n){const t=e.consume("identifier")||e.error("Const lacks a type");n=new U({source:e.source,tokens:{base:t}})}e.probe("?")&&e.error("Unexpected nullable constant type"),n.type="const-type",t.name=e.consume("identifier")||e.error("Const lacks a name"),t.assign=e.consume("=")||e.error("Const lacks value assignment"),t.value=Y(e)||e.error("Const lacks a value"),t.termination=e.consume(";")||e.error("Unterminated const, expected `;`");const r=new ke({source:e.source,tokens:t});return se(r).idlType=n,r}get type(){return"const"}get name(){return V(this.tokens.name.value)}get value(){return J(this.tokens.value)}}class xe extends E{static parse(e){const t=e.position,n={},r=se(new xe({source:e.source,tokens:n}));if(n.readonly=e.consume("readonly"),n.readonly||(n.async=e.consume("async")),n.base=n.readonly?e.consume("maplike","setlike"):n.async?e.consume("iterable"):e.consume("iterable","maplike","setlike"),!n.base)return void e.unconsume(t);const{type:o}=r,s="maplike"===o,i=s||"iterable"===o,a=r.async&&"iterable"===o;n.open=e.consume("<")||e.error(`Missing less-than sign \`<\` in ${o} declaration`);const c=Q(e)||e.error(`Missing a type argument in ${o} declaration`);return r.idlType=[c],r.arguments=[],i&&(c.tokens.separator=e.consume(","),c.tokens.separator?r.idlType.push(Q(e)):s&&e.error(`Missing second type argument in ${o} declaration`)),n.close=e.consume(">")||e.error(`Missing greater-than sign \`>\` in ${o} declaration`),e.probe("(")&&(a?(n.argsOpen=e.consume("("),r.arguments.push(...X(e)),n.argsClose=e.consume(")")||e.error("Unterminated async iterable argument list")):e.error("Arguments are only allowed for `async iterable`")),n.termination=e.consume(";")||e.error(`Missing semicolon after ${o} declaration`),r.this}get type(){return this.tokens.base.value}get readonly(){return!!this.tokens.readonly}get async(){return!!this.tokens.async}*validate(e){for(const t of this.idlType)yield*t.validate(e);for(const t of this.arguments)yield*t.validate(e)}}class $e extends E{static parse(e){const t=e.consume("constructor");if(!t)return;const n={base:t};n.open=e.consume("(")||e.error("No argument list in constructor");const r=X(e);n.close=e.consume(")")||e.error("Unterminated constructor"),n.termination=e.consume(";")||e.error("No semicolon after constructor");const o=new $e({source:e.source,tokens:n});return se(o).arguments=r,o}get type(){return"constructor"}*validate(e){this.idlType&&(yield*this.idlType.validate(e));for(const t of this.arguments)yield*t.validate(e)}}function Se(e){const t=e.consume("static");if(!t)return;return G.parse(e,{special:t})||H.parse(e,{special:t})||e.error("No body in static member")}class _e extends ve{static parse(e,t,{partial:n=null}={}){const r={partial:n,base:t};return ve.parse(e,new _e({source:e.source,tokens:r}),{type:"interface",inheritable:!n,allowedMembers:[[ke.parse],[$e.parse],[Se],[te],[xe.parse],[G.parse],[H.parse]]})}get type(){return"interface"}*validate(e){if(yield*this.extAttrs.validate(e),!this.partial&&this.extAttrs.every(e=>"Exposed"!==e.name)){const e="Interfaces must have `[Exposed]` extended attribute. To fix, add, for example, `[Exposed=Window]`. Please also consider carefully if your interface should also be exposed in a Worker scope. Refer to the [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) for more information.";yield C(this.tokens.name,this,"require-exposed",e,{autofix:re(this)})}const t=this.extAttrs.filter(e=>"Constructor"===e.name);for(const e of t){const t="Constructors should now be represented as a `constructor()` operation on the interface instead of `[Constructor]` extended attribute. Refer to the [WebIDL spec section on constructor operations](https://heycam.github.io/webidl/#idl-constructors) for more information.";yield C(e.tokens.name,this,"constructor-member",t,{autofix:Ce(this,e)})}if(this.extAttrs.some(e=>"Global"===e.name)){const e=this.extAttrs.filter(e=>"LegacyFactoryFunction"===e.name);for(const t of e){const e="Interfaces marked as `[Global]` cannot have factory functions.";yield C(t.tokens.name,this,"no-constructible-global",e)}const t=this.members.filter(e=>"constructor"===e.type);for(const e of t){const t="Interfaces marked as `[Global]` cannot have constructors.";yield C(e.tokens.base,this,"no-constructible-global",t)}}yield*super.validate(e),this.partial||(yield*function*(e,t){const n=new Set(i(t).map(e=>e.name)),r=e.partials.get(t.name)||[],o=e.mixinMap.get(t.name)||[];for(const e of[...r,...o]){const r=i(e);yield*s(r,n,e,t);for(const e of r)n.add(e.name)}function*s(e,t,n,r){for(const o of e){const{name:e}=o;if(e&&t.has(e)){const t=`The operation "${e}" has already been defined for the base interface "${r.name}" either in itself or in a mixin`;yield C(o.tokens.name,n,"no-cross-overload",t)}}}function i(e){return e.members.filter(({type:e})=>"operation"===e)}}(e,this))}}function Ce(e,t){return e=se(e),()=>{const n=ne(e.extAttrs.tokens.open.trivia),r=e.members.length?ne(oe(e.members[0]).trivia):function(e){const t=ne(e),n=t.includes("\t")?"\t":" ";return t+n}(n),o=$e.parse(new fe(`\n${r}constructor();`));o.extAttrs=new z({}),se(o).arguments=t.arguments;const s=function(e,t){const n=e.slice().reverse().findIndex(t);return-1===n?n:e.length-n-1}(e.members,e=>"constructor"===e.type);e.members.splice(s+1,0,o);const{close:i}=e.tokens;i.trivia.includes("\n")||(i.trivia+="\n"+n);const{extAttrs:a}=e,c=a.indexOf(t),l=a.splice(c,1);a.length?a.length===c?a[c-1].tokens.separator=void 0:a[c].tokens.name.trivia.trim()||(a[c].tokens.name.trivia=l[0].tokens.name.trivia):a.tokens.open=a.tokens.close=void 0}}class Ee extends ve{static parse(e,t,{partial:n}={}){const r={partial:n,base:t};if(r.mixin=e.consume("mixin"),r.mixin)return ve.parse(e,new Ee({source:e.source,tokens:r}),{type:"interface mixin",allowedMembers:[[ke.parse],[te],[G.parse,{noInherit:!0}],[H.parse,{regular:!0}]]})}get type(){return"interface mixin"}}class Re extends E{static parse(e){const t={},n=se(new Re({source:e.source,tokens:t}));return n.extAttrs=z.parse(e),t.required=e.consume("required"),n.idlType=Q(e,"dictionary-type")||e.error("Dictionary member lacks a type"),t.name=e.consume("identifier")||e.error("Dictionary member lacks a name"),n.default=F.parse(e),t.required&&n.default&&e.error("Required member must not have a default"),t.termination=e.consume(";")||e.error("Unterminated dictionary member, expected `;`"),n.this}get type(){return"field"}get name(){return V(this.tokens.name.value)}get required(){return!!this.tokens.required}*validate(e){yield*this.idlType.validate(e)}}class Te extends ve{static parse(e,{partial:t}={}){const n={partial:t};if(n.base=e.consume("dictionary"),n.base)return ve.parse(e,new Te({source:e.source,tokens:n}),{type:"dictionary",inheritable:!t,allowedMembers:[[Re.parse]]})}get type(){return"dictionary"}}class Ae extends ve{static parse(e,{partial:t}={}){const n={partial:t};if(n.base=e.consume("namespace"),n.base)return ve.parse(e,new Ae({source:e.source,tokens:n}),{type:"namespace",allowedMembers:[[G.parse,{noInherit:!0,readonly:!0}],[H.parse,{regular:!0}]]})}get type(){return"namespace"}*validate(e){if(!this.partial&&this.extAttrs.every(e=>"Exposed"!==e.name)){const e="Namespaces must have [Exposed] extended attribute. To fix, add, for example, [Exposed=Window]. Please also consider carefully if your namespace should also be exposed in a Worker scope. Refer to the [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) for more information.";yield C(this.tokens.name,this,"require-exposed",e,{autofix:re(this)})}yield*super.validate(e)}}class Le extends ve{static parse(e,t,{partial:n=null}={}){const r={callback:t};if(r.base=e.consume("interface"),r.base)return ve.parse(e,new Le({source:e.source,tokens:r}),{type:"callback interface",inheritable:!n,allowedMembers:[[ke.parse],[H.parse,{regular:!0}]]})}get type(){return"callback interface"}}function Pe(e,t){const n=e.source;function r(t){e.error(t)}function o(...t){return e.consume(...t)}function s(t){const n=o("interface");if(!n)return;return Ee.parse(e,n,t)||_e.parse(e,n,t)||r("Interface has no proper body")}function i(){return function(){const t=o("callback");if(t)return e.probe("interface")?Le.parse(e,t):ye.parse(e,t)}()||s()||function(){const t=o("partial");if(t)return Te.parse(e,{partial:t})||s({partial:t})||Ae.parse(e,{partial:t})||r("Partial doesn't apply to anything")}()||Te.parse(e)||ge.parse(e)||we.parse(e)||be.parse(e)||Ae.parse(e)}const a=function(){if(!n.length)return[];const s=[];for(;;){const t=z.parse(e),n=i();if(!n){t.length&&r("Stray extended attributes");break}se(n).extAttrs=t,s.push(n)}const a=o("eof");return t.concrete&&s.push(a),s}();return e.position<n.length&&r("Unrecognised tokens"),a}function Ie(e){return e}const De={wrap:e=>e.join(""),trivia:Ie,name:Ie,reference:Ie,type:Ie,generic:Ie,nameless:Ie,inheritance:Ie,definition:Ie,extendedAttribute:Ie,extendedAttributeReference:Ie};function Ne(e,t){const n=new Map,r=e.filter(e=>"includes"===e.type);for(const e of r){const r=t.get(e.includes);if(!r)continue;const o=n.get(e.target);o?o.push(r):n.set(e.target,[r])}return n}function*Oe(e){const t=function(e){const t=new Map,n=new Set,r=new Map;for(const o of e)if(o.partial){const e=r.get(o.name);e?e.push(o):r.set(o.name,[o])}else o.name&&(t.has(o.name)?n.add(o):t.set(o.name,o));return{all:e,unique:t,partials:r,duplicates:n,mixinMap:Ne(e,t),cache:{typedefIncludesDictionary:new WeakMap,dictionaryIncludesRequiredField:new WeakMap}}}(e);for(const e of t.all)e.validate&&(yield*e.validate(t));yield*function*({unique:e,duplicates:t}){for(const n of t){const{name:t}=n,r=`The name "${t}" of type "${e.get(t).type}" was already seen`;yield C(n.tokens.name,n,"no-duplicate",r)}}(t)}var je=Object.freeze({__proto__:null,parse:function(e,t={}){const n=new fe(e);return void 0!==t.sourceName&&(n.source.name=t.sourceName),Pe(n,t)},write:function(e,{templates:t=De}={}){function n(e,{unescaped:n,context:r}){return n||(n=e.startsWith("_")?e.slice(1):e),t.reference(e,n,r)}function r(e,n=Ie,...r){if(!e)return"";const o=n(e.value,...r);return t.wrap([t.trivia(e.trivia),o])}function o(e,t){return r(e,n,{context:t})}function s(e,n){return r(e,t.name,n)}function i(e){if(e.union||e.generic)return t.wrap([r(e.tokens.base,t.generic),r(e.tokens.open),...e.subtype.map(a),r(e.tokens.close)]);const o=e.tokens.prefix||e.tokens.base,s=e.tokens.prefix?[e.tokens.prefix.value,t.trivia(e.tokens.base.trivia)]:[],i=n(t.wrap([...s,e.tokens.base.value,r(e.tokens.postfix)]),{unescaped:e.idlType,context:e});return t.wrap([t.trivia(o.trivia),i])}function a(e){return t.wrap([p(e.extAttrs),i(e),r(e.tokens.nullable),r(e.tokens.separator)])}function c(e){return e?t.wrap([r(e.tokens.assign),...e.expression.map(e=>r(e))]):""}function l(e){return t.wrap([p(e.extAttrs),r(e.tokens.optional),t.type(a(e.idlType)),r(e.tokens.variadic),s(e.tokens.name,{data:e}),c(e.default),r(e.tokens.separator)])}function u(e){return t.wrap([r(e.tokens.value),r(e.tokens.separator)])}function d(e){const{rhsType:n}=e.params;return t.wrap([t.trivia(e.tokens.name.trivia),t.extendedAttribute(t.wrap([t.extendedAttributeReference(e.name),r(e.params.tokens.assign),o(e.params.tokens.secondaryName,e),r(e.params.tokens.open),...e.params.list?e.params.list.map("identifier-list"===n?n=>function(e,n){return t.wrap([o(e.tokens.value,n),r(e.tokens.separator)])}(n,e):n&&n.endsWith("-list")?u:l):[],r(e.params.tokens.close)])),r(e.tokens.separator)])}function p(e){return e.length?t.wrap([r(e.tokens.open),...e.map(d),r(e.tokens.close)]):""}function f(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.callback),r(e.tokens.partial),r(e.tokens.base),r(e.tokens.mixin),s(e.tokens.name,{data:e}),(o=e,o.tokens.inheritance?t.wrap([r(o.tokens.colon),t.trivia(o.tokens.inheritance.trivia),t.inheritance(n(o.tokens.inheritance.value,{context:o}))]):""),r(e.tokens.open),g(e.members,e),r(e.tokens.close),r(e.tokens.termination)]),{data:e});var o}function h(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.readonly),r(e.tokens.async),r(e.tokens.base,t.generic),r(e.tokens.open),t.wrap(e.idlType.map(a)),r(e.tokens.close),r(e.tokens.argsOpen),t.wrap(e.arguments.map(l)),r(e.tokens.argsClose),r(e.tokens.termination)]),{data:e,parent:n})}t=Object.assign({},De,t);const m={interface:f,"interface mixin":f,namespace:f,operation:function(e,n){const o=e.idlType?[t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.open),t.wrap(e.arguments.map(l)),r(e.tokens.close)]:[];return t.definition(t.wrap([p(e.extAttrs),e.tokens.name?r(e.tokens.special):r(e.tokens.special,t.nameless,{data:e,parent:n}),...o,r(e.tokens.termination)]),{data:e,parent:n})},attribute:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.special),r(e.tokens.readonly),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.termination)]),{data:e,parent:n})},constructor:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base,t.nameless,{data:e,parent:n}),r(e.tokens.open),t.wrap(e.arguments.map(l)),r(e.tokens.close),r(e.tokens.termination)]),{data:e,parent:n})},dictionary:f,field:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.required),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),c(e.default),r(e.tokens.termination)]),{data:e,parent:n})},const:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.assign),r(e.tokens.value),r(e.tokens.termination)]),{data:e,parent:n})},typedef:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e}),r(e.tokens.termination)]),{data:e})},includes:function(e){return t.definition(t.wrap([p(e.extAttrs),o(e.tokens.target,e),r(e.tokens.includes),o(e.tokens.mixin,e),r(e.tokens.termination)]),{data:e})},callback:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),s(e.tokens.name,{data:e}),r(e.tokens.assign),t.type(a(e.idlType)),r(e.tokens.open),...e.arguments.map(l),r(e.tokens.close),r(e.tokens.termination)]),{data:e})},enum:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),s(e.tokens.name,{data:e}),r(e.tokens.open),g(e.values,e),r(e.tokens.close),r(e.tokens.termination)]),{data:e})},"enum-value":function(e,n){return t.wrap([t.trivia(e.tokens.value.trivia),t.definition(t.wrap(['"',t.name(e.value,{data:e,parent:n}),'"']),{data:e,parent:n}),r(e.tokens.separator)])},iterable:h,maplike:h,setlike:h,"callback interface":f,eof:function(e){return t.trivia(e.trivia)}};function g(e,n){if(!e)return;const r=e.map(e=>function(e,t){if(!m[e.type])throw new Error(`Type "${e.type}" is unsupported`);return m[e.type](e,t)}(e,n));return t.wrap(r)}return g(e)},validate:function(e){return[...Oe((t=e,t.flat?t.flat():[].concat(...t)))];var t},WebIDLParseError:he});var ze,We=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(ze={exports:{}},ze.exports),ze.exports);const Me=/[&<>"']/,Ue=/[&<>"']/g,Fe=/[<>"']|&(?!#?\w+;)/,qe=/[<>"']|&(?!#?\w+;)/g,Be={"&":"&","<":"<",">":">",'"':""","'":"'"},He=e=>Be[e];const Ge=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function Ve(e){return e.replace(Ge,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const Ze=/(^|[^\[])\^/g;const Ye=/[^\w:]/g,Je=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const Ke={},Xe=/^[^:]+:\/*[^/]*$/,Qe=/^([^:]+:)[\s\S]*$/,et=/^([^:]+:\/*[^/]*)[\s\S]*$/;function tt(e,t){Ke[" "+e]||(Xe.test(e)?Ke[" "+e]=e+"/":Ke[" "+e]=nt(e,"/",!0));const n=-1===(e=Ke[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(Qe,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(et,"$1")+t:e+t}function nt(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const s=e.charAt(r-o-1);if(s!==t||n){if(s===t||!n)break;o++}else o++}return e.substr(0,r-o)}var rt={escape:function(e,t){if(t){if(Me.test(e))return e.replace(Ue,He)}else if(Fe.test(e))return e.replace(qe,He);return e},unescape:Ve,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(Ze,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(Ve(n)).replace(Ye,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!Je.test(n)&&(n=tt(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:tt,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:nt,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:ot}=We,{rtrim:st,splitCells:it,escape:at,findClosingBracket:ct}=rt;function lt(e,t,n){const r=t.href,o=t.title?at(t.title):null,s=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:s}:{type:"image",raw:n,href:r,title:o,text:at(s)}}var ut=class{constructor(e){this.options=e||ot}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:st(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=st(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:it(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=it(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},s=t[0].match(this.rules.block.item);let i,a,c,l,u,d,p,f,h,m=!1,g=s.length;c=this.rules.block.listItemStart.exec(s[0]);for(let t=0;t<g;t++){if(i=s[t],e=i,this.options.pedantic||(h=i.match(new RegExp("\\n\\s*\\n {0,"+(c[0].length-1)+"}\\S")),h&&(u=i.length-h.index+s.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),i=i.substring(0,h.index),e=i,g=t+1)),t!==g-1){if(l=this.rules.block.listItemStart.exec(s[t+1]),this.options.pedantic?l[1].length>c[1].length:l[1].length>=c[0].length||l[1].length>3){s.splice(t,2,s[t]+(!this.options.pedantic&&l[1].length<c[0].length&&!s[t].match(/\n$/)?"":"\n")+s[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?l[2][l[2].length-1]!==n[n.length-1]:r===(1===l[2].length))&&(u=s.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),c=l}a=i.length,i=i.replace(/^ *([*+-]|\d+[.)]) ?/,""),~i.indexOf("\n ")&&(a-=i.length,i=this.options.pedantic?i.replace(/^ {1,4}/gm,""):i.replace(new RegExp("^ {1,"+a+"}","gm"),"")),i=st(i,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(p=/^\[[ xX]\] /.test(i),f=void 0,p&&(f=" "!==i[1],i=i.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:p,checked:f,loose:d,text:i})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):at(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:it(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=it(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:at(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):at(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=st(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=ct(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),lt(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return lt(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,s,i=n,a=0;const c="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=c.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(s=o.length,r[3]||r[4])i+=s;else if(!((r[5]||r[6])&&n%3)||(n+s)%3){if(i-=s,!(i>0)){if(i+a-s<=0&&!t.slice(c.lastIndex).match(c)&&(s=Math.min(s,s+i+a)),Math.min(n,s)%2)return{type:"em",raw:e.slice(0,n+r.index+s+1),text:e.slice(1,n+r.index+s)};if(Math.min(n,s)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+s+1),text:e.slice(2,n+r.index+s-1)}}}else a+=s}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=at(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=at(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=at(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=at(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=at(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):at(r[0]):r[0]:at(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:dt,edit:pt,merge:ft}=rt,ht={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:dt,table:dt,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ht.def=pt(ht.def).replace("label",ht._label).replace("title",ht._title).getRegex(),ht.bullet=/(?:[*+-]|\d{1,9}[.)])/,ht.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ht.item=pt(ht.item,"gm").replace(/bull/g,ht.bullet).getRegex(),ht.listItemStart=pt(/^( *)(bull) */).replace("bull",ht.bullet).getRegex(),ht.list=pt(ht.list).replace(/bull/g,ht.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ht.def.source+")").getRegex(),ht._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ht._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ht.html=pt(ht.html,"i").replace("comment",ht._comment).replace("tag",ht._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ht.paragraph=pt(ht._paragraph).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.blockquote=pt(ht.blockquote).replace("paragraph",ht.paragraph).getRegex(),ht.normal=ft({},ht),ht.gfm=ft({},ht.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ht.gfm.nptable=pt(ht.gfm.nptable).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.gfm.table=pt(ht.gfm.table).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.pedantic=ft({},ht.normal,{html:pt("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ht._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:dt,paragraph:pt(ht.normal._paragraph).replace("hr",ht.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ht.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const mt={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:dt,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:dt,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};mt.punctuation=pt(mt.punctuation).replace(/punctuation/g,mt._punctuation).getRegex(),mt.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,mt.escapedEmSt=/\\\*|\\_/g,mt._comment=pt(ht._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),mt.emStrong.lDelim=pt(mt.emStrong.lDelim).replace(/punct/g,mt._punctuation).getRegex(),mt.emStrong.rDelimAst=pt(mt.emStrong.rDelimAst,"g").replace(/punct/g,mt._punctuation).getRegex(),mt.emStrong.rDelimUnd=pt(mt.emStrong.rDelimUnd,"g").replace(/punct/g,mt._punctuation).getRegex(),mt._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,mt._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,mt._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,mt.autolink=pt(mt.autolink).replace("scheme",mt._scheme).replace("email",mt._email).getRegex(),mt._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,mt.tag=pt(mt.tag).replace("comment",mt._comment).replace("attribute",mt._attribute).getRegex(),mt._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,mt._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,mt._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,mt.link=pt(mt.link).replace("label",mt._label).replace("href",mt._href).replace("title",mt._title).getRegex(),mt.reflink=pt(mt.reflink).replace("label",mt._label).getRegex(),mt.reflinkSearch=pt(mt.reflinkSearch,"g").replace("reflink",mt.reflink).replace("nolink",mt.nolink).getRegex(),mt.normal=ft({},mt),mt.pedantic=ft({},mt.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:pt(/^!?\[(label)\]\((.*?)\)/).replace("label",mt._label).getRegex(),reflink:pt(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",mt._label).getRegex()}),mt.gfm=ft({},mt.normal,{escape:pt(mt.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),mt.gfm.url=pt(mt.gfm.url,"i").replace("email",mt.gfm._extended_email).getRegex(),mt.breaks=ft({},mt.gfm,{br:pt(mt.br).replace("{2,}","*").getRegex(),text:pt(mt.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var gt={block:ht,inline:mt};const{defaults:bt}=We,{block:wt,inline:yt}=gt,{repeatString:vt}=rt;function kt(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function xt(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var $t=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||bt,this.options.tokenizer=this.options.tokenizer||new ut,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:wt.normal,inline:yt.normal};this.options.pedantic?(t.block=wt.pedantic,t.inline=yt.pedantic):this.options.gfm&&(t.block=wt.gfm,this.options.breaks?t.inline=yt.breaks:t.inline=yt.gfm),this.tokenizer.rules=t}static get rules(){return{block:wt,inline:yt}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,s,i;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),i=t[t.length-1],i&&"paragraph"===i.type?(i.raw+="\n"+r.raw,i.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),s=r.items.length,o=0;o<s;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),i=t[t.length-1],i&&"text"===i.type?(i.raw+="\n"+r.raw,i.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,s,i;const a=e.length;for(t=0;t<a;t++)switch(i=e[t],i.type){case"paragraph":case"text":case"heading":i.tokens=[],this.inlineTokens(i.text,i.tokens);break;case"table":for(i.tokens={header:[],cells:[]},o=i.header.length,n=0;n<o;n++)i.tokens.header[n]=[],this.inlineTokens(i.header[n],i.tokens.header[n]);for(o=i.cells.length,n=0;n<o;n++)for(s=i.cells[n],i.tokens.cells[n]=[],r=0;r<s.length;r++)i.tokens.cells[n][r]=[],this.inlineTokens(s[r],i.tokens.cells[n][r]);break;case"blockquote":this.inline(i.tokens);break;case"list":for(o=i.items.length,n=0;n<o;n++)this.inline(i.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,s,i,a,c,l=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(l));)e.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(l=l.slice(0,i.index)+"["+vt("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(l));)l=l.slice(0,i.index)+"["+vt("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.escapedEmSt.exec(l));)l=l.slice(0,i.index)+"++"+l.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(c=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const s=t[t.length-1];s&&"text"===o.type&&"text"===s.type?(s.raw+=o.raw,s.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,l,c))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,xt))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,xt))){if(o=this.tokenizer.inlineText(e,r,kt))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(c=o.raw.slice(-1)),a=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=o.raw,s.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:St}=We,{cleanUrl:_t,escape:Ct}=rt;var Et=class{constructor(e){this.options=e||St}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+Ct(r,!0)+'">'+(n?e:Ct(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:Ct(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=_t(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+Ct(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=_t(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},Rt=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},Tt=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:At}=We,{unescape:Lt}=rt;var Pt=class e{constructor(e){this.options=e||At,this.options.renderer=this.options.renderer||new Et,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Rt,this.slugger=new Tt}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,s,i,a,c,l,u,d,p,f,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,Lt(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(l="",c="",s=d.header.length,r=0;r<s;r++)c+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(l+=this.renderer.tablerow(c),u="",s=d.cells.length,r=0;r<s;r++){for(a=d.tokens.cells[r],c="",i=a.length,o=0;o<i;o++)c+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(c)}v+=this.renderer.table(l,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(p=d.ordered,f=d.start,h=d.loose,s=d.items.length,u="",r=0;r<s;r++)g=d.items[r],b=g.checked,w=g.task,m="",g.task&&(y=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,p,f);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const s=e.length;for(n=0;n<s;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:It,checkSanitizeDeprecation:Dt,escape:Nt}=rt,{getDefaults:Ot,changeDefaults:jt,defaults:zt}=We;function Wt(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=It({},Wt.defaults,t||{}),Dt(t),n){const r=t.highlight;let o;try{o=$t.lex(e,t)}catch(e){return n(e)}const s=function(e){let s;if(!e)try{s=Pt.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,s)};if(!r||r.length<3)return s();if(delete t.highlight,!o.length)return s();let i=0;return Wt.walkTokens(o,(function(e){"code"===e.type&&(i++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return s(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),i--,0===i&&s()}))},0))})),void(0===i&&s())}try{const n=$t.lex(e,t);return t.walkTokens&&Wt.walkTokens(n,t.walkTokens),Pt.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Nt(e.message+"",!0)+"</pre>";throw e}}Wt.options=Wt.setOptions=function(e){return It(Wt.defaults,e),jt(Wt.defaults),Wt},Wt.getDefaults=Ot,Wt.defaults=zt,Wt.use=function(e){const t=It({},e);if(e.renderer){const n=Wt.defaults.renderer||new Et;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let s=e.renderer[t].apply(n,o);return!1===s&&(s=r.apply(n,o)),s}}t.renderer=n}if(e.tokenizer){const n=Wt.defaults.tokenizer||new ut;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let s=e.tokenizer[t].apply(n,o);return!1===s&&(s=r.apply(n,o)),s}}t.tokenizer=n}if(e.walkTokens){const n=Wt.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Wt.setOptions(t)},Wt.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Wt.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Wt.walkTokens(n,t);break;case"list":Wt.walkTokens(n.items,t);break;default:n.tokens&&Wt.walkTokens(n.tokens,t)}},Wt.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=It({},Wt.defaults,t||{}),Dt(t);try{const n=$t.lexInline(e,t);return t.walkTokens&&Wt.walkTokens(n,t.walkTokens),Pt.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Nt(e.message+"",!0)+"</pre>";throw e}},Wt.Parser=Pt,Wt.parser=Pt.parse,Wt.Renderer=Et,Wt.TextRenderer=Rt,Wt.Lexer=$t,Wt.lexer=$t.lex,Wt.Tokenizer=ut,Wt.Slugger=Tt,Wt.parse=Wt;var Mt=Wt;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ut=function(e){var t={exports:{}};return e(t,t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function s(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function i(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function c(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return i(""===n?e[r-1]:n,o)}))}function l(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var s=r[o];if(s[0].test(t))return c(t,s)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?i(r,o):e.hasOwnProperty(o)?i(r,e[o]):l(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&l(o,o,n)===o}}function p(e,t,n){return(n?t+" ":"")+(1===t?p.singular(e):p.plural(e))}return p.plural=u(o,r,e),p.isPlural=d(o,r,e),p.singular=u(r,o,t),p.isSingular=d(r,o,t),p.addPluralRule=function(t,n){e.push([s(t),n])},p.addSingularRule=function(e,n){t.push([s(e),n])},p.addUncountableRule=function(e){"string"!=typeof e?(p.addPluralRule(e,"$0"),p.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},p.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return p.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return p.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return p.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(p.addUncountableRule),p}))})),Ft=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=s.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},s;function s(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(i,this)}function i(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,s){for(var i=("selectedIndex"in t),a=i;r<o;){var c,l=e(n[r],1);t.insertBefore(l,s),i&&a&&l.selected&&(a=!a,c=t.selectedIndex,t.selectedIndex=c<0?r:d.call(t.querySelectorAll("option"),l)),r++}}function s(e,t){return e==t}function i(e){return e}function a(e,t,n,r,o,s,i){var a=s-o;if(a<1)return-1;for(;a<=n-t;){for(var c=t,l=o;c<n&&l<s&&i(e[c],r[l]);)c++,l++;if(l===s)return t;t=c+1}return-1}function c(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function l(e,t,n,r){for(;n<r;)f(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,p=function(e,t,n){for(var r=1,o=t;r<o;){var s=(r+o)/2>>>0;n<e[s]?o=s:r=1+s}return r},f=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||s,d=r.node||i,f=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,w=0;g<m&&w<b&&u(t[g],n[w]);)g++,w++;for(;g<m&&w<b&&u(t[m-1],n[b-1]);)m--,b--;var y=g===m,v=w===b;if(y&&v)return n;if(y&&w<b)return o(d,e,n,w,b,c(d,t,g,h,f)),n;if(v&&g<m)return l(d,t,g,m),n;var k=m-g,x=b-w,$=-1;if(k<x){if(-1<($=a(n,w,b,t,g,m,u)))return o(d,e,n,w,$,d(t[g],0)),o(d,e,n,$+k,b,c(d,t,m,h,f)),n}else if(x<k&&-1<($=a(t,g,m,n,w,b,u)))return l(d,t,g,$),l(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,w,b,d(t[g],0)),l(d,t,g,m)):k==x&&function(e,t,n,r,o,s){for(;r<o&&s(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,w,b,c(d,t,m,h,f)):function(e,t,n,r,s,i,a,c,u,d,f,h,m){!function(e,t,n,r,s,i,a,c,u){for(var d=[],p=e.length,f=a,h=0;h<p;)switch(e[h++]){case 0:s++,f++;break;case 1:d.push(r[s]),o(t,n,r,s++,s,f<c?t(i[f],0):u);break;case-1:f++}for(h=0;h<p;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(i[a])?a++:l(t,i,a++,a)}}(function(e,t,n,r,o,s,i){var a,c,l,u,d,p,f=n+s,h=[];e:for(b=0;b<=f;b++){if(50<b)return null;for(p=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(c=(l=a===-b||a!==b&&u[p+a-1]<u[p+a+1]?u[p+a+1]:u[p+a-1]+1)-a;l<s&&c<n&&i(r[o+l],e[t+c]);)l++,c++;if(l===s&&c===n)break e;d[b+a]=l}}for(var m=Array(b/2+f/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<l&&0<c&&i(r[o+l-1],e[t+c-1]);)m[g--]=0,l--,c--;if(!b)break;p=b-1,u=b?h[b-1]:[0,0],(a=l-c)==-b||a!==b&&u[p+a-1]<u[p+a+1]?(c--,m[g--]=1):(l--,m[g--]=-1)}return m}(n,r,i,a,c,d,h)||function(e,t,n,r,o,s,i,a){var c=0,l=r<a?r:a,u=Array(l++),d=Array(l);d[0]=-1;for(var f=1;f<l;f++)d[f]=i;for(var h=o.slice(s,i),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(c=p(d,l,g=b+s))&&(d[c]=g,u[c]={newi:m,oldi:g,prev:u[c-1]})}for(c=--l,--i;d[c]>i;)--c;l=a+r-c;var w=Array(l),y=u[c];for(--n;y;){for(var v=y.newi,k=y.oldi;v<n;)w[--l]=1,--n;for(;k<i;)w[--l]=-1,--i;w[--l]=0,--n,--i,y=y.prev}for(;t<=n;)w[--l]=1,--n;for(;s<=i;)w[--l]=-1,--i;return w}(n,r,s,i,a,c,u,d),e,t,n,r,a,c,f,m)}(d,e,n,w,b,x,t,g,m,k,h,u,f),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,w={};try{w.Map=Map}catch(u){w.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var s=r(o);return s&&(t.splice(e,1),n.splice(e,1)),s},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,s){return n[r(o)?e:t.push(o)-1]=s,this}};function r(n){return-1<(e=t.indexOf(n))}}}var y=w.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,S,_,C,E,R,T={},A={},L=[],P=A.hasOwnProperty,I=0,D={attributes:T,define:function(e,t){e.indexOf("-")<0?(e in A||(I=L.push(e)),A[e]=t):T[e]=t},invoke:function(e,t){for(var n=0;n<I;n++){var r=L[n];if(P.call(e,r))return A[r](e[r],t)}}},N=Array.isArray||(S=($={}.toString).call([]),function(e){return $.call(e)===S}),O=(_=e,C="fragment",R="content"in z(E="template")?function(e){var t=z(E);return t.innerHTML=e,t.content}:function(e){var t,n=z(C),r=z(E);return j(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=z(C),n=z("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",j(t,n.firstChild.childNodes),t}:R)(e)});function j(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function z(e){return e===C?_.createDocumentFragment():_.createElementNS("http://www.w3.org/1999/xhtml",e)}var W,M,U,F,q,B,H,G,V,Z=(M="appendChild",U="cloneNode",F="createTextNode",B=(q="importNode")in(W=e),(H=W.createDocumentFragment())[M](W[F]("g")),H[M](W[F]("")),(B?W[q](H,!0):H[U](!0)).childNodes.length<2?function e(t,n){for(var r=t[U](),o=t.childNodes||[],s=o.length,i=0;n&&i<s;i++)r[M](e(o[i],n));return r}:B?W[q]:function(e,t){return e[U](!!t)}),Y="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},J="-"+Math.random().toFixed(6)+"%",K=!1;try{G=e.createElement("template"),V="tabindex","content"in G&&(G.innerHTML="<p "+V+'="'+J+'"></p>',G.content.childNodes[0].getAttribute(V)==J)||(J="_dt: "+J.slice(1,-1)+";",K=!0)}catch(u){}var X="\x3c!--"+J+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",se="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",ie=new RegExp(oe+re+se+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+se+"*)(["+te+"]*/>)","g"),ce=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+X+"\\2","gi");function le(e,t,n,r){return"<"+t+n.replace(ce,ue)+r}function ue(e,t,n){return t+(n||'"')+J+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var pe=K?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function fe(t,n,r,o){for(var s=t.childNodes,i=s.length,a=0;a<i;){var c=s[a];switch(c.nodeType){case 1:var l=o.concat(a);!function(t,n,r,o){for(var s,i=t.attributes,a=[],c=[],l=pe(i,r),u=l.length,d=0;d<u;){var p=l[d++],f=p.value===J;if(f||1<(s=p.value.split(X)).length){var h=p.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(f?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=i[m]||i[m.toLowerCase()];if(f)n.push(he(g,o,m,null));else{for(var b=s.length-2;b--;)r.shift();n.push(he(g,o,m,s))}}c.push(p)}}for(var w=((d=0)<(u=c.length)&&K&&!("ownerSVGElement"in t));d<u;){var y=c[d++];w&&(y.value=""),t.removeAttribute(y.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=i.length,d=0;d<u;)k.setAttributeNode(i[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(c,n,r,l),fe(c,n,r,l);break;case 8:var u=c.textContent;if(u===J)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:c,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(c),a--,i--}break;case 3:Q.test(t.nodeName)&&Y.call(c.textContent)===X&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function we(e,t){var n=(e.convert||function(e){return e.join(X).replace(ae,de).replace(ie,le)})(t),r=e.transform;r&&(n=r(n));var o=O(n,e.type);ve(o);var s=[];return fe(o,s,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=s.length,i=0,a=0;i<o;){var c=s[i++],l=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,c.path);switch(c.type){case"any":r.push({fn:e.any(l,[]),sparse:!1});break;case"attr":var u=c.sparse,d=e.attribute(l,c.name,c.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(l),sparse:!1}),l.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var s=1,i=1;s<e;){var a=r[s-i];if(a.sparse){var c=a.values,l=c[0],u=1,d=c.length;for(i+=d-2;u<d;)l+=arguments[s++]+c[u++];a.fn(l)}else a.fn(arguments[s++])}return n}}}}var ye=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===Y.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),_e(n,!0)}(e,t):_e(e.style,!1)});function Se(e,t,n){return t+"-"+n.toLowerCase()}function _e(e,t){var n,r;return function(o){var s,i,a,c;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(i in r)i in o||(e[i]="")}else t?e.value="":e.cssText="";for(i in s=t?{}:e,o)a="number"!=typeof(c=o[i])||ke.test(i)?c:c+"px",!t&&/^--/.test(i)?s.setProperty(i,a):s[i]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,Se),":",e[t],";");return n.join("")}(r=s):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ce,Ee,Re=(Ce=[].slice,(Ee=Te.prototype).ELEMENT_NODE=1,Ee.nodeType=111,Ee.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ee.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,s=r.length;o<s;o++)t.appendChild(r[o]);return t},Te);function Te(e){var t=this.childNodes=Ce.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Ae(e){return{html:e}}function Le(e,t){switch(e.nodeType){case Ue:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Le(e.render(),t);default:return e}}function Pe(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Ae).then(t):Promise.resolve(D.invoke(e,t)).then(t)}function Ie(e){return null!=e&&"then"in e}var De,Ne,Oe,je,ze,We="ownerSVGElement",Me=v.prototype.nodeType,Ue=Re.prototype.nodeType,Fe=(Ne=(De={Event:b,WeakSet:u}).Event,Oe=De.WeakSet,je=!0,ze=null,function(e){return je&&(je=!je,ze=new Oe,function(e){var t=new Oe,n=new Oe;try{new MutationObserver(i).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],s=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){i(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){s({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){s({addedNodes:[e.target],removedNodes:[]})}),!0)}function i(e){for(var r,o=e.length,s=0;s<o;s++)a((r=e[s]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,s=new Ne(t),i=e.length,a=0;a<i;1===(o=e[a++]).nodeType&&function e(t,n,r,o,s){ze.has(t)&&!o.has(t)&&(s.delete(t),o.add(t),t.dispatchEvent(n));for(var i=t.children||[],a=i.length,c=0;c<a;e(i[c++],n,r,o,s));}(o,s,t,n,r));}}(e.ownerDocument)),ze.add(e),e}),qe=/^(?:form|list)$/i,Be=[].slice;function He(t){return this.type=t,function(t){var n=ye,r=ve;return function(o){var s,i,a;return n!==o&&(s=t,i=n=o,a=be.get(i)||be.set(i,we(s,i)),r=a.updates(Z.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ge=!(He.prototype={attribute:function(e,t,n){var r,o=We in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return l=e,u=t.slice(1),o?function(e){try{l[u]=e}catch(t){l.setAttribute(u,e)}}:function(e){l[u]=e};if("?"===t.slice(0,1))return i=e,a=t.slice(1),function(e){c!==!!e&&((c=!!e)?i.setAttribute(a,""):i.removeAttribute(a))};if(/^on/.test(t)){var s=t.slice(2);return"connected"===s||"disconnected"===s?Fe(e):t.toLowerCase()in e&&(s=s.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(s,r,!1),(r=t)&&e.addEventListener(s,t,!1))}}if("data"===t||!o&&t in e&&!qe.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in D.attributes)return function(n){var o=D.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var i,a,c,l,u,d=!1,p=n.cloneNode(!0);return function(t){r!==t&&(r=t,p.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(p)),p.value=t):(p.value=t,d||(d=!0,e.setAttributeNode(p)))))}},any:function(e,t){var n,r={node:Le,before:e},o=We in e?"svg":"html",s=!1;return function i(a){switch(typeof a){case"string":case"number":case"boolean":s?n!==a&&(n=a,t[0].textContent=a):(s=!0,n=a,t=h(e.parentNode,t,[(c=a,e.ownerDocument.createTextNode(c))],r));break;case"function":i(a(e));break;case"object":case"undefined":if(null==a){s=!1,t=h(e.parentNode,t,[],r);break}default:if(s=!1,N(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":i({html:a});break;case"object":if(N(a[0])&&(a=a.concat.apply([],a)),Ie(a[0])){Promise.all(a).then(i);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?Be.call(a.childNodes):[a],r):Ie(a)?a.then(i):"placeholder"in a?Pe(a,i):"text"in a?i(String(a.text)):"any"in a?i(a.any):"html"in a?t=h(e.parentNode,t,Be.call(O([].concat(a.html).join(""),o).childNodes),r):i("length"in a?Be.call(a):D.invoke(a,i))}var c}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?Ie(r)?r.then(n):"placeholder"in r?Pe(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?Be.call(r).join(""):D.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,s,i,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),c=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||c?(o={},s=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=c?s:(i=new n,function(e){return i.get(e)||(n=s(t=e),i.set(t,n),n);var t,n})):Ge=!0,Ze(t)};function Ze(e){return Ge?e:Ve(e)}function Ye(e){for(var t=arguments.length,n=[Ze(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Je=new n,Ke=function(e){var t,n,r;return function(){var o=Ye.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Xe=function(e,t){var n=t.indexOf(":"),r=Je.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Je.set(e,r={}),r[o]||(r[o]=Ke(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Re(t):e},et=new n;function tt(){var e=et.get(this),t=Ye.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(We in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,st,it=D.define,at=He.prototype;function ct(e){return arguments.length<2?null==e?Ke("html"):"string"==typeof e?ct.wire(null,e):"raw"in e?Ke("html")(e):"nodeType"in e?ct.bind(e):Xe(e,"html"):("raw"in e?Ke("html"):ct.wire).apply(null,arguments)}return ct.Component=v,ct.bind=function(e){return tt.bind(e)},ct.define=it,ct.diff=h,(ct.hyper=ct).observe=Fe,ct.tagger=at,ct.wire=function(e,t){return null==e?Ke(t||"html"):Xe(e,t||"html")},ct._={WeakMap:n,WeakSet:u},nt=Ke,rt=new n,ot=Object.create,st=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var s,i,a,c=t.get(e)||st(e,t);switch(typeof o){case"object":case"function":var l=c.w||(c.w=new n);return l.get(o)||(s=l,i=o,a=new e(r),s.set(i,a),a);default:var u=c.p||(c.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new y,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),ct}(document); -/*! (c) Andrea Giammarchi (ISC) */const qt=$,Bt=je,Ht=Ft,Gt=Mt,Vt=Ut,Zt=/-/g;const Yt=rn({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}}),Jt=new Intl.DateTimeFormat(["en-ca-iso8601"],{timeZone:"UTC",year:"numeric",month:"2-digit",day:"2-digit"}),Kt=".informative, .note, .issue, .example, .ednote, .practice, .introductory";function Xt(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Qt(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function en(e=[],t=(e=>e),n=s){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(Yt.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=Yt.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function tn(e){return e.replace(/&/g,"&").replace(/>/g,">").replace(/"/g,""").replace(/</g,"<")}function nn(e){return e.trim().replace(/\s+/g," ")}function rn(e,t=s){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function on(e,t=""){return Jt.format(e).replace(Zt,t)}function sn(e=new Date,t=document.documentElement.lang||"en"){e instanceof Date||(e=new Date(e));const n=[t,"en"];return`${e.toLocaleString(n,{day:"2-digit",timeZone:"UTC"})} ${e.toLocaleString(n,{month:"long",timeZone:"UTC"})} ${e.toLocaleString(n,{year:"numeric",timeZone:"UTC"})}`}function an(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){Cn(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}async function cn(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,s;if("caches"in window)try{if(o=await caches.open(r.origin),s=await o.match(n),s&&new Date(s.headers.get("Expires"))>new Date)return s}catch(e){console.error("Failed to use Cache API.",e)}const i=await fetch(n);if(!i.ok&&s)return console.warn("Returning a stale cached response for "+r),s;if(o&&i.ok){const e=i.clone(),r=new Headers(i.headers),s=new Date(Date.now()+t);r.set("Expires",s.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return i}function ln(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Ht`${e}, `);return Ht`${r}${n[n.length-1]}`}function un(e,t=(e=>e)){const n=e.map(t);switch(n.length){case 0:case 1:return n[0];case 2:return Ht`${n[0]}${Yt.x_and_y}${n[1]}`;default:{const e=ln(n.slice(0,-1));return Ht`${e}${Yt.x_y_and_z}${n[n.length-1]}`}}}function dn(e,t=""){return pn(e,t,function(e){let t=0;for(const n of e)t=Math.imul(31,t)+n.charCodeAt(0)|0;return String(t)}(nn(e.textContent)))}function pn(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function fn(e){const t=new Set,n="ltNodefault"in e.dataset?"":nn(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>nn(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(nn(e)))}return[...t]}function hn(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function mn(e,t){const n=t.closest(Kt);let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function gn(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function bn(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function wn(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class yn extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function vn(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>hn(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),kn(t),t}function kn(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...xn(t)])e.remove()}function*xn(e){for(;e.nextNode();)yield e.currentNode}class $n extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class Sn extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||pn(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:s,title:i,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:s,title:i,details:a,stack:n}}}function _n(e,t,n={}){const r={...n,isWarning:!1};An("error",new Sn(e,t,r))}function Cn(e,t,n={}){const r={...n,isWarning:!0};An("warn",new Sn(e,t,r))}function En(e){return`[\`${e}\`](https://respec.org/docs/#${e})`}const Rn="core/pubsubhub",Tn=new Map;function An(e,...t){if(!Tn.has(e))return;if(Array.from(Tn.get(e)).forEach(e=>{try{e(...t)}catch(t){_n(`Error when calling function ${e.name}.`,Rn,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function Ln(e,t,n={once:!1}){return n.once?Ln(e,(function n(...r){!function({topic:e,cb:t}){const n=Tn.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(Tn.has(e)?Tn.get(e).add(t):Tn.set(e,new Set([t])),{topic:e,cb:t})}n(Rn,{sub:Ln});const Pn=["githubToken","githubUser"];class In{constructor(){this._respecDonePromise=new Promise(e=>{Ln("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],Ln("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),Ln("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}}const Dn="core/post-process";const Nn="core/pre-process";const On="core/base-runner";var jn=Object.freeze({__proto__:null,name:On,runAll:async function(e){!function(){const e=new In;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(Cn("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),An("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),Ln("amend-user-config",n),Ln("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of Pn)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),An("amend-user-config",r)}(respecConfig),performance.mark(On+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||_n("Every item in `preProcess` must be a JS function.",Nn),t}).map(async t=>{try{return await t(e,document)}catch(e){_n(`Function ${t.name} threw an error during \`preProcess\`.`,Nn,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const s=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(s),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},An("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||_n("Every item in `postProcess` must be a JS function.",Dn),t}).map(async t=>{try{return await t(e,document)}catch(e){_n(`Function ${t.name} threw an error during \`postProcess\`.`,Dn,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),An("end-all"),Qt(document),performance.mark(On+"-end"),performance.measure(On,On+"-start",On+"-end")}});var zn=String.raw`.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0} +window.respecVersion="26.5.0",function(){"use strict";window.addEventListener("error",e=>{console.error(e.error,e.message,e)});const e=[Promise.resolve().then((function(){return Mn})),Promise.resolve().then((function(){return wr})),Promise.resolve().then((function(){return yr})),Promise.resolve().then((function(){return i})),Promise.resolve().then((function(){return $r})),Promise.resolve().then((function(){return ls})),Promise.resolve().then((function(){return ps})),Promise.resolve().then((function(){return ms})),Promise.resolve().then((function(){return bs})),Promise.resolve().then((function(){return $s})),Promise.resolve().then((function(){return Cs})),Promise.resolve().then((function(){return er})),Promise.resolve().then((function(){return qn})),Promise.resolve().then((function(){return Ts})),Promise.resolve().then((function(){return Ps})),Promise.resolve().then((function(){return uo})),Promise.resolve().then((function(){return Ns})),Promise.resolve().then((function(){return Os})),Promise.resolve().then((function(){return Ws})),Promise.resolve().then((function(){return qi})),Promise.resolve().then((function(){return Gi})),Promise.resolve().then((function(){return Yi})),Promise.resolve().then((function(){return Ji})),Promise.resolve().then((function(){return ea})),Promise.resolve().then((function(){return sa})),Promise.resolve().then((function(){return ua})),Promise.resolve().then((function(){return fa})),Promise.resolve().then((function(){return Da})),Promise.resolve().then((function(){return di})),Promise.resolve().then((function(){return Qa})),Promise.resolve().then((function(){return fc})),Promise.resolve().then((function(){return Ba})),Promise.resolve().then((function(){return hc})),Promise.resolve().then((function(){return xi})),Promise.resolve().then((function(){return Ec})),Promise.resolve().then((function(){return Tc})),Promise.resolve().then((function(){return Ac})),Promise.resolve().then((function(){return Wc})),Promise.resolve().then((function(){return Uc})),Promise.resolve().then((function(){return Fc})),Promise.resolve().then((function(){return Vc})),Promise.resolve().then((function(){return tl})),Promise.resolve().then((function(){return ll})),Promise.resolve().then((function(){return fl})),Promise.resolve().then((function(){return wl})),Promise.resolve().then((function(){return Sl})),Promise.resolve().then((function(){return _l})),Promise.resolve().then((function(){return Tl})),Promise.resolve().then((function(){return Ol})),Promise.resolve().then((function(){return xa})),Promise.resolve().then((function(){return ql})),Promise.resolve().then((function(){return Zl})),Promise.resolve().then((function(){return eu})),Promise.resolve().then((function(){return ru})),Promise.resolve().then((function(){return su})),Promise.resolve().then((function(){return au})),Promise.resolve().then((function(){return hu})),Promise.resolve().then((function(){return yu})),Promise.resolve().then((function(){return Lo})),Promise.resolve().then((function(){return $u}))];(async()=>{const[t,{ui:n},...r]=await Promise.all(e);try{n.show(),await async function(){"loading"===document.readyState&&await new Promise(e=>document.addEventListener("DOMContentLoaded",e))}(),await t.runAll(r)}finally{n.enable()}})().catch(e=>{console.error(e)});const t=!!window.require;if(!t){const e=function(e,t){const n=e.map(e=>{if(!(e in window.require.modules))throw new Error("Unsupported dependency name: "+e);return window.require.modules[e]});Promise.all(n).then(e=>t(...e))};e.modules={},window.require=e}function n(e,n){t||(window.require.modules[e]=n)}const r=document.documentElement;r&&!r.hasAttribute("lang")&&(r.lang="en",r.hasAttribute("dir")||(r.dir="ltr"));const o={},s=r.lang;var i=Object.freeze({__proto__:null,name:"core/l10n",l10n:o,lang:s,run:function(e){e.l10n=o[s]||o.en}});let a,c;const l=new WeakMap,u=new WeakMap,d=new WeakMap,p=new WeakMap,f=new WeakMap;let h={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return u.get(e);if("objectStoreNames"===t)return e.objectStoreNames||d.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return b(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function m(e){return e!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(c||(c=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(e)?function(...t){return e.apply(w(this),t),b(l.get(this))}:function(...t){return b(e.apply(w(this),t))}:function(t,...n){const r=e.call(w(this),t,...n);return d.set(r,t.sort?t.sort():[t]),b(r)}}function g(e){return"function"==typeof e?m(e):(e instanceof IDBTransaction&&function(e){if(u.has(e))return;const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("complete",o),e.removeEventListener("error",s),e.removeEventListener("abort",s)},o=()=>{t(),r()},s=()=>{n(e.error||new DOMException("AbortError","AbortError")),r()};e.addEventListener("complete",o),e.addEventListener("error",s),e.addEventListener("abort",s)});u.set(e,t)}(e),t=e,(a||(a=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])).some(e=>t instanceof e)?new Proxy(e,h):e);var t}function b(e){if(e instanceof IDBRequest)return function(e){const t=new Promise((t,n)=>{const r=()=>{e.removeEventListener("success",o),e.removeEventListener("error",s)},o=()=>{t(b(e.result)),r()},s=()=>{n(e.error),r()};e.addEventListener("success",o),e.addEventListener("error",s)});return t.then(t=>{t instanceof IDBCursor&&l.set(t,e)}).catch(()=>{}),f.set(t,e),t}(e);if(p.has(e))return p.get(e);const t=g(e);return t!==e&&(p.set(e,t),f.set(t,e)),t}const w=e=>f.get(e);const y=["get","getKey","getAll","getAllKeys","count"],v=["put","add","delete","clear"],k=new Map;function x(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(k.get(t))return k.get(t);const n=t.replace(/FromIndex$/,""),r=t!==n,o=v.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!o&&!y.includes(n))return;const s=async function(e,...t){const s=this.transaction(e,o?"readwrite":"readonly");let i=s.store;return r&&(i=i.index(t.shift())),(await Promise.all([i[n](...t),o&&s.done]))[0]};return k.set(t,s),s}h=(e=>({...e,get:(t,n,r)=>x(t,n)||e.get(t,n,r),has:(t,n)=>!!x(t,n)||e.has(t,n)}))(h);var $=Object.freeze({__proto__:null,deleteDB:function(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",()=>t()),b(n).then(()=>{})},openDB:function(e,t,{blocked:n,upgrade:r,blocking:o,terminated:s}={}){const i=indexedDB.open(e,t),a=b(i);return r&&i.addEventListener("upgradeneeded",e=>{r(b(i.result),e.oldVersion,e.newVersion,b(i.transaction))}),n&&i.addEventListener("blocked",()=>n()),a.then(e=>{s&&e.addEventListener("close",()=>s()),o&&e.addEventListener("versionchange",()=>o())}).catch(()=>{}),a},unwrap:w,wrap:b});function S(e,t,n,r,o,{level:s="error",autofix:i,ruleName:a}={}){function c(n){return n>0?e.slice(t,t+n):e.slice(Math.max(t+n,0),t)}function l(n,{precedes:r}={}){const o=n.map(e=>e.trivia+e.value).join(""),s=e[t];return"eof"===s.type?o:r?o+s.trivia:o.slice(s.trivia.length)}const u="eof"!==e[t].type?e[t].line:e.length>1?e[t-1].line:1,d=function(e){const t=e.split("\n");return t[t.length-1]}(l(c(-5),{precedes:!0})),p=c(5),f=l(p),h=d+f.split("\n")[0]+"\n"+(" ".repeat(d.length)+"^"),m="Syntax"===o?"since":"inside",g=`${o} error at line ${u}${e.name?" in "+e.name:""}${n&&n.name?`, ${m} \`${n.partial?"partial ":""}${function(e){const t=[e];for(;e&&e.parent;){const{parent:n}=e;t.unshift(n),e=n}return t.map(e=>function(e,t){let n=e;return t&&(n+=" "+t),n}(e.type,e.name)).join(" -> ")}(n)}\``:""}:\n${h}`;return{message:`${g} ${r}`,bareMessage:r,context:g,line:u,sourceName:e.name,level:s,ruleName:a,autofix:i,input:f,tokens:p}}function _(e,t,n,r){return S(e,t,n,r,"Syntax")}function C(e,t,n,r,o={}){return o.ruleName=n,S(t.source,e.index,t,r,"Validation",o)}class E{constructor({source:e,tokens:t}){Object.defineProperties(this,{source:{value:e},tokens:{value:t,writable:!0},parent:{value:null,writable:!0},this:{value:this}})}toJSON(){const e={type:void 0,name:void 0,inheritance:void 0};let t=this;for(;t!==Object.prototype;){const n=Object.getOwnPropertyDescriptors(t);for(const[t,r]of Object.entries(n))(r.enumerable||r.get)&&(e[t]=this[t]);t=Object.getPrototypeOf(t)}return e}}function R(e,t,{useNullableInner:n}={}){if(!e.union){const r=t.unique.get(e.idlType);if(!r)return;if("typedef"===r.type){const{typedefIncludesDictionary:n}=t.cache;if(n.has(r))return n.get(r);t.cache.typedefIncludesDictionary.set(r,void 0);const o=R(r.idlType,t);if(t.cache.typedefIncludesDictionary.set(r,o),o)return{reference:e,dictionary:o.dictionary}}if("dictionary"===r.type&&(n||!e.nullable))return{reference:e,dictionary:r}}for(const n of e.subtype){const e=R(n,t);if(e)return n.union?e:{reference:n,dictionary:e.dictionary}}}function T(e,t){if(t.cache.dictionaryIncludesRequiredField.has(e))return t.cache.dictionaryIncludesRequiredField.get(e);t.cache.dictionaryIncludesRequiredField.set(e,void 0);let n=e.members.some(e=>e.required);if(!n&&e.inheritance){const r=t.unique.get(e.inheritance);r?T(r,t)&&(n=!0):n=!0}return t.cache.dictionaryIncludesRequiredField.set(e,n),n}class A extends Array{constructor({source:e,tokens:t}){super(),Object.defineProperties(this,{source:{value:e},tokens:{value:t},parent:{value:null,writable:!0}})}}class L extends E{static parser(e,t){return()=>{const n=e.consume(t);if(n)return new L({source:e.source,tokens:{value:n}})}}get value(){return V(this.tokens.value.value)}}function P(e,t){return Z(e,{parser:L.parser(e,t),listName:t+" list"})}const I=["identifier","decimal","integer","string"],D=new Map([...["NoInterfaceObject","LenientSetter","LenientThis","TreatNonObjectAsNull","Unforgeable"].map(e=>[e,"Legacy"+e]),["NamedConstructor","LegacyFactoryFunction"],["OverrideBuiltins","LegacyOverrideBuiltIns"],["TreatNullAs","LegacyNullToEmptyString"]]);function N(e){for(const t of I){const n=P(e,t);if(n.length)return n}e.error("Expected identifiers, strings, decimals, or integers but none found")}class O extends E{static parse(e){const t={assign:e.consume("=")},n=se(new O({source:e.source,tokens:t}));return t.assign&&(t.secondaryName=e.consume(...I)),t.open=e.consume("("),t.open?(n.list=n.rhsIsList?N(e):X(e),t.close=e.consume(")")||e.error("Unexpected token in extended attribute argument list")):n.hasRhs&&!t.secondaryName&&e.error("No right hand side to extended attribute assignment"),n.this}get rhsIsList(){return this.tokens.assign&&!this.tokens.secondaryName}get rhsType(){return this.rhsIsList?this.list[0].tokens.value.type+"-list":this.tokens.secondaryName?this.tokens.secondaryName.type:null}}class j extends E{static parse(e){const t=e.consume("identifier");if(t)return new j({source:e.source,tokens:{name:t},params:O.parse(e)})}constructor({source:e,tokens:t,params:n}){super({source:e,tokens:t}),n.parent=this,Object.defineProperty(this,"params",{value:n})}get type(){return"extended-attribute"}get name(){return this.tokens.name.value}get rhs(){const{rhsType:e,tokens:t,list:n}=this.params;if(!e)return null;return{type:e,value:this.params.rhsIsList?n:V(t.secondaryName.value)}}get arguments(){const{rhsIsList:e,list:t}=this.params;return!t||e?[]:t}*validate(e){const{name:t}=this;if("LegacyNoInterfaceObject"===t){const e="`[LegacyNoInterfaceObject]` extended attribute is an undesirable feature that may be removed from Web IDL in the future. Refer to the [relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more information.";yield C(this.tokens.name,this,"no-nointerfaceobject",e,{level:"warning"})}else if(D.has(t)){const e=`\`[${t}]\` extended attribute is a legacy feature that is now renamed to \`[${D.get(t)}]\`. Refer to the [relevant upstream PR](https://github.com/heycam/webidl/pull/870) for more information.`;yield C(this.tokens.name,this,"renamed-legacy",e,{level:"warning",autofix:(n=this,()=>{const{name:e}=n;n.tokens.name.value=D.get(e),"TreatNullAs"===e&&(n.params.tokens={})})})}var n;for(const t of this.arguments)yield*t.validate(e)}}class z extends A{static parse(e){const t={};if(t.open=e.consume("["),!t.open)return new z({});const n=new z({source:e.source,tokens:t});return n.push(...Z(e,{parser:j.parse,listName:"extended attribute"})),t.close=e.consume("]")||e.error("Unexpected closing token of extended attribute"),n.length||e.error("Found an empty extended attribute"),e.probe("[")&&e.error("Illegal double extended attribute lists, consider merging them"),n}*validate(e){for(const t of this)yield*t.validate(e)}}function W(e,t){const n=e.consume("?");n&&(t.tokens.nullable=n),e.probe("?")&&e.error("Can't nullable more than once")}function M(e,t){let n=function(e,t){const n=e.consume("FrozenArray","ObservableArray","Promise","sequence","record");if(!n)return;const r=se(new U({source:e.source,tokens:{base:n}}));switch(r.tokens.open=e.consume("<")||e.error("No opening bracket after "+n.type),n.type){case"Promise":{e.probe("[")&&e.error("Promise type cannot have extended attribute");const n=ee(e,t)||e.error("Missing Promise subtype");r.subtype.push(n);break}case"sequence":case"FrozenArray":case"ObservableArray":{const o=Q(e,t)||e.error(`Missing ${n.type} subtype`);r.subtype.push(o);break}case"record":{e.probe("[")&&e.error("Record key cannot have extended attribute");const n=e.consume(...ce)||e.error("Record key must be one of: "+ce.join(", ")),o=new U({source:e.source,tokens:{base:n}});o.tokens.separator=e.consume(",")||e.error("Missing comma after record key type"),o.type=t;const s=Q(e,t)||e.error("Error parsing generic type record");r.subtype.push(o,s);break}}return r.idlType||e.error("Error parsing generic type "+n.type),r.tokens.close=e.consume(">")||e.error("Missing closing bracket after "+n.type),r.this}(e,t)||K(e);if(!n){const t=e.consume("identifier",...ce,...ae);if(!t)return;n=new U({source:e.source,tokens:{base:t}}),e.probe("<")&&e.error("Unsupported generic type "+t.value)}return"Promise"===n.generic&&e.probe("?")&&e.error("Promise type cannot be nullable"),n.type=t||null,W(e,n),n.nullable&&"any"===n.idlType&&e.error("Type `any` cannot be made nullable"),n}class U extends E{static parse(e,t){return M(e,t)||function(e,t){const n={};if(n.open=e.consume("("),!n.open)return;const r=se(new U({source:e.source,tokens:n}));for(r.type=t||null;;){const t=Q(e)||e.error("No type after open parenthesis or 'or' in union type");"any"===t.idlType&&e.error("Type `any` cannot be included in a union type"),"Promise"===t.generic&&e.error("Type `Promise` cannot be included in a union type"),r.subtype.push(t);const n=e.consume("or");if(!n)break;t.tokens.separator=n}return r.idlType.length<2&&e.error("At least two types are expected in a union type but found less"),n.close=e.consume(")")||e.error("Unterminated union type"),W(e,r),r.this}(e,t)}constructor({source:e,tokens:t}){super({source:e,tokens:t}),Object.defineProperty(this,"subtype",{value:[],writable:!0}),this.extAttrs=new z({})}get generic(){return this.subtype.length&&this.tokens.base?this.tokens.base.value:""}get nullable(){return Boolean(this.tokens.nullable)}get union(){return Boolean(this.subtype.length)&&!this.tokens.base}get idlType(){if(this.subtype.length)return this.subtype;return V([this.tokens.prefix,this.tokens.base,this.tokens.postfix].filter(e=>e).map(e=>e.value).join(" "))}*validate(e){if(yield*this.extAttrs.validate(e),"void"===this.idlType){const e="`void` is now replaced by `undefined`. Refer to the [relevant GitHub issue](https://github.com/heycam/webidl/issues/60) for more information.";yield C(this.tokens.base,this,"replace-void",e,{autofix:(t=this,()=>{t.tokens.base.value="undefined"})})}var t;const n=!this.union&&e.unique.get(this.idlType),r=this.union?this:n&&"typedef"===n.type?n.idlType:void 0;if(r&&this.nullable){const{reference:t}=R(r,e)||{};if(t){const e=(this.union?t:this).tokens.base,n="Nullable union cannot include a dictionary type.";yield C(e,this,"no-nullable-union-dict",n)}}else for(const t of this.subtype)yield*t.validate(e)}}class F extends E{static parse(e){const t=e.consume("=");if(!t)return null;const n=Y(e)||e.consume("string","null","[","{")||e.error("No value for default"),r=[n];if("["===n.type){const t=e.consume("]")||e.error("Default sequence value must be empty");r.push(t)}else if("{"===n.type){const t=e.consume("}")||e.error("Default dictionary value must be empty");r.push(t)}return new F({source:e.source,tokens:{assign:t},expression:r})}constructor({source:e,tokens:t,expression:n}){super({source:e,tokens:t}),n.parent=this,Object.defineProperty(this,"expression",{value:n})}get type(){return J(this.expression[0]).type}get value(){return J(this.expression[0]).value}get negative(){return J(this.expression[0]).negative}}class q extends E{static parse(e){const t=e.position,n={},r=se(new q({source:e.source,tokens:n}));return r.extAttrs=z.parse(e),n.optional=e.consume("optional"),r.idlType=Q(e,"argument-type"),r.idlType?(n.optional||(n.variadic=e.consume("...")),n.name=e.consume("identifier",...le),n.name?(r.default=n.optional?F.parse(e):null,r.this):e.unconsume(t)):e.unconsume(t)}get type(){return"argument"}get optional(){return!!this.tokens.optional}get variadic(){return!!this.tokens.variadic}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.idlType.validate(e);const t=R(this.idlType,e,{useNullableInner:!0});if(t)if(this.idlType.nullable){const e="Dictionary arguments cannot be nullable.";yield C(this.tokens.name,this,"no-nullable-dict-arg",e)}else if(this.optional){if(!this.default){const e="Optional dictionary arguments must have a default value of `{}`.";yield C(this.tokens.name,this,"dict-arg-default",e,{autofix:B(this)})}}else if(this.parent&&!T(t.dictionary,e)&&function(e){const t=e.parent.arguments||e.parent.list,n=t.indexOf(e);return!t.slice(n+1).some(e=>!e.optional)}(this)){const e="Dictionary argument must be optional if it has no required fields";yield C(this.tokens.name,this,"dict-arg-optional",e,{autofix:(n=this,()=>{const e=oe(n.idlType);n.tokens.optional={type:"optional",value:"optional",trivia:e.trivia},e.trivia=" ",B(n)()})})}var n}}function B(e){return()=>{e.default=F.parse(new fe(" = {}"))}}class H extends E{static parse(e,{special:t,regular:n}={}){const r={special:t},o=se(new H({source:e.source,tokens:r}));return t&&"stringifier"===t.value&&(r.termination=e.consume(";"),r.termination)?(o.arguments=[],o):(t||n||(r.special=e.consume("getter","setter","deleter")),o.idlType=ee(e)||e.error("Missing return type"),r.name=e.consume("identifier","includes"),r.open=e.consume("(")||e.error("Invalid operation"),o.arguments=X(e),r.close=e.consume(")")||e.error("Unterminated operation"),r.termination=e.consume(";")||e.error("Unterminated operation, expected `;`"),o.this)}get type(){return"operation"}get name(){const{name:e}=this.tokens;return e?V(e.value):""}get special(){return this.tokens.special?this.tokens.special.value:""}*validate(e){if(!this.name&&["","static"].includes(this.special)){const e="Regular or static operations must have both a return type and an identifier.";yield C(this.tokens.open,this,"incomplete-op",e)}this.idlType&&(yield*this.idlType.validate(e));for(const t of this.arguments)yield*t.validate(e)}}class G extends E{static parse(e,{special:t,noInherit:n=!1,readonly:r=!1}={}){const o=e.position,s={special:t},i=se(new G({source:e.source,tokens:s}));if(t||n||(s.special=e.consume("inherit")),"inherit"===i.special&&e.probe("readonly")&&e.error("Inherited attributes cannot be read-only"),s.readonly=e.consume("readonly"),r&&!s.readonly&&e.probe("attribute")&&e.error("Attributes must be readonly in this context"),s.base=e.consume("attribute"),s.base){switch(i.idlType=Q(e,"attribute-type")||e.error("Attribute lacks a type"),i.idlType.generic){case"sequence":case"record":e.error(`Attributes cannot accept ${i.idlType.generic} types`)}return s.name=e.consume("identifier","async","required")||e.error("Attribute lacks a name"),s.termination=e.consume(";")||e.error("Unterminated attribute, expected `;`"),i.this}e.unconsume(o)}get type(){return"attribute"}get special(){return this.tokens.special?this.tokens.special.value:""}get readonly(){return!!this.tokens.readonly}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.extAttrs.validate(e),yield*this.idlType.validate(e)}}function V(e){return e.startsWith("_")?e.slice(1):e}function Z(e,{parser:t,allowDangler:n,listName:r="list"}){const o=t(e);if(!o)return[];o.tokens.separator=e.consume(",");const s=[o];for(;o.tokens.separator;){const o=t(e);if(!o){n||e.error("Trailing comma in "+r);break}if(o.tokens.separator=e.consume(","),s.push(o),!o.tokens.separator)break}return s}function Y(e){return e.consume("true","false","Infinity","-Infinity","NaN","decimal","integer")}function J({type:e,value:t}){switch(e){case"true":case"false":return{type:"boolean",value:"true"===e};case"Infinity":case"-Infinity":return{type:"Infinity",negative:e.startsWith("-")};case"[":return{type:"sequence",value:[]};case"{":return{type:"dictionary"};case"decimal":case"integer":return{type:"number",value:t};case"string":return{type:"string",value:t.slice(1,-1)};default:return{type:e}}}function K(e){const{source:t}=e,n=function(){const n=e.consume("unsigned"),r=e.consume("short","long");if(r){const o=e.consume("long");return new U({source:t,tokens:{prefix:n,base:r,postfix:o}})}n&&e.error("Failed to parse integer type")}()||function(){const n=e.consume("unrestricted"),r=e.consume("float","double");if(r)return new U({source:t,tokens:{prefix:n,base:r}});n&&e.error("Failed to parse float type")}();if(n)return n;const r=e.consume("bigint","boolean","byte","octet","undefined");return r?new U({source:t,tokens:{base:r}}):void 0}function X(e){return Z(e,{parser:q.parse,listName:"arguments list"})}function Q(e,t){const n=z.parse(e),r=U.parse(e,t);return r&&(se(r).extAttrs=n),r}function ee(e,t){const n=U.parse(e,t||"return-type");if(n)return n;const r=e.consume("void");if(r){const t=new U({source:e.source,tokens:{base:r}});return t.type="return-type",t}}function te(e){const t=e.consume("stringifier");if(!t)return;return G.parse(e,{special:t})||H.parse(e,{special:t})||e.error("Unterminated stringifier")}function ne(e){const t=e.split("\n");if(t.length){const e=t[t.length-1].match(/^\s+/);if(e)return e[0]}return""}function re(e){return()=>{if(e.extAttrs.length){const t=new fe("Exposed=Window,"),n=j.parse(t);n.tokens.separator=t.consume(",");const r=e.extAttrs[0];/^\s/.test(r.tokens.name.trivia)||(r.tokens.name.trivia=" "+r.tokens.name.trivia),e.extAttrs.unshift(n)}else{se(e).extAttrs=z.parse(new fe("[Exposed=Window]"));const t=e.tokens.base.trivia;e.extAttrs.tokens.open.trivia=t,e.tokens.base.trivia="\n"+ne(t)}}}function oe(e){if(e.extAttrs.length)return e.extAttrs.tokens.open;if("operation"===e.type&&!e.special)return oe(e.idlType);return Object.values(e.tokens).sort((e,t)=>e.index-t.index)[0]}function se(e,t){return t||(t=e),e?new Proxy(e,{get(e,t){const n=e[t];return Array.isArray(n)?se(n,e):n},set(e,n,r){if(e[n]=r,!r)return!0;if(Array.isArray(r))for(const e of r)void 0!==e.parent&&(e.parent=t);else void 0!==r.parent&&(r.parent=t);return!0}}):e}const ie={decimal:/-?(?=[0-9]*\.|[0-9]+[eE])(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/y,integer:/-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/y,identifier:/[_-]?[A-Za-z][0-9A-Z_a-z-]*/y,string:/"[^"]*"/y,whitespace:/[\t\n\r ]+/y,comment:/((\/(\/.*|\*([^*]|\*[^/])*\*\/)[\t\n\r ]*)+)/y,other:/[^\t\n\r 0-9A-Za-z]/y},ae=["ArrayBuffer","DataView","Int8Array","Int16Array","Int32Array","Uint8Array","Uint16Array","Uint32Array","Uint8ClampedArray","Float32Array","Float64Array","any","object","symbol"],ce=["ByteString","DOMString","USVString"],le=["async","attribute","callback","const","constructor","deleter","dictionary","enum","getter","includes","inherit","interface","iterable","maplike","namespace","partial","required","setlike","setter","static","stringifier","typedef","unrestricted"],ue=["-Infinity","FrozenArray","Infinity","NaN","ObservableArray","Promise","bigint","boolean","byte","double","false","float","long","mixin","null","octet","optional","or","readonly","record","sequence","short","true","undefined","unsigned","void"].concat(le,ce,ae),de=["(",")",",","...",":",";","<","=",">","?","[","]","{","}"],pe=["_constructor","toString","_toString"];class fe{constructor(e){this.source=function(e){const t=[];let n=0,r="",o=1,s=0;for(;n<e.length;){const a=e.charAt(n);let c=-1;if(/[\t\n\r ]/.test(a)?c=i("whitespace",{noFlushTrivia:!0}):"/"===a&&(c=i("comment",{noFlushTrivia:!0})),-1!==c){const e=t.pop().value;o+=(e.match(/\n/g)||[]).length,r+=e,s-=1}else if(/[-0-9.A-Z_a-z]/.test(a)){if(c=i("decimal"),-1===c&&(c=i("integer")),-1===c){c=i("identifier");const e=t.length-1,n=t[e];if(-1!==c){if(pe.includes(n.value)){const r=V(n.value)+" is a reserved identifier and must not be used.";throw new he(_(t,e,null,r))}ue.includes(n.value)&&(n.type=n.value)}}}else'"'===a&&(c=i("string"));for(const i of de)if(e.startsWith(i,n)){t.push({type:i,value:i,trivia:r,line:o,index:s}),r="",n+=i.length,c=n;break}if(-1===c&&(c=i("other")),-1===c)throw new Error("Token stream not progressing");n=c,s+=1}return t.push({type:"eof",value:"",trivia:r}),t;function i(i,{noFlushTrivia:a}={}){const c=ie[i];c.lastIndex=n;const l=c.exec(e);return l?(t.push({type:i,value:l[0],trivia:r,line:o,index:s}),a||(r=""),c.lastIndex):-1}}(e),this.position=0}error(e){throw new he(_(this.source,this.position,this.current,e))}probe(e){return this.source.length>this.position&&this.source[this.position].type===e}consume(...e){for(const t of e){if(!this.probe(t))continue;const e=this.source[this.position];return this.position++,e}}unconsume(e){this.position=e}}class he extends Error{constructor({message:e,bareMessage:t,context:n,line:r,sourceName:o,input:s,tokens:i}){super(e),this.name="WebIDLParseError",this.bareMessage=t,this.context=n,this.line=r,this.sourceName=o,this.input=s,this.tokens=i}}class me extends L{static parse(e){const t=e.consume("string");if(t)return new me({source:e.source,tokens:{value:t}})}get type(){return"enum-value"}get value(){return super.value.slice(1,-1)}}class ge extends E{static parse(e){const t={};if(t.base=e.consume("enum"),!t.base)return;t.name=e.consume("identifier")||e.error("No name for enum");const n=se(new ge({source:e.source,tokens:t}));return e.current=n.this,t.open=e.consume("{")||e.error("Bodyless enum"),n.values=Z(e,{parser:me.parse,allowDangler:!0,listName:"enumeration"}),e.probe("string")&&e.error("No comma between enum values"),t.close=e.consume("}")||e.error("Unexpected value in enum"),n.values.length||e.error("No value in enum"),t.termination=e.consume(";")||e.error("No semicolon after enum"),n.this}get type(){return"enum"}get name(){return V(this.tokens.name.value)}}class be extends E{static parse(e){const t=e.consume("identifier");if(!t)return;const n={target:t};if(n.includes=e.consume("includes"),n.includes)return n.mixin=e.consume("identifier")||e.error("Incomplete includes statement"),n.termination=e.consume(";")||e.error("No terminating ; for includes statement"),new be({source:e.source,tokens:n});e.unconsume(t.index)}get type(){return"includes"}get target(){return V(this.tokens.target.value)}get includes(){return V(this.tokens.mixin.value)}}class we extends E{static parse(e){const t={},n=se(new we({source:e.source,tokens:t}));if(t.base=e.consume("typedef"),t.base)return n.idlType=Q(e,"typedef-type")||e.error("Typedef lacks a type"),t.name=e.consume("identifier")||e.error("Typedef lacks a name"),e.current=n.this,t.termination=e.consume(";")||e.error("Unterminated typedef, expected `;`"),n.this}get type(){return"typedef"}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.idlType.validate(e)}}class ye extends E{static parse(e,t){const n={base:t},r=se(new ye({source:e.source,tokens:n}));return n.name=e.consume("identifier")||e.error("Callback lacks a name"),e.current=r.this,n.assign=e.consume("=")||e.error("Callback lacks an assignment"),r.idlType=ee(e)||e.error("Callback lacks a return type"),n.open=e.consume("(")||e.error("Callback lacks parentheses for arguments"),r.arguments=X(e),n.close=e.consume(")")||e.error("Unterminated callback"),n.termination=e.consume(";")||e.error("Unterminated callback, expected `;`"),r.this}get type(){return"callback"}get name(){return V(this.tokens.name.value)}*validate(e){yield*this.extAttrs.validate(e),yield*this.idlType.validate(e)}}class ve extends E{static parse(e,t,{type:n,inheritable:r,allowedMembers:o}){const{tokens:s}=t;for(s.name=e.consume("identifier")||e.error("Missing name in "+t.type),e.current=t,t=se(t),r&&Object.assign(s,function(e){const t=e.consume(":");return t?{colon:t,inheritance:e.consume("identifier")||e.error("Inheritance lacks a type")}:{}}(e)),s.open=e.consume("{")||e.error("Bodyless "+n),t.members=[];;){if(s.close=e.consume("}"),s.close)return s.termination=e.consume(";")||e.error("Missing semicolon after "+n),t.this;const r=z.parse(e);let i;for(const[t,...n]of o)if(i=se(t(e,...n)),i)break;i||e.error("Unknown member"),i.extAttrs=r,t.members.push(i.this)}}get partial(){return!!this.tokens.partial}get name(){return V(this.tokens.name.value)}get inheritance(){return this.tokens.inheritance?V(this.tokens.inheritance.value):null}*validate(e){for(const t of this.members)t.validate&&(yield*t.validate(e))}}class ke extends E{static parse(e){const t={};if(t.base=e.consume("const"),!t.base)return;let n=K(e);if(!n){const t=e.consume("identifier")||e.error("Const lacks a type");n=new U({source:e.source,tokens:{base:t}})}e.probe("?")&&e.error("Unexpected nullable constant type"),n.type="const-type",t.name=e.consume("identifier")||e.error("Const lacks a name"),t.assign=e.consume("=")||e.error("Const lacks value assignment"),t.value=Y(e)||e.error("Const lacks a value"),t.termination=e.consume(";")||e.error("Unterminated const, expected `;`");const r=new ke({source:e.source,tokens:t});return se(r).idlType=n,r}get type(){return"const"}get name(){return V(this.tokens.name.value)}get value(){return J(this.tokens.value)}}class xe extends E{static parse(e){const t=e.position,n={},r=se(new xe({source:e.source,tokens:n}));if(n.readonly=e.consume("readonly"),n.readonly||(n.async=e.consume("async")),n.base=n.readonly?e.consume("maplike","setlike"):n.async?e.consume("iterable"):e.consume("iterable","maplike","setlike"),!n.base)return void e.unconsume(t);const{type:o}=r,s="maplike"===o,i=s||"iterable"===o,a=r.async&&"iterable"===o;n.open=e.consume("<")||e.error(`Missing less-than sign \`<\` in ${o} declaration`);const c=Q(e)||e.error(`Missing a type argument in ${o} declaration`);return r.idlType=[c],r.arguments=[],i&&(c.tokens.separator=e.consume(","),c.tokens.separator?r.idlType.push(Q(e)):s&&e.error(`Missing second type argument in ${o} declaration`)),n.close=e.consume(">")||e.error(`Missing greater-than sign \`>\` in ${o} declaration`),e.probe("(")&&(a?(n.argsOpen=e.consume("("),r.arguments.push(...X(e)),n.argsClose=e.consume(")")||e.error("Unterminated async iterable argument list")):e.error("Arguments are only allowed for `async iterable`")),n.termination=e.consume(";")||e.error(`Missing semicolon after ${o} declaration`),r.this}get type(){return this.tokens.base.value}get readonly(){return!!this.tokens.readonly}get async(){return!!this.tokens.async}*validate(e){for(const t of this.idlType)yield*t.validate(e);for(const t of this.arguments)yield*t.validate(e)}}class $e extends E{static parse(e){const t=e.consume("constructor");if(!t)return;const n={base:t};n.open=e.consume("(")||e.error("No argument list in constructor");const r=X(e);n.close=e.consume(")")||e.error("Unterminated constructor"),n.termination=e.consume(";")||e.error("No semicolon after constructor");const o=new $e({source:e.source,tokens:n});return se(o).arguments=r,o}get type(){return"constructor"}*validate(e){this.idlType&&(yield*this.idlType.validate(e));for(const t of this.arguments)yield*t.validate(e)}}function Se(e){const t=e.consume("static");if(!t)return;return G.parse(e,{special:t})||H.parse(e,{special:t})||e.error("No body in static member")}class _e extends ve{static parse(e,t,{partial:n=null}={}){const r={partial:n,base:t};return ve.parse(e,new _e({source:e.source,tokens:r}),{type:"interface",inheritable:!n,allowedMembers:[[ke.parse],[$e.parse],[Se],[te],[xe.parse],[G.parse],[H.parse]]})}get type(){return"interface"}*validate(e){if(yield*this.extAttrs.validate(e),!this.partial&&this.extAttrs.every(e=>"Exposed"!==e.name)){const e="Interfaces must have `[Exposed]` extended attribute. To fix, add, for example, `[Exposed=Window]`. Please also consider carefully if your interface should also be exposed in a Worker scope. Refer to the [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) for more information.";yield C(this.tokens.name,this,"require-exposed",e,{autofix:re(this)})}const t=this.extAttrs.filter(e=>"Constructor"===e.name);for(const e of t){const t="Constructors should now be represented as a `constructor()` operation on the interface instead of `[Constructor]` extended attribute. Refer to the [WebIDL spec section on constructor operations](https://heycam.github.io/webidl/#idl-constructors) for more information.";yield C(e.tokens.name,this,"constructor-member",t,{autofix:Ce(this,e)})}if(this.extAttrs.some(e=>"Global"===e.name)){const e=this.extAttrs.filter(e=>"LegacyFactoryFunction"===e.name);for(const t of e){const e="Interfaces marked as `[Global]` cannot have factory functions.";yield C(t.tokens.name,this,"no-constructible-global",e)}const t=this.members.filter(e=>"constructor"===e.type);for(const e of t){const t="Interfaces marked as `[Global]` cannot have constructors.";yield C(e.tokens.base,this,"no-constructible-global",t)}}yield*super.validate(e),this.partial||(yield*function*(e,t){const n=new Set(i(t).map(e=>e.name)),r=e.partials.get(t.name)||[],o=e.mixinMap.get(t.name)||[];for(const e of[...r,...o]){const r=i(e);yield*s(r,n,e,t);for(const e of r)n.add(e.name)}function*s(e,t,n,r){for(const o of e){const{name:e}=o;if(e&&t.has(e)){const t=`The operation "${e}" has already been defined for the base interface "${r.name}" either in itself or in a mixin`;yield C(o.tokens.name,n,"no-cross-overload",t)}}}function i(e){return e.members.filter(({type:e})=>"operation"===e)}}(e,this))}}function Ce(e,t){return e=se(e),()=>{const n=ne(e.extAttrs.tokens.open.trivia),r=e.members.length?ne(oe(e.members[0]).trivia):function(e){const t=ne(e),n=t.includes("\t")?"\t":" ";return t+n}(n),o=$e.parse(new fe(`\n${r}constructor();`));o.extAttrs=new z({}),se(o).arguments=t.arguments;const s=function(e,t){const n=e.slice().reverse().findIndex(t);return-1===n?n:e.length-n-1}(e.members,e=>"constructor"===e.type);e.members.splice(s+1,0,o);const{close:i}=e.tokens;i.trivia.includes("\n")||(i.trivia+="\n"+n);const{extAttrs:a}=e,c=a.indexOf(t),l=a.splice(c,1);a.length?a.length===c?a[c-1].tokens.separator=void 0:a[c].tokens.name.trivia.trim()||(a[c].tokens.name.trivia=l[0].tokens.name.trivia):a.tokens.open=a.tokens.close=void 0}}class Ee extends ve{static parse(e,t,{partial:n}={}){const r={partial:n,base:t};if(r.mixin=e.consume("mixin"),r.mixin)return ve.parse(e,new Ee({source:e.source,tokens:r}),{type:"interface mixin",allowedMembers:[[ke.parse],[te],[G.parse,{noInherit:!0}],[H.parse,{regular:!0}]]})}get type(){return"interface mixin"}}class Re extends E{static parse(e){const t={},n=se(new Re({source:e.source,tokens:t}));return n.extAttrs=z.parse(e),t.required=e.consume("required"),n.idlType=Q(e,"dictionary-type")||e.error("Dictionary member lacks a type"),t.name=e.consume("identifier")||e.error("Dictionary member lacks a name"),n.default=F.parse(e),t.required&&n.default&&e.error("Required member must not have a default"),t.termination=e.consume(";")||e.error("Unterminated dictionary member, expected `;`"),n.this}get type(){return"field"}get name(){return V(this.tokens.name.value)}get required(){return!!this.tokens.required}*validate(e){yield*this.idlType.validate(e)}}class Te extends ve{static parse(e,{partial:t}={}){const n={partial:t};if(n.base=e.consume("dictionary"),n.base)return ve.parse(e,new Te({source:e.source,tokens:n}),{type:"dictionary",inheritable:!t,allowedMembers:[[Re.parse]]})}get type(){return"dictionary"}}class Ae extends ve{static parse(e,{partial:t}={}){const n={partial:t};if(n.base=e.consume("namespace"),n.base)return ve.parse(e,new Ae({source:e.source,tokens:n}),{type:"namespace",allowedMembers:[[G.parse,{noInherit:!0,readonly:!0}],[H.parse,{regular:!0}]]})}get type(){return"namespace"}*validate(e){if(!this.partial&&this.extAttrs.every(e=>"Exposed"!==e.name)){const e="Namespaces must have [Exposed] extended attribute. To fix, add, for example, [Exposed=Window]. Please also consider carefully if your namespace should also be exposed in a Worker scope. Refer to the [WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) for more information.";yield C(this.tokens.name,this,"require-exposed",e,{autofix:re(this)})}yield*super.validate(e)}}class Le extends ve{static parse(e,t,{partial:n=null}={}){const r={callback:t};if(r.base=e.consume("interface"),r.base)return ve.parse(e,new Le({source:e.source,tokens:r}),{type:"callback interface",inheritable:!n,allowedMembers:[[ke.parse],[H.parse,{regular:!0}]]})}get type(){return"callback interface"}}function Pe(e,t){const n=e.source;function r(t){e.error(t)}function o(...t){return e.consume(...t)}function s(t){const n=o("interface");if(!n)return;return Ee.parse(e,n,t)||_e.parse(e,n,t)||r("Interface has no proper body")}function i(){return function(){const t=o("callback");if(t)return e.probe("interface")?Le.parse(e,t):ye.parse(e,t)}()||s()||function(){const t=o("partial");if(t)return Te.parse(e,{partial:t})||s({partial:t})||Ae.parse(e,{partial:t})||r("Partial doesn't apply to anything")}()||Te.parse(e)||ge.parse(e)||we.parse(e)||be.parse(e)||Ae.parse(e)}const a=function(){if(!n.length)return[];const s=[];for(;;){const t=z.parse(e),n=i();if(!n){t.length&&r("Stray extended attributes");break}se(n).extAttrs=t,s.push(n)}const a=o("eof");return t.concrete&&s.push(a),s}();return e.position<n.length&&r("Unrecognised tokens"),a}function Ie(e){return e}const De={wrap:e=>e.join(""),trivia:Ie,name:Ie,reference:Ie,type:Ie,generic:Ie,nameless:Ie,inheritance:Ie,definition:Ie,extendedAttribute:Ie,extendedAttributeReference:Ie};function Ne(e,t){const n=new Map,r=e.filter(e=>"includes"===e.type);for(const e of r){const r=t.get(e.includes);if(!r)continue;const o=n.get(e.target);o?o.push(r):n.set(e.target,[r])}return n}function*Oe(e){const t=function(e){const t=new Map,n=new Set,r=new Map;for(const o of e)if(o.partial){const e=r.get(o.name);e?e.push(o):r.set(o.name,[o])}else o.name&&(t.has(o.name)?n.add(o):t.set(o.name,o));return{all:e,unique:t,partials:r,duplicates:n,mixinMap:Ne(e,t),cache:{typedefIncludesDictionary:new WeakMap,dictionaryIncludesRequiredField:new WeakMap}}}(e);for(const e of t.all)e.validate&&(yield*e.validate(t));yield*function*({unique:e,duplicates:t}){for(const n of t){const{name:t}=n,r=`The name "${t}" of type "${e.get(t).type}" was already seen`;yield C(n.tokens.name,n,"no-duplicate",r)}}(t)}var je=Object.freeze({__proto__:null,parse:function(e,t={}){const n=new fe(e);return void 0!==t.sourceName&&(n.source.name=t.sourceName),Pe(n,t)},write:function(e,{templates:t=De}={}){function n(e,{unescaped:n,context:r}){return n||(n=e.startsWith("_")?e.slice(1):e),t.reference(e,n,r)}function r(e,n=Ie,...r){if(!e)return"";const o=n(e.value,...r);return t.wrap([t.trivia(e.trivia),o])}function o(e,t){return r(e,n,{context:t})}function s(e,n){return r(e,t.name,n)}function i(e){if(e.union||e.generic)return t.wrap([r(e.tokens.base,t.generic),r(e.tokens.open),...e.subtype.map(a),r(e.tokens.close)]);const o=e.tokens.prefix||e.tokens.base,s=e.tokens.prefix?[e.tokens.prefix.value,t.trivia(e.tokens.base.trivia)]:[],i=n(t.wrap([...s,e.tokens.base.value,r(e.tokens.postfix)]),{unescaped:e.idlType,context:e});return t.wrap([t.trivia(o.trivia),i])}function a(e){return t.wrap([p(e.extAttrs),i(e),r(e.tokens.nullable),r(e.tokens.separator)])}function c(e){return e?t.wrap([r(e.tokens.assign),...e.expression.map(e=>r(e))]):""}function l(e){return t.wrap([p(e.extAttrs),r(e.tokens.optional),t.type(a(e.idlType)),r(e.tokens.variadic),s(e.tokens.name,{data:e}),c(e.default),r(e.tokens.separator)])}function u(e){return t.wrap([r(e.tokens.value),r(e.tokens.separator)])}function d(e){const{rhsType:n}=e.params;return t.wrap([t.trivia(e.tokens.name.trivia),t.extendedAttribute(t.wrap([t.extendedAttributeReference(e.name),r(e.params.tokens.assign),o(e.params.tokens.secondaryName,e),r(e.params.tokens.open),...e.params.list?e.params.list.map("identifier-list"===n?n=>function(e,n){return t.wrap([o(e.tokens.value,n),r(e.tokens.separator)])}(n,e):n&&n.endsWith("-list")?u:l):[],r(e.params.tokens.close)])),r(e.tokens.separator)])}function p(e){return e.length?t.wrap([r(e.tokens.open),...e.map(d),r(e.tokens.close)]):""}function f(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.callback),r(e.tokens.partial),r(e.tokens.base),r(e.tokens.mixin),s(e.tokens.name,{data:e}),(o=e,o.tokens.inheritance?t.wrap([r(o.tokens.colon),t.trivia(o.tokens.inheritance.trivia),t.inheritance(n(o.tokens.inheritance.value,{context:o}))]):""),r(e.tokens.open),g(e.members,e),r(e.tokens.close),r(e.tokens.termination)]),{data:e});var o}function h(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.readonly),r(e.tokens.async),r(e.tokens.base,t.generic),r(e.tokens.open),t.wrap(e.idlType.map(a)),r(e.tokens.close),r(e.tokens.argsOpen),t.wrap(e.arguments.map(l)),r(e.tokens.argsClose),r(e.tokens.termination)]),{data:e,parent:n})}t=Object.assign({},De,t);const m={interface:f,"interface mixin":f,namespace:f,operation:function(e,n){const o=e.idlType?[t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.open),t.wrap(e.arguments.map(l)),r(e.tokens.close)]:[];return t.definition(t.wrap([p(e.extAttrs),e.tokens.name?r(e.tokens.special):r(e.tokens.special,t.nameless,{data:e,parent:n}),...o,r(e.tokens.termination)]),{data:e,parent:n})},attribute:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.special),r(e.tokens.readonly),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.termination)]),{data:e,parent:n})},constructor:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base,t.nameless,{data:e,parent:n}),r(e.tokens.open),t.wrap(e.arguments.map(l)),r(e.tokens.close),r(e.tokens.termination)]),{data:e,parent:n})},dictionary:f,field:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.required),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),c(e.default),r(e.tokens.termination)]),{data:e,parent:n})},const:function(e,n){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e,parent:n}),r(e.tokens.assign),r(e.tokens.value),r(e.tokens.termination)]),{data:e,parent:n})},typedef:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),t.type(a(e.idlType)),s(e.tokens.name,{data:e}),r(e.tokens.termination)]),{data:e})},includes:function(e){return t.definition(t.wrap([p(e.extAttrs),o(e.tokens.target,e),r(e.tokens.includes),o(e.tokens.mixin,e),r(e.tokens.termination)]),{data:e})},callback:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),s(e.tokens.name,{data:e}),r(e.tokens.assign),t.type(a(e.idlType)),r(e.tokens.open),...e.arguments.map(l),r(e.tokens.close),r(e.tokens.termination)]),{data:e})},enum:function(e){return t.definition(t.wrap([p(e.extAttrs),r(e.tokens.base),s(e.tokens.name,{data:e}),r(e.tokens.open),g(e.values,e),r(e.tokens.close),r(e.tokens.termination)]),{data:e})},"enum-value":function(e,n){return t.wrap([t.trivia(e.tokens.value.trivia),t.definition(t.wrap(['"',t.name(e.value,{data:e,parent:n}),'"']),{data:e,parent:n}),r(e.tokens.separator)])},iterable:h,maplike:h,setlike:h,"callback interface":f,eof:function(e){return t.trivia(e.trivia)}};function g(e,n){if(!e)return;const r=e.map(e=>function(e,t){if(!m[e.type])throw new Error(`Type "${e.type}" is unsupported`);return m[e.type](e,t)}(e,n));return t.wrap(r)}return g(e)},validate:function(e){return[...Oe((t=e,t.flat?t.flat():[].concat(...t)))];var t},WebIDLParseError:he});var ze,We=(function(e){function t(){return{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.exports={defaults:{baseUrl:null,breaks:!1,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1},getDefaults:t,changeDefaults:function(t){e.exports.defaults=t}}}(ze={exports:{}},ze.exports),ze.exports);const Me=/[&<>"']/,Ue=/[&<>"']/g,Fe=/[<>"']|&(?!#?\w+;)/,qe=/[<>"']|&(?!#?\w+;)/g,Be={"&":"&","<":"<",">":">",'"':""","'":"'"},He=e=>Be[e];const Ge=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function Ve(e){return e.replace(Ge,(e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):"")}const Ze=/(^|[^\[])\^/g;const Ye=/[^\w:]/g,Je=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;const Ke={},Xe=/^[^:]+:\/*[^/]*$/,Qe=/^([^:]+:)[\s\S]*$/,et=/^([^:]+:\/*[^/]*)[\s\S]*$/;function tt(e,t){Ke[" "+e]||(Xe.test(e)?Ke[" "+e]=e+"/":Ke[" "+e]=nt(e,"/",!0));const n=-1===(e=Ke[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(Qe,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(et,"$1")+t:e+t}function nt(e,t,n){const r=e.length;if(0===r)return"";let o=0;for(;o<r;){const s=e.charAt(r-o-1);if(s!==t||n){if(s===t||!n)break;o++}else o++}return e.substr(0,r-o)}var rt={escape:function(e,t){if(t){if(Me.test(e))return e.replace(Ue,He)}else if(Fe.test(e))return e.replace(qe,He);return e},unescape:Ve,edit:function(e,t){e=e.source||e,t=t||"";const n={replace:(t,r)=>(r=(r=r.source||r).replace(Ze,"$1"),e=e.replace(t,r),n),getRegex:()=>new RegExp(e,t)};return n},cleanUrl:function(e,t,n){if(e){let e;try{e=decodeURIComponent(Ve(n)).replace(Ye,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!Je.test(n)&&(n=tt(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n},resolveUrl:tt,noopTest:{exec:function(){}},merge:function(e){let t,n,r=1;for(;r<arguments.length;r++)for(n in t=arguments[r],t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},splitCells:function(e,t){const n=e.replace(/\|/g,(e,t,n)=>{let r=!1,o=t;for(;--o>=0&&"\\"===n[o];)r=!r;return r?"|":" |"}).split(/ \|/);let r=0;if(n.length>t)n.splice(t);else for(;n.length<t;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(/\\\|/g,"|");return n},rtrim:nt,findClosingBracket:function(e,t){if(-1===e.indexOf(t[1]))return-1;const n=e.length;let r=0,o=0;for(;o<n;o++)if("\\"===e[o])o++;else if(e[o]===t[0])r++;else if(e[o]===t[1]&&(r--,r<0))return o;return-1},checkSanitizeDeprecation:function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")},repeatString:function(e,t){if(t<1)return"";let n="";for(;t>1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}};const{defaults:ot}=We,{rtrim:st,splitCells:it,escape:at,findClosingBracket:ct}=rt;function lt(e,t,n){const r=t.href,o=t.title?at(t.title):null,s=e[1].replace(/\\([\[\]])/g,"$1");return"!"!==e[0].charAt(0)?{type:"link",raw:n,href:r,title:o,text:s}:{type:"image",raw:n,href:r,title:o,text:at(s)}}var ut=class{constructor(e){this.options=e||ot}space(e){const t=this.rules.block.newline.exec(e);if(t)return t[0].length>1?{type:"space",raw:t[0]}:{raw:"\n"}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:st(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const r=n[1];return t.split("\n").map(e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=r.length?e.slice(r.length):e}).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim():t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=st(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e}}}nptable(e){const t=this.rules.block.nptable.exec(e);if(t){const e={type:"table",header:it(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[],raw:t[0]};if(e.header.length===e.align.length){let t,n=e.align.length;for(t=0;t<n;t++)/^ *-+: *$/.test(e.align[t])?e.align[t]="right":/^ *:-+: *$/.test(e.align[t])?e.align[t]="center":/^ *:-+ *$/.test(e.align[t])?e.align[t]="left":e.align[t]=null;for(n=e.cells.length,t=0;t<n;t++)e.cells[t]=it(e.cells[t],e.header.length);return e}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],text:e}}}list(e){const t=this.rules.block.list.exec(e);if(t){let e=t[0];const n=t[2],r=n.length>1,o={type:"list",raw:e,ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]},s=t[0].match(this.rules.block.item);let i,a,c,l,u,d,p,f,h,m=!1,g=s.length;c=this.rules.block.listItemStart.exec(s[0]);for(let t=0;t<g;t++){if(i=s[t],e=i,this.options.pedantic||(h=i.match(new RegExp("\\n\\s*\\n {0,"+(c[0].length-1)+"}\\S")),h&&(u=i.length-h.index+s.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),i=i.substring(0,h.index),e=i,g=t+1)),t!==g-1){if(l=this.rules.block.listItemStart.exec(s[t+1]),this.options.pedantic?l[1].length>c[1].length:l[1].length>=c[0].length||l[1].length>3){s.splice(t,2,s[t]+(!this.options.pedantic&&l[1].length<c[0].length&&!s[t].match(/\n$/)?"":"\n")+s[t+1]),t--,g--;continue}(!this.options.pedantic||this.options.smartLists?l[2][l[2].length-1]!==n[n.length-1]:r===(1===l[2].length))&&(u=s.slice(t+1).join("\n").length,o.raw=o.raw.substring(0,o.raw.length-u),t=g-1),c=l}a=i.length,i=i.replace(/^ *([*+-]|\d+[.)]) ?/,""),~i.indexOf("\n ")&&(a-=i.length,i=this.options.pedantic?i.replace(/^ {1,4}/gm,""):i.replace(new RegExp("^ {1,"+a+"}","gm"),"")),i=st(i,"\n"),t!==g-1&&(e+="\n"),d=m||/\n\n(?!\s*$)/.test(e),t!==g-1&&(m="\n\n"===e.slice(-2),d||(d=m)),d&&(o.loose=!0),this.options.gfm&&(p=/^\[[ xX]\] /.test(i),f=void 0,p&&(f=" "!==i[1],i=i.replace(/^\[[ xX]\] +/,""))),o.items.push({type:"list_item",raw:e,task:p,checked:f,loose:d,text:i})}return o}}html(e){const t=this.rules.block.html.exec(e);if(t)return{type:this.options.sanitize?"paragraph":"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):at(t[0]):t[0]}}def(e){const t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));return{tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:it(t[1].replace(/^ *| *\| *$/g,"")),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:t[3]?t[3].replace(/\n$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let n,r=e.align.length;for(n=0;n<r;n++)/^ *-+: *$/.test(e.align[n])?e.align[n]="right":/^ *:-+: *$/.test(e.align[n])?e.align[n]="center":/^ *:-+ *$/.test(e.align[n])?e.align[n]="left":e.align[n]=null;for(r=e.cells.length,n=0;n<r;n++)e.cells[n]=it(e.cells[n].replace(/^ *\| *| *\| *$/g,""),e.header.length);return e}}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1]}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t)return{type:"paragraph",raw:t[0],text:"\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1]}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0]}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:at(t[1])}}tag(e,t,n){const r=this.rules.inline.tag.exec(e);if(r)return!t&&/^<a /i.test(r[0])?t=!0:t&&/^<\/a>/i.test(r[0])&&(t=!1),!n&&/^<(pre|code|kbd|script)(\s|>)/i.test(r[0])?n=!0:n&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(r[0])&&(n=!1),{type:this.options.sanitize?"text":"html",raw:r[0],inLink:t,inRawBlock:n,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):at(r[0]):r[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^</.test(e)){if(!/>$/.test(e))return;const t=st(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=ct(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^</.test(n)&&(n=this.options.pedantic&&!/>$/.test(e)?n.slice(1):n.slice(1,-1)),lt(t,{href:n?n.replace(this.rules.inline._escapes,"$1"):n,title:r?r.replace(this.rules.inline._escapes,"$1"):r},t[0])}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=(n[2]||n[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e||!e.href){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return lt(n,e,n[0])}}emStrong(e,t,n=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r)return;if(r[3]&&n.match(/[\p{L}\p{N}]/u))return;const o=r[1]||r[2]||"";if(!o||o&&(""===n||this.rules.inline.punctuation.exec(n))){const n=r[0].length-1;let o,s,i=n,a=0;const c="*"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);null!=(r=c.exec(t));)if(o=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],o)if(s=o.length,r[3]||r[4])i+=s;else if(!((r[5]||r[6])&&n%3)||(n+s)%3){if(i-=s,!(i>0)){if(i+a-s<=0&&!t.slice(c.lastIndex).match(c)&&(s=Math.min(s,s+i+a)),Math.min(n,s)%2)return{type:"em",raw:e.slice(0,n+r.index+s+1),text:e.slice(1,n+r.index+s)};if(Math.min(n,s)%2==0)return{type:"strong",raw:e.slice(0,n+r.index+s+1),text:e.slice(2,n+r.index+s-1)}}}else a+=s}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=at(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2]}}autolink(e,t){const n=this.rules.inline.autolink.exec(e);if(n){let e,r;return"@"===n[2]?(e=at(this.options.mangle?t(n[1]):n[1]),r="mailto:"+e):(e=at(n[1]),r=e),{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let n;if(n=this.rules.inline.url.exec(e)){let e,r;if("@"===n[2])e=at(this.options.mangle?t(n[0]):n[0]),r="mailto:"+e;else{let t;do{t=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(t!==n[0]);e=at(n[0]),r="www."===n[1]?"http://"+e:e}return{type:"link",raw:n[0],text:e,href:r,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t,n){const r=this.rules.inline.text.exec(e);if(r){let e;return e=t?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):at(r[0]):r[0]:at(this.options.smartypants?n(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}};const{noopTest:dt,edit:pt,merge:ft}=rt,ht={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,html:"^ {0,3}(?:<(script|pre|style)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:\\n{2,}|$)|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$)|</(?!script|pre|style)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:\\n{2,}|$))",def:/^ {0,3}\[(label)\]: *\n? *<?([^\s>]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/,nptable:dt,table:dt,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\[\[\]]|[^\[\]])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};ht.def=pt(ht.def).replace("label",ht._label).replace("title",ht._title).getRegex(),ht.bullet=/(?:[*+-]|\d{1,9}[.)])/,ht.item=/^( *)(bull) ?[^\n]*(?:\n(?! *bull ?)[^\n]*)*/,ht.item=pt(ht.item,"gm").replace(/bull/g,ht.bullet).getRegex(),ht.listItemStart=pt(/^( *)(bull) */).replace("bull",ht.bullet).getRegex(),ht.list=pt(ht.list).replace(/bull/g,ht.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ht.def.source+")").getRegex(),ht._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ht._comment=/<!--(?!-?>)[\s\S]*?(?:-->|$)/,ht.html=pt(ht.html,"i").replace("comment",ht._comment).replace("tag",ht._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ht.paragraph=pt(ht._paragraph).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.blockquote=pt(ht.blockquote).replace("paragraph",ht.paragraph).getRegex(),ht.normal=ft({},ht),ht.gfm=ft({},ht.normal,{nptable:"^ *([^|\\n ].*\\|.*)\\n {0,3}([-:]+ *\\|[-| :]*)(?:\\n((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)",table:"^ *\\|(.+)\\n {0,3}\\|?( *[-:]+[-| :]*)(?:\\n *((?:(?!\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),ht.gfm.nptable=pt(ht.gfm.nptable).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.gfm.table=pt(ht.gfm.table).replace("hr",ht.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|!--)").replace("tag",ht._tag).getRegex(),ht.pedantic=ft({},ht.normal,{html:pt("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ht._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:dt,paragraph:pt(ht.normal._paragraph).replace("hr",ht.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",ht.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});const mt={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:dt,tag:"^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/,nolink:/^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/\_\_[^_]*?\*[^_]*?\_\_|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/\*\*[^*]*?\_[^*]*?\*\*|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:dt,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,punctuation:/^([\spunctuation])/,_punctuation:"!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~"};mt.punctuation=pt(mt.punctuation).replace(/punctuation/g,mt._punctuation).getRegex(),mt.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,mt.escapedEmSt=/\\\*|\\_/g,mt._comment=pt(ht._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),mt.emStrong.lDelim=pt(mt.emStrong.lDelim).replace(/punct/g,mt._punctuation).getRegex(),mt.emStrong.rDelimAst=pt(mt.emStrong.rDelimAst,"g").replace(/punct/g,mt._punctuation).getRegex(),mt.emStrong.rDelimUnd=pt(mt.emStrong.rDelimUnd,"g").replace(/punct/g,mt._punctuation).getRegex(),mt._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,mt._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,mt._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,mt.autolink=pt(mt.autolink).replace("scheme",mt._scheme).replace("email",mt._email).getRegex(),mt._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,mt.tag=pt(mt.tag).replace("comment",mt._comment).replace("attribute",mt._attribute).getRegex(),mt._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,mt._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,mt._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,mt.link=pt(mt.link).replace("label",mt._label).replace("href",mt._href).replace("title",mt._title).getRegex(),mt.reflink=pt(mt.reflink).replace("label",mt._label).getRegex(),mt.reflinkSearch=pt(mt.reflinkSearch,"g").replace("reflink",mt.reflink).replace("nolink",mt.nolink).getRegex(),mt.normal=ft({},mt),mt.pedantic=ft({},mt.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:pt(/^!?\[(label)\]\((.*?)\)/).replace("label",mt._label).getRegex(),reflink:pt(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",mt._label).getRegex()}),mt.gfm=ft({},mt.normal,{escape:pt(mt.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/}),mt.gfm.url=pt(mt.gfm.url,"i").replace("email",mt.gfm._extended_email).getRegex(),mt.breaks=ft({},mt.gfm,{br:pt(mt.br).replace("{2,}","*").getRegex(),text:pt(mt.gfm.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()});var gt={block:ht,inline:mt};const{defaults:bt}=We,{block:wt,inline:yt}=gt,{repeatString:vt}=rt;function kt(e){return e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")}function xt(e){let t,n,r="";const o=e.length;for(t=0;t<o;t++)n=e.charCodeAt(t),Math.random()>.5&&(n="x"+n.toString(16)),r+="&#"+n+";";return r}var $t=class e{constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||bt,this.options.tokenizer=this.options.tokenizer||new ut,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options;const t={block:wt.normal,inline:yt.normal};this.options.pedantic?(t.block=wt.pedantic,t.inline=yt.pedantic):this.options.gfm&&(t.block=wt.gfm,this.options.breaks?t.inline=yt.breaks:t.inline=yt.gfm),this.tokenizer.rules=t}static get rules(){return{block:wt,inline:yt}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," "),this.blockTokens(e,this.tokens,!0),this.inline(this.tokens),this.tokens}blockTokens(e,t=[],n=!0){let r,o,s,i;for(this.options.pedantic&&(e=e.replace(/^ +$/gm,""));e;)if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),r.type&&t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),i=t[t.length-1],i&&"paragraph"===i.type?(i.raw+="\n"+r.raw,i.text+="\n"+r.text):t.push(r);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.nptable(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),r.tokens=this.blockTokens(r.text,[],n),t.push(r);else if(r=this.tokenizer.list(e)){for(e=e.substring(r.raw.length),s=r.items.length,o=0;o<s;o++)r.items[o].tokens=this.blockTokens(r.items[o].text,[],!1);t.push(r)}else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.def(e)))e=e.substring(r.raw.length),this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else if(n&&(r=this.tokenizer.paragraph(e)))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),i=t[t.length-1],i&&"text"===i.type?(i.raw+="\n"+r.raw,i.text+="\n"+r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}return t}inline(e){let t,n,r,o,s,i;const a=e.length;for(t=0;t<a;t++)switch(i=e[t],i.type){case"paragraph":case"text":case"heading":i.tokens=[],this.inlineTokens(i.text,i.tokens);break;case"table":for(i.tokens={header:[],cells:[]},o=i.header.length,n=0;n<o;n++)i.tokens.header[n]=[],this.inlineTokens(i.header[n],i.tokens.header[n]);for(o=i.cells.length,n=0;n<o;n++)for(s=i.cells[n],i.tokens.cells[n]=[],r=0;r<s.length;r++)i.tokens.cells[n][r]=[],this.inlineTokens(s[r],i.tokens.cells[n][r]);break;case"blockquote":this.inline(i.tokens);break;case"list":for(o=i.items.length,n=0;n<o;n++)this.inline(i.items[n].tokens)}return e}inlineTokens(e,t=[],n=!1,r=!1){let o,s,i,a,c,l=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(l));)e.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(l=l.slice(0,i.index)+"["+vt("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(l));)l=l.slice(0,i.index)+"["+vt("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.escapedEmSt.exec(l));)l=l.slice(0,i.index)+"++"+l.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(a||(c=""),a=!1,o=this.tokenizer.escape(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.tag(e,n,r)){e=e.substring(o.raw.length),n=o.inLink,r=o.inRawBlock;const s=t[t.length-1];s&&"text"===o.type&&"text"===s.type?(s.raw+=o.raw,s.text+=o.text):t.push(o)}else if(o=this.tokenizer.link(e))e=e.substring(o.raw.length),"link"===o.type&&(o.tokens=this.inlineTokens(o.text,[],!0,r)),t.push(o);else if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);const n=t[t.length-1];"link"===o.type?(o.tokens=this.inlineTokens(o.text,[],!0,r),t.push(o)):n&&"text"===o.type&&"text"===n.type?(n.raw+=o.raw,n.text+=o.text):t.push(o)}else if(o=this.tokenizer.emStrong(e,l,c))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.codespan(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.br(e))e=e.substring(o.raw.length),t.push(o);else if(o=this.tokenizer.del(e))e=e.substring(o.raw.length),o.tokens=this.inlineTokens(o.text,[],n,r),t.push(o);else if(o=this.tokenizer.autolink(e,xt))e=e.substring(o.raw.length),t.push(o);else if(n||!(o=this.tokenizer.url(e,xt))){if(o=this.tokenizer.inlineText(e,r,kt))e=e.substring(o.raw.length),"_"!==o.raw.slice(-1)&&(c=o.raw.slice(-1)),a=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=o.raw,s.text+=o.text):t.push(o);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(o.raw.length),t.push(o);return t}};const{defaults:St}=We,{cleanUrl:_t,escape:Ct}=rt;var Et=class{constructor(e){this.options=e||St}code(e,t,n){const r=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,r);null!=t&&t!==e&&(n=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",r?'<pre><code class="'+this.options.langPrefix+Ct(r,!0)+'">'+(n?e:Ct(e,!0))+"</code></pre>\n":"<pre><code>"+(n?e:Ct(e,!0))+"</code></pre>\n"}blockquote(e){return"<blockquote>\n"+e+"</blockquote>\n"}html(e){return e}heading(e,t,n,r){return this.options.headerIds?"<h"+t+' id="'+this.options.headerPrefix+r.slug(n)+'">'+e+"</h"+t+">\n":"<h"+t+">"+e+"</h"+t+">\n"}hr(){return this.options.xhtml?"<hr/>\n":"<hr>\n"}list(e,t,n){const r=t?"ol":"ul";return"<"+r+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"</"+r+">\n"}listitem(e){return"<li>"+e+"</li>\n"}checkbox(e){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"'+(this.options.xhtml?" /":"")+"> "}paragraph(e){return"<p>"+e+"</p>\n"}table(e,t){return t&&(t="<tbody>"+t+"</tbody>"),"<table>\n<thead>\n"+e+"</thead>\n"+t+"</table>\n"}tablerow(e){return"<tr>\n"+e+"</tr>\n"}tablecell(e,t){const n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"</"+n+">\n"}strong(e){return"<strong>"+e+"</strong>"}em(e){return"<em>"+e+"</em>"}codespan(e){return"<code>"+e+"</code>"}br(){return this.options.xhtml?"<br/>":"<br>"}del(e){return"<del>"+e+"</del>"}link(e,t,n){if(null===(e=_t(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<a href="'+Ct(e)+'"';return t&&(r+=' title="'+t+'"'),r+=">"+n+"</a>",r}image(e,t,n){if(null===(e=_t(this.options.sanitize,this.options.baseUrl,e)))return n;let r='<img src="'+e+'" alt="'+n+'"';return t&&(r+=' title="'+t+'"'),r+=this.options.xhtml?"/>":">",r}text(e){return e}},Rt=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return""+n}image(e,t,n){return""+n}br(){return""}},Tt=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let n=e,r=0;if(this.seen.hasOwnProperty(n)){r=this.seen[e];do{r++,n=e+"-"+r}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=r,this.seen[n]=0),n}slug(e,t={}){const n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)}};const{defaults:At}=We,{unescape:Lt}=rt;var Pt=class e{constructor(e){this.options=e||At,this.options.renderer=this.options.renderer||new Et,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Rt,this.slugger=new Tt}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n,r,o,s,i,a,c,l,u,d,p,f,h,m,g,b,w,y,v="";const k=e.length;for(n=0;n<k;n++)switch(d=e[n],d.type){case"space":continue;case"hr":v+=this.renderer.hr();continue;case"heading":v+=this.renderer.heading(this.parseInline(d.tokens),d.depth,Lt(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case"code":v+=this.renderer.code(d.text,d.lang,d.escaped);continue;case"table":for(l="",c="",s=d.header.length,r=0;r<s;r++)c+=this.renderer.tablecell(this.parseInline(d.tokens.header[r]),{header:!0,align:d.align[r]});for(l+=this.renderer.tablerow(c),u="",s=d.cells.length,r=0;r<s;r++){for(a=d.tokens.cells[r],c="",i=a.length,o=0;o<i;o++)c+=this.renderer.tablecell(this.parseInline(a[o]),{header:!1,align:d.align[o]});u+=this.renderer.tablerow(c)}v+=this.renderer.table(l,u);continue;case"blockquote":u=this.parse(d.tokens),v+=this.renderer.blockquote(u);continue;case"list":for(p=d.ordered,f=d.start,h=d.loose,s=d.items.length,u="",r=0;r<s;r++)g=d.items[r],b=g.checked,w=g.task,m="",g.task&&(y=this.renderer.checkbox(b),h?g.tokens.length>0&&"text"===g.tokens[0].type?(g.tokens[0].text=y+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=y+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:y}):m+=y),m+=this.parse(g.tokens,h),u+=this.renderer.listitem(m,w,b);v+=this.renderer.list(u,p,f);continue;case"html":v+=this.renderer.html(d.text);continue;case"paragraph":v+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(u=d.tokens?this.parseInline(d.tokens):d.text;n+1<k&&"text"===e[n+1].type;)d=e[++n],u+="\n"+(d.tokens?this.parseInline(d.tokens):d.text);v+=t?this.renderer.paragraph(u):u;continue;default:{const e='Token with "'+d.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return v}parseInline(e,t){t=t||this.renderer;let n,r,o="";const s=e.length;for(n=0;n<s;n++)switch(r=e[n],r.type){case"escape":o+=t.text(r.text);break;case"html":o+=t.html(r.text);break;case"link":o+=t.link(r.href,r.title,this.parseInline(r.tokens,t));break;case"image":o+=t.image(r.href,r.title,r.text);break;case"strong":o+=t.strong(this.parseInline(r.tokens,t));break;case"em":o+=t.em(this.parseInline(r.tokens,t));break;case"codespan":o+=t.codespan(r.text);break;case"br":o+=t.br();break;case"del":o+=t.del(this.parseInline(r.tokens,t));break;case"text":o+=t.text(r.text);break;default:{const e='Token with "'+r.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return o}};const{merge:It,checkSanitizeDeprecation:Dt,escape:Nt}=rt,{getDefaults:Ot,changeDefaults:jt,defaults:zt}=We;function Wt(e,t,n){if(null==e)throw new Error("marked(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");if("function"==typeof t&&(n=t,t=null),t=It({},Wt.defaults,t||{}),Dt(t),n){const r=t.highlight;let o;try{o=$t.lex(e,t)}catch(e){return n(e)}const s=function(e){let s;if(!e)try{s=Pt.parse(o,t)}catch(t){e=t}return t.highlight=r,e?n(e):n(null,s)};if(!r||r.length<3)return s();if(delete t.highlight,!o.length)return s();let i=0;return Wt.walkTokens(o,(function(e){"code"===e.type&&(i++,setTimeout(()=>{r(e.text,e.lang,(function(t,n){if(t)return s(t);null!=n&&n!==e.text&&(e.text=n,e.escaped=!0),i--,0===i&&s()}))},0))})),void(0===i&&s())}try{const n=$t.lex(e,t);return t.walkTokens&&Wt.walkTokens(n,t.walkTokens),Pt.parse(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Nt(e.message+"",!0)+"</pre>";throw e}}Wt.options=Wt.setOptions=function(e){return It(Wt.defaults,e),jt(Wt.defaults),Wt},Wt.getDefaults=Ot,Wt.defaults=zt,Wt.use=function(e){const t=It({},e);if(e.renderer){const n=Wt.defaults.renderer||new Et;for(const t in e.renderer){const r=n[t];n[t]=(...o)=>{let s=e.renderer[t].apply(n,o);return!1===s&&(s=r.apply(n,o)),s}}t.renderer=n}if(e.tokenizer){const n=Wt.defaults.tokenizer||new ut;for(const t in e.tokenizer){const r=n[t];n[t]=(...o)=>{let s=e.tokenizer[t].apply(n,o);return!1===s&&(s=r.apply(n,o)),s}}t.tokenizer=n}if(e.walkTokens){const n=Wt.defaults.walkTokens;t.walkTokens=t=>{e.walkTokens(t),n&&n(t)}}Wt.setOptions(t)},Wt.walkTokens=function(e,t){for(const n of e)switch(t(n),n.type){case"table":for(const e of n.tokens.header)Wt.walkTokens(e,t);for(const e of n.tokens.cells)for(const n of e)Wt.walkTokens(n,t);break;case"list":Wt.walkTokens(n.items,t);break;default:n.tokens&&Wt.walkTokens(n.tokens,t)}},Wt.parseInline=function(e,t){if(null==e)throw new Error("marked.parseInline(): input parameter is undefined or null");if("string"!=typeof e)throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected");t=It({},Wt.defaults,t||{}),Dt(t);try{const n=$t.lexInline(e,t);return t.walkTokens&&Wt.walkTokens(n,t.walkTokens),Pt.parseInline(n,t)}catch(e){if(e.message+="\nPlease report this to https://github.com/markedjs/marked.",t.silent)return"<p>An error occurred:</p><pre>"+Nt(e.message+"",!0)+"</pre>";throw e}},Wt.Parser=Pt,Wt.parser=Pt.parse,Wt.Renderer=Et,Wt.TextRenderer=Rt,Wt.Lexer=$t,Wt.lexer=$t.lex,Wt.Tokenizer=ut,Wt.Slugger=Tt,Wt.parse=Wt;var Mt=Wt;"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Ut=function(e){var t={exports:{}};return e(t,t.exports),t.exports}((function(e,t){!function(t,n){e.exports=n()}(0,(function(){var e=[],t=[],n={},r={},o={};function s(e){return"string"==typeof e?new RegExp("^"+e+"$","i"):e}function i(e,t){return e===t?t:e===e.toLowerCase()?t.toLowerCase():e===e.toUpperCase()?t.toUpperCase():e[0]===e[0].toUpperCase()?t.charAt(0).toUpperCase()+t.substr(1).toLowerCase():t.toLowerCase()}function a(e,t){return e.replace(/\$(\d{1,2})/g,(function(e,n){return t[n]||""}))}function c(e,t){return e.replace(t[0],(function(n,r){var o=a(t[1],arguments);return i(""===n?e[r-1]:n,o)}))}function l(e,t,r){if(!e.length||n.hasOwnProperty(e))return t;for(var o=r.length;o--;){var s=r[o];if(s[0].test(t))return c(t,s)}return t}function u(e,t,n){return function(r){var o=r.toLowerCase();return t.hasOwnProperty(o)?i(r,o):e.hasOwnProperty(o)?i(r,e[o]):l(o,r,n)}}function d(e,t,n,r){return function(r){var o=r.toLowerCase();return!!t.hasOwnProperty(o)||!e.hasOwnProperty(o)&&l(o,o,n)===o}}function p(e,t,n){return(n?t+" ":"")+(1===t?p.singular(e):p.plural(e))}return p.plural=u(o,r,e),p.isPlural=d(o,r,e),p.singular=u(r,o,t),p.isSingular=d(r,o,t),p.addPluralRule=function(t,n){e.push([s(t),n])},p.addSingularRule=function(e,n){t.push([s(e),n])},p.addUncountableRule=function(e){"string"!=typeof e?(p.addPluralRule(e,"$0"),p.addSingularRule(e,"$0")):n[e.toLowerCase()]=!0},p.addIrregularRule=function(e,t){t=t.toLowerCase(),e=e.toLowerCase(),o[e]=t,r[t]=e},[["I","we"],["me","us"],["he","they"],["she","they"],["them","them"],["myself","ourselves"],["yourself","yourselves"],["itself","themselves"],["herself","themselves"],["himself","themselves"],["themself","themselves"],["is","are"],["was","were"],["has","have"],["this","these"],["that","those"],["echo","echoes"],["dingo","dingoes"],["volcano","volcanoes"],["tornado","tornadoes"],["torpedo","torpedoes"],["genus","genera"],["viscus","viscera"],["stigma","stigmata"],["stoma","stomata"],["dogma","dogmata"],["lemma","lemmata"],["schema","schemata"],["anathema","anathemata"],["ox","oxen"],["axe","axes"],["die","dice"],["yes","yeses"],["foot","feet"],["eave","eaves"],["goose","geese"],["tooth","teeth"],["quiz","quizzes"],["human","humans"],["proof","proofs"],["carve","carves"],["valve","valves"],["looey","looies"],["thief","thieves"],["groove","grooves"],["pickaxe","pickaxes"],["passerby","passersby"]].forEach((function(e){return p.addIrregularRule(e[0],e[1])})),[[/s?$/i,"s"],[/[^\u0000-\u007F]$/i,"$0"],[/([^aeiou]ese)$/i,"$1"],[/(ax|test)is$/i,"$1es"],[/(alias|[^aou]us|t[lm]as|gas|ris)$/i,"$1es"],[/(e[mn]u)s?$/i,"$1s"],[/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i,"$1"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1i"],[/(alumn|alg|vertebr)(?:a|ae)$/i,"$1ae"],[/(seraph|cherub)(?:im)?$/i,"$1im"],[/(her|at|gr)o$/i,"$1oes"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i,"$1a"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i,"$1a"],[/sis$/i,"ses"],[/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i,"$1$2ves"],[/([^aeiouy]|qu)y$/i,"$1ies"],[/([^ch][ieo][ln])ey$/i,"$1ies"],[/(x|ch|ss|sh|zz)$/i,"$1es"],[/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i,"$1ices"],[/\b((?:tit)?m|l)(?:ice|ouse)$/i,"$1ice"],[/(pe)(?:rson|ople)$/i,"$1ople"],[/(child)(?:ren)?$/i,"$1ren"],[/eaux$/i,"$0"],[/m[ae]n$/i,"men"],["thou","you"]].forEach((function(e){return p.addPluralRule(e[0],e[1])})),[[/s$/i,""],[/(ss)$/i,"$1"],[/(wi|kni|(?:after|half|high|low|mid|non|night|[^\w]|^)li)ves$/i,"$1fe"],[/(ar|(?:wo|[ae])l|[eo][ao])ves$/i,"$1f"],[/ies$/i,"y"],[/\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i,"$1ie"],[/\b(mon|smil)ies$/i,"$1ey"],[/\b((?:tit)?m|l)ice$/i,"$1ouse"],[/(seraph|cherub)im$/i,"$1"],[/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i,"$1"],[/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i,"$1sis"],[/(movie|twelve|abuse|e[mn]u)s$/i,"$1"],[/(test)(?:is|es)$/i,"$1is"],[/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i,"$1us"],[/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i,"$1um"],[/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i,"$1on"],[/(alumn|alg|vertebr)ae$/i,"$1a"],[/(cod|mur|sil|vert|ind)ices$/i,"$1ex"],[/(matr|append)ices$/i,"$1ix"],[/(pe)(rson|ople)$/i,"$1rson"],[/(child)ren$/i,"$1"],[/(eau)x?$/i,"$1"],[/men$/i,"man"]].forEach((function(e){return p.addSingularRule(e[0],e[1])})),["adulthood","advice","agenda","aid","aircraft","alcohol","ammo","analytics","anime","athletics","audio","bison","blood","bream","buffalo","butter","carp","cash","chassis","chess","clothing","cod","commerce","cooperation","corps","debris","diabetes","digestion","elk","energy","equipment","excretion","expertise","firmware","flounder","fun","gallows","garbage","graffiti","hardware","headquarters","health","herpes","highjinks","homework","housework","information","jeans","justice","kudos","labour","literature","machinery","mackerel","mail","media","mews","moose","music","mud","manga","news","only","personnel","pike","plankton","pliers","police","pollution","premises","rain","research","rice","salmon","scissors","series","sewage","shambles","shrimp","software","species","staff","swine","tennis","traffic","transportation","trout","tuna","wealth","welfare","whiting","wildebeest","wildlife","you",/pok[eé]mon$/i,/[^aeiou]ese$/i,/deer$/i,/fish$/i,/measles$/i,/o[iu]s$/i,/pox$/i,/sheep$/i].forEach(p.addUncountableRule),p}))})),Ft=function(e){var t={};try{t.WeakMap=WeakMap}catch(u){t.WeakMap=function(e,t){var n=t.defineProperty,r=t.hasOwnProperty,o=s.prototype;return o.delete=function(e){return this.has(e)&&delete e[this._]},o.get=function(e){return this.has(e)?e[this._]:void 0},o.has=function(e){return r.call(e,this._)},o.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},s;function s(t){n(this,"_",{value:"_@ungap/weakmap"+e++}),t&&t.forEach(i,this)}function i(e){this.set(e[0],e[1])}}(Math.random(),Object)}var n=t.WeakMap,r={};try{r.WeakSet=WeakSet}catch(u){!function(e,t){var n=o.prototype;function o(){t(this,"_",{value:"_@ungap/weakmap"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},r.WeakSet=o}(Math.random(),Object.defineProperty)}function o(e,t,n,r,o,s){for(var i=("selectedIndex"in t),a=i;r<o;){var c,l=e(n[r],1);t.insertBefore(l,s),i&&a&&l.selected&&(a=!a,c=t.selectedIndex,t.selectedIndex=c<0?r:d.call(t.querySelectorAll("option"),l)),r++}}function s(e,t){return e==t}function i(e){return e}function a(e,t,n,r,o,s,i){var a=s-o;if(a<1)return-1;for(;a<=n-t;){for(var c=t,l=o;c<n&&l<s&&i(e[c],r[l]);)c++,l++;if(l===s)return t;t=c+1}return-1}function c(e,t,n,r,o){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:o}function l(e,t,n,r){for(;n<r;)f(e(t[n++],-1))}var u=r.WeakSet,d=[].indexOf,p=function(e,t,n){for(var r=1,o=t;r<o;){var s=(r+o)/2>>>0;n<e[s]?o=s:r=1+s}return r},f=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function h(e,t,n,r){for(var u=(r=r||{}).compare||s,d=r.node||i,f=null==r.before?null:d(r.before,0),h=t.length,m=h,g=0,b=n.length,w=0;g<m&&w<b&&u(t[g],n[w]);)g++,w++;for(;g<m&&w<b&&u(t[m-1],n[b-1]);)m--,b--;var y=g===m,v=w===b;if(y&&v)return n;if(y&&w<b)return o(d,e,n,w,b,c(d,t,g,h,f)),n;if(v&&g<m)return l(d,t,g,m),n;var k=m-g,x=b-w,$=-1;if(k<x){if(-1<($=a(n,w,b,t,g,m,u)))return o(d,e,n,w,$,d(t[g],0)),o(d,e,n,$+k,b,c(d,t,m,h,f)),n}else if(x<k&&-1<($=a(t,g,m,n,w,b,u)))return l(d,t,g,$),l(d,t,$+x,m),n;return k<2||x<2?(o(d,e,n,w,b,d(t[g],0)),l(d,t,g,m)):k==x&&function(e,t,n,r,o,s){for(;r<o&&s(n[r],e[t-1]);)r++,t--;return 0===t}(n,b,t,g,m,u)?o(d,e,n,w,b,c(d,t,m,h,f)):function(e,t,n,r,s,i,a,c,u,d,f,h,m){!function(e,t,n,r,s,i,a,c,u){for(var d=[],p=e.length,f=a,h=0;h<p;)switch(e[h++]){case 0:s++,f++;break;case 1:d.push(r[s]),o(t,n,r,s++,s,f<c?t(i[f],0):u);break;case-1:f++}for(h=0;h<p;)switch(e[h++]){case 0:a++;break;case-1:-1<d.indexOf(i[a])?a++:l(t,i,a++,a)}}(function(e,t,n,r,o,s,i){var a,c,l,u,d,p,f=n+s,h=[];e:for(b=0;b<=f;b++){if(50<b)return null;for(p=b-1,u=b?h[b-1]:[0,0],d=h[b]=[],a=-b;a<=b;a+=2){for(c=(l=a===-b||a!==b&&u[p+a-1]<u[p+a+1]?u[p+a+1]:u[p+a-1]+1)-a;l<s&&c<n&&i(r[o+l],e[t+c]);)l++,c++;if(l===s&&c===n)break e;d[b+a]=l}}for(var m=Array(b/2+f/2),g=m.length-1,b=h.length-1;0<=b;b--){for(;0<l&&0<c&&i(r[o+l-1],e[t+c-1]);)m[g--]=0,l--,c--;if(!b)break;p=b-1,u=b?h[b-1]:[0,0],(a=l-c)==-b||a!==b&&u[p+a-1]<u[p+a+1]?(c--,m[g--]=1):(l--,m[g--]=-1)}return m}(n,r,i,a,c,d,h)||function(e,t,n,r,o,s,i,a){var c=0,l=r<a?r:a,u=Array(l++),d=Array(l);d[0]=-1;for(var f=1;f<l;f++)d[f]=i;for(var h=o.slice(s,i),m=t;m<n;m++){var g,b=h.indexOf(e[m]);-1<b&&-1<(c=p(d,l,g=b+s))&&(d[c]=g,u[c]={newi:m,oldi:g,prev:u[c-1]})}for(c=--l,--i;d[c]>i;)--c;l=a+r-c;var w=Array(l),y=u[c];for(--n;y;){for(var v=y.newi,k=y.oldi;v<n;)w[--l]=1,--n;for(;k<i;)w[--l]=-1,--i;w[--l]=0,--n,--i,y=y.prev}for(;t<=n;)w[--l]=1,--n;for(;s<=i;)w[--l]=-1,--i;return w}(n,r,s,i,a,c,u,d),e,t,n,r,a,c,f,m)}(d,e,n,w,b,x,t,g,m,k,h,u,f),n}var m={};function g(t,n){n=n||{};var r=e.createEvent("CustomEvent");return r.initCustomEvent(t,!!n.bubbles,!!n.cancelable,n.detail),r}m.CustomEvent="function"==typeof CustomEvent?CustomEvent:(g["prototype"]=new g("").constructor.prototype,g);var b=m.CustomEvent,w={};try{w.Map=Map}catch(u){w.Map=function(){var e=0,t=[],n=[];return{delete:function(o){var s=r(o);return s&&(t.splice(e,1),n.splice(e,1)),s},forEach:function(e,r){t.forEach((function(t,o){e.call(r,n[o],t,this)}),this)},get:function(t){return r(t)?n[e]:void 0},has:r,set:function(o,s){return n[r(o)?e:t.push(o)-1]=s,this}};function r(n){return-1<(e=t.indexOf(n))}}}var y=w.Map;function v(){return this}function k(e,t){var n="_"+e+"$";return{get:function(){return this[n]||x(this,n,t.call(this,e))},set:function(e){x(this,n,e)}}}var x=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:"function"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(v.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var $,S,_,C,E,R,T={},A={},L=[],P=A.hasOwnProperty,I=0,D={attributes:T,define:function(e,t){e.indexOf("-")<0?(e in A||(I=L.push(e)),A[e]=t):T[e]=t},invoke:function(e,t){for(var n=0;n<I;n++){var r=L[n];if(P.call(e,r))return A[r](e[r],t)}}},N=Array.isArray||(S=($={}.toString).call([]),function(e){return $.call(e)===S}),O=(_=e,C="fragment",R="content"in z(E="template")?function(e){var t=z(E);return t.innerHTML=e,t.content}:function(e){var t,n=z(C),r=z(E);return j(n,/^[^\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML="<table>"+e+"</table>",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return("svg"===t?function(e){var t=z(C),n=z("div");return n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg">'+e+"</svg>",j(t,n.firstChild.childNodes),t}:R)(e)});function j(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function z(e){return e===C?_.createDocumentFragment():_.createElementNS("http://www.w3.org/1999/xhtml",e)}var W,M,U,F,q,B,H,G,V,Z=(M="appendChild",U="cloneNode",F="createTextNode",B=(q="importNode")in(W=e),(H=W.createDocumentFragment())[M](W[F]("g")),H[M](W[F]("")),(B?W[q](H,!0):H[U](!0)).childNodes.length<2?function e(t,n){for(var r=t[U](),o=t.childNodes||[],s=o.length,i=0;n&&i<s;i++)r[M](e(o[i],n));return r}:B?W[q]:function(e,t){return e[U](!!t)}),Y="".trim||function(){return String(this).replace(/^\s+|\s+/g,"")},J="-"+Math.random().toFixed(6)+"%",K=!1;try{G=e.createElement("template"),V="tabindex","content"in G&&(G.innerHTML="<p "+V+'="'+J+'"></p>',G.content.childNodes[0].getAttribute(V)==J)||(J="_dt: "+J.slice(1,-1)+";",K=!0)}catch(u){}var X="\x3c!--"+J+"--\x3e",Q=/^(?:style|textarea)$/i,ee=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i,te=" \\f\\n\\r\\t",ne="[^"+te+"\\/>\"'=]+",re="["+te+"]+"+ne,oe="<([A-Za-z]+[A-Za-z0-9:._-]*)((?:",se="(?:\\s*=\\s*(?:'[^']*?'|\"[^\"]*?\"|<[^>]*?>|"+ne.replace("\\/","")+"))?)",ie=new RegExp(oe+re+se+"+)(["+te+"]*/?>)","g"),ae=new RegExp(oe+re+se+"*)(["+te+"]*/>)","g"),ce=new RegExp("("+re+"\\s*=\\s*)(['\"]?)"+X+"\\2","gi");function le(e,t,n,r){return"<"+t+n.replace(ce,ue)+r}function ue(e,t,n){return t+(n||'"')+J+(n||'"')}function de(e,t,n){return ee.test(t)?e:"<"+t+n+"></"+t+">"}var pe=K?function(e,t){var n=t.join(" ");return t.slice.call(e,0).sort((function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1}))}:function(e,t){return t.slice.call(e,0)};function fe(t,n,r,o){for(var s=t.childNodes,i=s.length,a=0;a<i;){var c=s[a];switch(c.nodeType){case 1:var l=o.concat(a);!function(t,n,r,o){for(var s,i=t.attributes,a=[],c=[],l=pe(i,r),u=l.length,d=0;d<u;){var p=l[d++],f=p.value===J;if(f||1<(s=p.value.split(X)).length){var h=p.name;if(a.indexOf(h)<0){a.push(h);var m=r.shift().replace(f?/^(?:|[\S\s]*?\s)(\S+?)\s*=\s*('|")?$/:new RegExp("^(?:|[\\S\\s]*?\\s)("+h+")\\s*=\\s*('|\")[\\S\\s]*","i"),"$1"),g=i[m]||i[m.toLowerCase()];if(f)n.push(he(g,o,m,null));else{for(var b=s.length-2;b--;)r.shift();n.push(he(g,o,m,s))}}c.push(p)}}for(var w=((d=0)<(u=c.length)&&K&&!("ownerSVGElement"in t));d<u;){var y=c[d++];w&&(y.value=""),t.removeAttribute(y.name)}var v=t.nodeName;if(/^script$/i.test(v)){var k=e.createElement(v);for(u=i.length,d=0;d<u;)k.setAttributeNode(i[d++].cloneNode(!0));k.textContent=t.textContent,t.parentNode.replaceChild(k,t)}}(c,n,r,l),fe(c,n,r,l);break;case 8:var u=c.textContent;if(u===J)r.shift(),n.push(Q.test(t.nodeName)?me(t,o):{type:"any",node:c,path:o.concat(a)});else switch(u.slice(0,2)){case"/*":if("*/"!==u.slice(-2))break;case"👻":t.removeChild(c),a--,i--}break;case 3:Q.test(t.nodeName)&&Y.call(c.textContent)===X&&(r.shift(),n.push(me(t,o)))}a++}}function he(e,t,n,r){return{type:"attr",node:e,path:t,name:n,sparse:r}}function me(e,t){return{type:"text",node:e,path:t}}var ge,be=(ge=new n,{get:function(e){return ge.get(e)},set:function(e,t){return ge.set(e,t),t}});function we(e,t){var n=(e.convert||function(e){return e.join(X).replace(ae,de).replace(ie,le)})(t),r=e.transform;r&&(n=r(n));var o=O(n,e.type);ve(o);var s=[];return fe(o,s,t.slice(0),[]),{content:o,updates:function(n){for(var r=[],o=s.length,i=0,a=0;i<o;){var c=s[i++],l=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(n,c.path);switch(c.type){case"any":r.push({fn:e.any(l,[]),sparse:!1});break;case"attr":var u=c.sparse,d=e.attribute(l,c.name,c.node);null===u?r.push({fn:d,sparse:!1}):(a+=u.length-2,r.push({fn:d,sparse:!0,values:u}));break;case"text":r.push({fn:e.text(l),sparse:!1}),l.textContent=""}}return o+=a,function(){var e=arguments.length;if(o!==e-1)throw new Error(e-1+" values instead of "+o+"\n"+t.join("${value}"));for(var s=1,i=1;s<e;){var a=r[s-i];if(a.sparse){var c=a.values,l=c[0],u=1,d=c.length;for(i+=d-2;u<d;)l+=arguments[s++]+c[u++];a.fn(l)}else a.fn(arguments[s++])}return n}}}}var ye=[];function ve(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===Y.call(r.textContent).length&&e.removeChild(r)}}var ke,xe,$e=(ke=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,xe=/([^A-Z])([A-Z]+)/g,function(e,t){return"ownerSVGElement"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute("style","--hyper:style;"),e.getAttributeNode("style"))).value="",e.setAttributeNode(n),_e(n,!0)}(e,t):_e(e.style,!1)});function Se(e,t,n){return t+"-"+n.toLowerCase()}function _e(e,t){var n,r;return function(o){var s,i,a,c;switch(typeof o){case"object":if(o){if("object"===n){if(!t&&r!==o)for(i in r)i in o||(e[i]="")}else t?e.value="":e.cssText="";for(i in s=t?{}:e,o)a="number"!=typeof(c=o[i])||ke.test(i)?c:c+"px",!t&&/^--/.test(i)?s.setProperty(i,a):s[i]=a;n="object",t?e.value=function(e){var t,n=[];for(t in e)n.push(t.replace(xe,Se),":",e[t],";");return n.join("")}(r=s):r=o;break}default:r!=o&&(n="string",r=o,t?e.value=o||"":e.cssText=o||"")}}}var Ce,Ee,Re=(Ce=[].slice,(Ee=Te.prototype).ELEMENT_NODE=1,Ee.nodeType=111,Ee.remove=function(e){var t,n=this.childNodes,r=this.firstChild,o=this.lastChild;return this._=null,e&&2===n.length?o.parentNode.removeChild(o):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(o),t.deleteContents()),r},Ee.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,o=0,s=r.length;o<s;o++)t.appendChild(r[o]);return t},Te);function Te(e){var t=this.childNodes=Ce.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function Ae(e){return{html:e}}function Le(e,t){switch(e.nodeType){case Ue:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Me:return Le(e.render(),t);default:return e}}function Pe(e,t){t(e.placeholder),"text"in e?Promise.resolve(e.text).then(String).then(t):"any"in e?Promise.resolve(e.any).then(t):"html"in e?Promise.resolve(e.html).then(Ae).then(t):Promise.resolve(D.invoke(e,t)).then(t)}function Ie(e){return null!=e&&"then"in e}var De,Ne,Oe,je,ze,We="ownerSVGElement",Me=v.prototype.nodeType,Ue=Re.prototype.nodeType,Fe=(Ne=(De={Event:b,WeakSet:u}).Event,Oe=De.WeakSet,je=!0,ze=null,function(e){return je&&(je=!je,ze=new Oe,function(e){var t=new Oe,n=new Oe;try{new MutationObserver(i).observe(e,{subtree:!0,childList:!0})}catch(t){var r=0,o=[],s=function(e){o.push(e),clearTimeout(r),r=setTimeout((function(){i(o.splice(r=0,o.length))}),0)};e.addEventListener("DOMNodeRemoved",(function(e){s({addedNodes:[],removedNodes:[e.target]})}),!0),e.addEventListener("DOMNodeInserted",(function(e){s({addedNodes:[e.target],removedNodes:[]})}),!0)}function i(e){for(var r,o=e.length,s=0;s<o;s++)a((r=e[s]).removedNodes,"disconnected",n,t),a(r.addedNodes,"connected",t,n)}function a(e,t,n,r){for(var o,s=new Ne(t),i=e.length,a=0;a<i;1===(o=e[a++]).nodeType&&function e(t,n,r,o,s){ze.has(t)&&!o.has(t)&&(s.delete(t),o.add(t),t.dispatchEvent(n));for(var i=t.children||[],a=i.length,c=0;c<a;e(i[c++],n,r,o,s));}(o,s,t,n,r));}}(e.ownerDocument)),ze.add(e),e}),qe=/^(?:form|list)$/i,Be=[].slice;function He(t){return this.type=t,function(t){var n=ye,r=ve;return function(o){var s,i,a;return n!==o&&(s=t,i=n=o,a=be.get(i)||be.set(i,we(s,i)),r=a.updates(Z.call(e,a.content,!0))),r.apply(null,arguments)}}(this)}var Ge=!(He.prototype={attribute:function(e,t,n){var r,o=We in e;if("style"===t)return $e(e,n,o);if("."===t.slice(0,1))return l=e,u=t.slice(1),o?function(e){try{l[u]=e}catch(t){l.setAttribute(u,e)}}:function(e){l[u]=e};if("?"===t.slice(0,1))return i=e,a=t.slice(1),function(e){c!==!!e&&((c=!!e)?i.setAttribute(a,""):i.removeAttribute(a))};if(/^on/.test(t)){var s=t.slice(2);return"connected"===s||"disconnected"===s?Fe(e):t.toLowerCase()in e&&(s=s.toLowerCase()),function(t){r!==t&&(r&&e.removeEventListener(s,r,!1),(r=t)&&e.addEventListener(s,t,!1))}}if("data"===t||!o&&t in e&&!qe.test(t))return function(n){r!==n&&(r=n,e[t]!==n&&null==n?(e[t]="",e.removeAttribute(t)):e[t]=n)};if(t in D.attributes)return function(n){var o=D.attributes[t](e,n);r!==o&&(null==(r=o)?e.removeAttribute(t):e.setAttribute(t,o))};var i,a,c,l,u,d=!1,p=n.cloneNode(!0);return function(t){r!==t&&(r=t,p.value!==t&&(null==t?(d&&(d=!1,e.removeAttributeNode(p)),p.value=t):(p.value=t,d||(d=!0,e.setAttributeNode(p)))))}},any:function(e,t){var n,r={node:Le,before:e},o=We in e?"svg":"html",s=!1;return function i(a){switch(typeof a){case"string":case"number":case"boolean":s?n!==a&&(n=a,t[0].textContent=a):(s=!0,n=a,t=h(e.parentNode,t,[(c=a,e.ownerDocument.createTextNode(c))],r));break;case"function":i(a(e));break;case"object":case"undefined":if(null==a){s=!1,t=h(e.parentNode,t,[],r);break}default:if(s=!1,N(n=a))if(0===a.length)t.length&&(t=h(e.parentNode,t,[],r));else switch(typeof a[0]){case"string":case"number":case"boolean":i({html:a});break;case"object":if(N(a[0])&&(a=a.concat.apply([],a)),Ie(a[0])){Promise.all(a).then(i);break}default:t=h(e.parentNode,t,a,r)}else"ELEMENT_NODE"in a?t=h(e.parentNode,t,11===a.nodeType?Be.call(a.childNodes):[a],r):Ie(a)?a.then(i):"placeholder"in a?Pe(a,i):"text"in a?i(String(a.text)):"any"in a?i(a.any):"html"in a?t=h(e.parentNode,t,Be.call(O([].concat(a.html).join(""),o).childNodes),r):i("length"in a?Be.call(a):D.invoke(a,i))}var c}},text:function(e){var t;return function n(r){var o;t!==r&&("object"==(o=typeof(t=r))&&r?Ie(r)?r.then(n):"placeholder"in r?Pe(r,n):n("text"in r?String(r.text):"any"in r?r.any:"html"in r?[].concat(r.html).join(""):"length"in r?Be.call(r).join(""):D.invoke(r,n)):"function"==o?n(r(e)):e.textContent=null==r?"":r)}}}),Ve=function(t){var r,o,s,i,a=(r=(e.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\/(\d+)/.test(r)&&!/(Chrom[eium]+|Android)\/(\d+)/.test(r)),c=!("raw"in t)||t.propertyIsEnumerable("raw")||!Object.isFrozen(t.raw);return a||c?(o={},s=function(e){for(var t=".",n=0;n<e.length;n++)t+=e[n].length+"."+e[n];return o[t]||(o[t]=e)},Ve=c?s:(i=new n,function(e){return i.get(e)||(n=s(t=e),i.set(t,n),n);var t,n})):Ge=!0,Ze(t)};function Ze(e){return Ge?e:Ve(e)}function Ye(e){for(var t=arguments.length,n=[Ze(e)],r=1;r<t;)n.push(arguments[r++]);return n}var Je=new n,Ke=function(e){var t,n,r;return function(){var o=Ye.apply(null,arguments);return r!==o[0]?(r=o[0],n=new He(e),t=Qe(n.apply(n,o))):n.apply(n,o),t}},Xe=function(e,t){var n=t.indexOf(":"),r=Je.get(e),o=t;return-1<n&&(o=t.slice(n+1),t=t.slice(0,n)||"html"),r||Je.set(e,r={}),r[o]||(r[o]=Ke(t))},Qe=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new Re(t):e},et=new n;function tt(){var e=et.get(this),t=Ye.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new He(We in this?"svg":"html");et.set(this,{tagger:t,template:e}),this.textContent="",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var nt,rt,ot,st,it=D.define,at=He.prototype;function ct(e){return arguments.length<2?null==e?Ke("html"):"string"==typeof e?ct.wire(null,e):"raw"in e?Ke("html")(e):"nodeType"in e?ct.bind(e):Xe(e,"html"):("raw"in e?Ke("html"):ct.wire).apply(null,arguments)}return ct.Component=v,ct.bind=function(e){return tt.bind(e)},ct.define=it,ct.diff=h,(ct.hyper=ct).observe=Fe,ct.tagger=at,ct.wire=function(e,t){return null==e?Ke(t||"html"):Xe(e,t||"html")},ct._={WeakMap:n,WeakSet:u},nt=Ke,rt=new n,ot=Object.create,st=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(v,{for:{configurable:!0,value:function(e,t){return function(e,t,r,o){var s,i,a,c=t.get(e)||st(e,t);switch(typeof o){case"object":case"function":var l=c.w||(c.w=new n);return l.get(o)||(s=l,i=o,a=new e(r),s.set(i,a),a);default:var u=c.p||(c.p=ot(null));return u[o]||(u[o]=new e(r))}}(this,rt.get(e)||(r=e,o=new y,rt.set(r,o),o),e,null==t?"default":t);var r,o}}}),Object.defineProperties(v.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this["getAttribute"in t&&t.getAttribute("data-call")||"on"+e.type](e)}},html:k("html",nt),svg:k("svg",nt),state:k("state",(function(){return this.defaultState})),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new b(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r="function"==typeof e?e.call(this,n):e;for(var o in r)n[o]=r[o];return!1!==t&&this.render(),this}}}),ct}(document); +/*! (c) Andrea Giammarchi (ISC) */const qt=$,Bt=je,Ht=Ft,Gt=Mt,Vt=Ut,Zt=/-/g;const Yt=rn({en:{x_and_y:" and ",x_y_and_z:", and "},de:{x_and_y:" und ",x_y_and_z:" und "}}),Jt=new Intl.DateTimeFormat(["en-ca-iso8601"],{timeZone:"UTC",year:"numeric",month:"2-digit",day:"2-digit"}),Kt=".informative, .note, .issue, .example, .ednote, .practice, .introductory";function Xt(e){const t=new URL(e.href,document.baseURI),n=document.createElement("link");let{href:r}=t;switch(n.rel=e.hint,n.rel){case"dns-prefetch":case"preconnect":r=t.origin,(e.corsMode||t.origin!==document.location.origin)&&(n.crossOrigin=e.corsMode||"anonymous");break;case"preload":"as"in e&&n.setAttribute("as",e.as)}return n.href=r,e.dontRemove||n.classList.add("removeOnSave"),n}function Qt(e){e.querySelectorAll(".remove, script[data-requiremodule]").forEach(e=>{e.remove()})}function en(e=[],t=(e=>e),n=s){const r=e.map(t);if(Intl.ListFormat&&"function"==typeof Intl.ListFormat){return new Intl.ListFormat(n,{style:"long",type:"conjunction"}).format(r)}switch(r.length){case 0:case 1:return r.toString();case 2:return r.join(Yt.x_and_y);default:{const e=r.join(", "),t=e.lastIndexOf(","),n=Yt.x_y_and_z;return`${e.substr(0,t)}${n}${e.slice(t+2)}`}}}function tn(e){return e.replace(/&/g,"&").replace(/>/g,">").replace(/"/g,""").replace(/</g,"<")}function nn(e){return e.trim().replace(/\s+/g," ")}function rn(e,t=s){return t=function(e){return{"zh-hans":"zh","zh-cn":"zh"}[e]||e}(t.toLowerCase()),new Proxy(e,{get(e,n){const r=e[t]&&e[t][n]||e.en[n];if(!r)throw new Error(`No l10n data for key: "${n}"`);return r}})}function on(e,t=""){return Jt.format(e).replace(Zt,t)}function sn(e=new Date,t=document.documentElement.lang||"en"){e instanceof Date||(e=new Date(e));const n=[t,"en"];return`${e.toLocaleString(n,{day:"2-digit",timeZone:"UTC"})} ${e.toLocaleString(n,{month:"long",timeZone:"UTC"})} ${e.toLocaleString(n,{year:"numeric",timeZone:"UTC"})}`}function an(e,t,...n){const r=[this,e,...n];if(t){const n=t.split(/\s+/);for(const t of n){const n=window[t];if(n)try{e=n.apply(this,r)}catch(e){Cn(`call to \`${t}()\` failed with: ${e}.`,"utils/runTransforms",{hint:"See developer console for stack trace."}),console.error(e)}}}return e}async function cn(e,t=864e5){const n=new Request(e),r=new URL(n.url);let o,s;if("caches"in window)try{if(o=await caches.open(r.origin),s=await o.match(n),s&&new Date(s.headers.get("Expires"))>new Date)return s}catch(e){console.error("Failed to use Cache API.",e)}const i=await fetch(n);if(!i.ok&&s)return console.warn("Returning a stale cached response for "+r),s;if(o&&i.ok){const e=i.clone(),r=new Headers(i.headers),s=new Date(Date.now()+t);r.set("Expires",s.toISOString());const a=new Response(await e.blob(),{headers:r});await o.put(n,a).catch(console.error)}return i}function ln(e,t=(e=>e)){const n=e.map(t),r=n.slice(0,-1).map(e=>Ht`${e}, `);return Ht`${r}${n[n.length-1]}`}function un(e,t=(e=>e)){const n=e.map(t);switch(n.length){case 0:case 1:return n[0];case 2:return Ht`${n[0]}${Yt.x_and_y}${n[1]}`;default:{const e=ln(n.slice(0,-1));return Ht`${e}${Yt.x_y_and_z}${n[n.length-1]}`}}}function dn(e,t=""){return pn(e,t,function(e){let t=0;for(const n of e)t=Math.imul(31,t)+n.charCodeAt(0)|0;return String(t)}(nn(e.textContent)))}function pn(e,t="",n="",r=!1){if(e.id)return e.id;n||(n=(e.title?e.title:e.textContent).trim());let o=r?n:n.toLowerCase();if(o=o.trim().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\W+/gim,"-").replace(/^-+/,"").replace(/-+$/,""),o?!/\.$/.test(o)&&/^[a-z]/i.test(t||o)||(o="x"+o):o="generatedID",t&&(o=`${t}-${o}`),e.ownerDocument.getElementById(o)){let t=0,n=`${o}-${t}`;for(;e.ownerDocument.getElementById(n);)t+=1,n=`${o}-${t}`;o=n}return e.id=o,o}function fn(e){const t=new Set,n="ltNodefault"in e.dataset?"":nn(e.textContent),r=e.children[0];if(e.dataset.lt?e.dataset.lt.split("|").map(e=>nn(e)).forEach(e=>t.add(e)):1===e.childNodes.length&&1===e.getElementsByTagName("abbr").length&&r.title?t.add(r.title):'""'===e.textContent&&t.add("the-empty-string"),t.add(n),t.delete(""),e.dataset.localLt){e.dataset.localLt.split("|").forEach(e=>t.add(nn(e)))}return[...t]}function hn(e,t){if(e.localName===t)return e;const n=e.ownerDocument.createElement(t);for(const{name:t,value:r}of e.attributes)n.setAttribute(t,r);return n.append(...e.childNodes),e.replaceWith(n),n}function mn(e,t){const n=t.closest(Kt);let r=!1;if(n&&(r=!t.closest(".normative")||!n.querySelector(".normative")),e.startsWith("!")){if(r)return{type:"informative",illegal:!0};r=!1}else e.startsWith("?")&&(r=!0);return{type:r?"informative":"normative",illegal:!1}}function gn(e,t){return t.append(...e.childNodes),e.appendChild(t),e}function bn(e,t){const n=[];let r=e.parentElement;for(;r;){const e=r.closest(t);if(!e)break;n.push(e),r=e.parentElement}return n}function wn(e){const{previousSibling:t}=e;if(!t||t.nodeType!==Node.TEXT_NODE)return"";const n=t.textContent.lastIndexOf("\n");if(-1===n)return"";const r=t.textContent.slice(n+1);return/\S/.test(r)?"":r}class yn extends Set{constructor(e=[]){super();for(const t of e)this.add(t)}add(e){return this.has(e)||this.getCanonicalKey(e)?this:super.add(e)}has(e){return super.has(e)||[...this.keys()].some(t=>t.toLowerCase()===e.toLowerCase())}delete(e){return super.has(e)?super.delete(e):super.delete(this.getCanonicalKey(e))}getCanonicalKey(e){return super.has(e)?e:[...this.keys()].find(t=>t.toLowerCase()===e.toLowerCase())}}function vn(e){const t=e.cloneNode(!0);return t.querySelectorAll("[id]").forEach(e=>e.removeAttribute("id")),t.querySelectorAll("dfn").forEach(e=>hn(e,"span")),t.hasAttribute("id")&&t.removeAttribute("id"),kn(t),t}function kn(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_COMMENT);for(const e of[...xn(t)])e.remove()}function*xn(e){for(;e.nextNode();)yield e.currentNode}class $n extends Map{constructor(e=[]){return super(),e.forEach(([e,t])=>{this.set(e,t)}),this}set(e,t){return super.set(e.toLowerCase(),t),this}get(e){return super.get(e.toLowerCase())}has(e){return super.has(e.toLowerCase())}delete(e){return super.delete(e.toLowerCase())}}class Sn extends Error{constructor(e,t,n){super(e);const r=n.isWarning?"ReSpecWarning":"ReSpecError";Object.assign(this,{message:e,plugin:t,name:r,...n}),n.elements&&n.elements.forEach(t=>function(e,t,n){e.classList.add("respec-offending-element"),e.hasAttribute("title")||e.setAttribute("title",n||t),e.id||pn(e,"respec-offender")}(t,e,n.title))}toJSON(){const{message:e,name:t,stack:n}=this,{plugin:r,hint:o,elements:s,title:i,details:a}=this;return{message:e,name:t,plugin:r,hint:o,elements:s,title:i,details:a,stack:n}}}function _n(e,t,n={}){const r={...n,isWarning:!1};An("error",new Sn(e,t,r))}function Cn(e,t,n={}){const r={...n,isWarning:!0};An("warn",new Sn(e,t,r))}function En(e){return`[\`${e}\`](https://respec.org/docs/#${e})`}const Rn="core/pubsubhub",Tn=new Map;function An(e,...t){if(!Tn.has(e))return;if(Array.from(Tn.get(e)).forEach(e=>{try{e(...t)}catch(t){_n(`Error when calling function ${e.name}.`,Rn,{hint:"See developer console."}),console.error(t)}}),window.parent===window.self)return;const n=t.map(e=>String(JSON.stringify(e.stack||e)));window.parent.postMessage({topic:e,args:n},window.parent.location.origin)}function Ln(e,t,n={once:!1}){return n.once?Ln(e,(function n(...r){!function({topic:e,cb:t}){const n=Tn.get(e);if(!n||!n.has(t))return console.warn("Already unsubscribed:",e,t),!1;n.delete(t)}({topic:e,cb:n}),t(...r)})):(Tn.has(e)?Tn.get(e).add(t):Tn.set(e,new Set([t])),{topic:e,cb:t})}n(Rn,{sub:Ln});const Pn=["githubToken","githubUser"];const In=new Map([["text/html","html"],["application/xml","xml"]]);function Dn(e,t=document){const n=In.get(e);if(!n){const t=[...In.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=Nn(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}function Nn(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;kn(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Qt(r);const o=e.createDocumentFragment(),s=e.querySelector("meta[name='viewport']");s&&t.firstChild!==s&&o.appendChild(s);let i=e.querySelector("meta[charset], meta[content*='charset=']");i||(i=Ht`<meta charset="utf-8" />`);o.appendChild(i);const a="ReSpec "+(window.respecVersion||"Developer Channel"),c=Ht` + <meta name="generator" content="${a}" /> + `;o.appendChild(c),t.prepend(o),An("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}n("core/exporter",{rsDocToDataURL:Dn});class On{constructor(){this._respecDonePromise=new Promise(e=>{Ln("end-all",e,{once:!0})}),this.errors=[],this.warnings=[],Ln("error",e=>{console.error(e,e.toJSON()),this.errors.push(e)}),Ln("warn",e=>{console.warn(e,e.toJSON()),this.warnings.push(e)})}get version(){return window.respecVersion}get ready(){return this._respecDonePromise}async toHTML(){return Nn("html",document)}}const jn="core/post-process";const zn="core/pre-process";const Wn="core/base-runner";var Mn=Object.freeze({__proto__:null,name:Wn,runAll:async function(e){!function(){const e=new On;Object.defineProperty(document,"respec",{value:e});let t=!1;Object.defineProperty(document,"respecIsReady",{get:()=>(t||(Cn("`document.respecIsReady` is deprecated and will be removed in a future release.","core/respec-global",{hint:"Use `document.respec.ready` instead."}),t=!0),document.respec.ready)})}(),An("start-all",respecConfig),function(e){const t={},n=e=>Object.assign(t,e);n(e),Ln("amend-user-config",n),Ln("end-all",()=>{const e=document.createElement("script");e.id="initialUserConfig",e.type="application/json";for(const e of Pn)e in t&&delete t[e];e.innerHTML=JSON.stringify(t,null,2),document.head.appendChild(e)})}(respecConfig),function(e){const t=new URLSearchParams(document.location.search),n=Array.from(t).filter(([e,t])=>!!e&&!!t).map(([e,t])=>{const n=decodeURIComponent(e),r=decodeURIComponent(t.replace(/%3D/g,"="));let o;try{o=JSON.parse(r)}catch{o=r}return[n,o]}),r=Object.fromEntries(n);Object.assign(e,r),An("amend-user-config",r)}(respecConfig),performance.mark(Wn+"-start"),await async function(e){if(Array.isArray(e.preProcess)){const t=e.preProcess.filter(e=>{const t="function"==typeof e;return t||_n("Every item in `preProcess` must be a JS function.",zn),t}).map(async t=>{try{return await t(e,document)}catch(e){_n(`Function ${t.name} threw an error during \`preProcess\`.`,zn,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}}(respecConfig);const t=e.filter(e=>{return(t=e)&&(t.run||t.Plugin);var t});t.forEach(e=>!e.name&&console.warn("Plugin lacks name:",e)),respecConfig.state={},await async function(e,t){for(const n of e.filter(e=>e.prepare))try{await n.prepare(t)}catch(e){console.error(e)}}(t,respecConfig),await async function(e,t){for(const n of e){const e=n.name||"";try{await new Promise(async(r,o)=>{const s=setTimeout(()=>{const t=`Plugin ${e} took too long.`;console.error(t,n),o(new Error(t))},15e3);performance.mark(e+"-start");try{n.Plugin?(await new n.Plugin(t).run(),r()):n.run&&(await n.run(t),r())}catch(e){o(e)}finally{clearTimeout(s),performance.mark(e+"-end"),performance.measure(e,e+"-start",e+"-end")}})}catch(e){console.error(e)}}}(t,respecConfig),respecConfig.state={},An("plugins-done",respecConfig),await async function(e){if(Array.isArray(e.postProcess)){const t=e.postProcess.filter(e=>{const t="function"==typeof e;return t||_n("Every item in `postProcess` must be a JS function.",jn),t}).map(async t=>{try{return await t(e,document)}catch(e){_n(`Function ${t.name} threw an error during \`postProcess\`.`,jn,{hint:"See developer console."}),console.error(e)}});await Promise.all(t)}"function"==typeof e.afterEnd&&await e.afterEnd(e,document)}(respecConfig),An("end-all"),Qt(document),performance.mark(Wn+"-end"),performance.measure(Wn,Wn+"-start",Wn+"-end")}});var Un=String.raw`.respec-modal .close-button{position:absolute;z-index:inherit;padding:.2em;font-weight:700;cursor:pointer;margin-left:5px;border:none;background:0 0} #respec-ui{position:fixed;display:flex;flex-direction:row-reverse;top:20px;right:20px;width:202px;text-align:right;z-index:9000} #respec-pill,.respec-info-button{background:#fff;height:2.5em;color:#787878;border:1px solid #ccc;box-shadow:1px 1px 8px 0 rgba(100,100,100,.5)} .respec-info-button{border:none;opacity:.75;border-radius:2em;margin-right:1em;min-width:3.5em} @@ -53,42 +55,42 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e } .respec-iframe{width:100%;min-height:550px;height:100%;overflow:hidden;padding:0;margin:0;border:0} .respec-iframe:not(.ready){background:url(https://respec.org/xref/loader.gif) no-repeat center} -.respec-iframe+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}`;function Wn(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var Mn=Object.freeze({__proto__:null,name:"core/reindent",reindent:Wn,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=Wn(e.innerHTML)}});const Un=/>/gm,Fn=/&/gm;class qn extends Gt.Renderer{code(e,t,n){const{language:r,...o}=qn.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const s=super.code(e,r,n),{example:i,illegalExample:a}=o;if(!i&&!a)return s;const c=i||a,l=`${r} ${i?"example":"illegal-example"}`;return s.replace("<pre>",`<pre title="${c}" class="${l}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function Bn(e){const t=Wn(e).replace(Un,">").replace(Fn,"&");return Gt(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new qn})}function Hn(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=Bn(e.innerHTML)}class Gn{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function Vn(e,t){return function e(n){const r=new Gn(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function Zn(e){const t=Vn(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const Yn=(Jn="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll(Jn);return t.forEach(Hn),Array.from(t)});var Jn;var Kn=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:Bn,restructure:Zn,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of Yn(document.body))Zn(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=wn(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),Hn(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const s=Vn(o,document);o.append(r,s),document.body.replaceWith(o)}});function Xn(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=zn,e.classList.add("removeOnSave"),document.head.appendChild(e)}();const Qn=Ht`<div id="respec-ui" class="removeOnSave" hidden></div>`,er=Ht`<ul +.respec-iframe+a[href]{font-size:.9rem;float:right;margin:0 .5em .5em;border-bottom-width:1px}`;function Fn(e){if(!e)return e;const t=e.trimEnd().split("\n");for(;t.length&&!t[0].trim();)t.shift();const n=t.filter(e=>e.trim()).map(e=>e.search(/[^\s]/)),r=Math.min(...n);return t.map(e=>e.slice(r)).join("\n")}var qn=Object.freeze({__proto__:null,name:"core/reindent",reindent:Fn,run:function(){for(const e of document.getElementsByTagName("pre"))e.innerHTML=Fn(e.innerHTML)}});const Bn=/>/gm,Hn=/&/gm;class Gn extends Gt.Renderer{code(e,t,n){const{language:r,...o}=Gn.parseInfoString(t);if(/(^webidl$)/i.test(r))return`<pre class="idl">${e}</pre>`;const s=super.code(e,r,n),{example:i,illegalExample:a}=o;if(!i&&!a)return s;const c=i||a,l=`${r} ${i?"example":"illegal-example"}`;return s.replace("<pre>",`<pre title="${c}" class="${l}">`)}static parseInfoString(e){const t=e.search(/\s/);if(-1===t)return{language:e};const n=e.slice(0,t),r=e.slice(t+1);let o;if(r)try{o=JSON.parse(`{ ${r} }`)}catch(e){console.error(e)}return{language:n,...o}}heading(e,t,n,r){const o=/(.+)\s+{#([\w-]+)}$/;if(o.test(e)){const[,n,r]=e.match(o);return`<h${t} id="${r}">${n}</h${t}>`}return super.heading(e,t,n,r)}}function Vn(e){const t=Fn(e).replace(Bn,">").replace(Hn,"&");return Gt(t,{sanitize:!1,gfm:!0,headerIds:!1,langPrefix:"",renderer:new Gn})}function Zn(e){for(const t of e.getElementsByTagName("pre"))t.prepend("\n");e.innerHTML=Vn(e.innerHTML)}class Yn{constructor(e){this.doc=e,this.root=e.createDocumentFragment(),this.stack=[this.root],this.current=this.root}findPosition(e){return parseInt(e.tagName.charAt(1),10)}findParent(e){let t;for(;e>0;)if(e--,t=this.stack[e],t)return t}findHeader({firstChild:e}){for(;e;){if(/H[1-6]/.test(e.tagName))return e;e=e.nextSibling}return null}addHeader(e){const t=this.doc.createElement("section"),n=this.findPosition(e);t.appendChild(e),this.findParent(n).appendChild(t),this.stack[n]=t,this.stack.length=n+1,this.current=t}addSection(e,t){const n=this.findHeader(e),r=n?this.findPosition(n):1,o=this.findParent(r);n&&e.removeChild(n),e.appendChild(t(e)),n&&e.prepend(n),o.appendChild(e),this.current=o}addElement(e){this.current.appendChild(e)}}function Jn(e,t){return function e(n){const r=new Yn(t);for(;n.firstChild;){const t=n.firstChild;if(t.nodeType===Node.ELEMENT_NODE)switch(t.localName){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":r.addHeader(t);break;case"section":r.addSection(t,e);break;default:r.addElement(t)}else n.removeChild(t)}return r.root}(e)}function Kn(e){const t=Jn(e,e.ownerDocument);if("section"===t.firstElementChild.localName&&"section"===e.localName){const n=t.firstElementChild;n.remove(),e.append(...n.childNodes)}else e.textContent="";e.appendChild(t)}const Xn=(Qn="[data-format='markdown']:not(body)",e=>{const t=e.querySelectorAll(Qn);return t.forEach(Zn),Array.from(t)});var Qn;var er=Object.freeze({__proto__:null,name:"core/markdown",markdownToHtml:Vn,restructure:Kn,run:function(e){const t=!!document.querySelector("[data-format=markdown]:not(body)"),n="markdown"===e.format;if(!n&&!t)return;if(!n){for(const e of Xn(document.body))Kn(e);return}const r=document.getElementById("respec-ui");r.remove();const o=document.body.cloneNode(!0);!function(e,t){const n=e.querySelectorAll(t);for(const e of n){const{innerHTML:t}=e;if(/^<\w/.test(t.trimStart()))continue;const n=t.split("\n"),r=n.slice(0,2).join("\n"),o=n.slice(-2).join("\n");if(r.trim()&&e.prepend("\n\n"),o.trim()){const t=wn(e);e.append("\n\n"+t)}}}(o,"[data-format=markdown], section, div, address, article, aside, figure, header, main"),Zn(o),function(e){Array.from(e).forEach(e=>{e.replaceWith(e.textContent)})}(o.querySelectorAll(".nolinks a[href]"));const s=Jn(o,document);o.append(r,s),document.body.replaceWith(o)}});function tr(e,t){e&&Array.from(t).forEach(([t,n])=>{e.setAttribute("aria-"+t,n)})}!function(){const e=document.createElement("style");e.id="respec-ui-styles",e.textContent=Un,e.classList.add("removeOnSave"),document.head.appendChild(e)}();const nr=Ht`<div id="respec-ui" class="removeOnSave" hidden></div>`,rr=Ht`<ul id="respec-menu" role="menu" aria-labelledby="respec-pill" hidden -></ul>`,tr=Ht`<button +></ul>`,or=Ht`<button class="close-button" - onclick=${()=>pr.closeModal()} + onclick=${()=>mr.closeModal()} title="Close" > ❌ -</button>`;let nr,rr;window.addEventListener("load",()=>lr(er));const or=[],sr=[],ir={};Ln("start-all",()=>document.body.prepend(Qn),{once:!0}),Ln("end-all",()=>document.body.prepend(Qn),{once:!0});const ar=Ht`<button id="respec-pill" disabled>ReSpec</button>`;function cr(){er.classList.toggle("respec-hidden"),er.classList.toggle("respec-visible"),er.hidden=!er.hidden}function lr(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}Qn.appendChild(ar),ar.addEventListener("click",e=>{e.stopPropagation(),ar.setAttribute("aria-expanded",String(er.hidden)),cr(),er.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{er.hidden||cr()}),Qn.appendChild(er),er.addEventListener("keydown",e=>{"Escape"!==e.key||er.hidden||(ar.setAttribute("aria-expanded",String(er.hidden)),cr(),ar.focus())});const ur=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function dr(e,t,n,r){t.push(e),ir.hasOwnProperty(n)||(ir[n]=function(e,t,n){const r=Ht`<button +</button>`;let sr,ir;window.addEventListener("load",()=>pr(rr));const ar=[],cr=[],lr={};Ln("start-all",()=>document.body.prepend(nr),{once:!0}),Ln("end-all",()=>document.body.prepend(nr),{once:!0});const ur=Ht`<button id="respec-pill" disabled>ReSpec</button>`;function dr(){rr.classList.toggle("respec-hidden"),rr.classList.toggle("respec-visible"),rr.hidden=!rr.hidden}function pr(e){const t=e.querySelectorAll("a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])"),n=t[0],r=t[t.length-1];n&&n.focus(),e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===n&&(r.focus(),e.preventDefault()):document.activeElement===r&&(n.focus(),e.preventDefault()))})}nr.appendChild(ur),ur.addEventListener("click",e=>{e.stopPropagation(),ur.setAttribute("aria-expanded",String(rr.hidden)),dr(),rr.querySelector("li:first-child button").focus()}),document.documentElement.addEventListener("click",()=>{rr.hidden||dr()}),nr.appendChild(rr),rr.addEventListener("keydown",e=>{"Escape"!==e.key||rr.hidden||(ur.setAttribute("aria-expanded",String(rr.hidden)),dr(),ur.focus())});const fr=new Map([["controls","respec-menu"],["expanded","false"],["haspopup","true"],["label","ReSpec Menu"]]);function hr(e,t,n,r){t.push(e),lr.hasOwnProperty(n)||(lr[n]=function(e,t,n){const r=Ht`<button id="${"respec-pill-"+e}" class="respec-info-button" - ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Ht`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(fr(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}pr.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return Xn(r,o),r}(n,t,r),Qn.appendChild(ir[n]));const o=ir[n];o.textContent=t.length;const s=1===t.length?Vt.singular(r):r;Xn(o,new Map([["label",`${t.length} ${s}`]]))}Xn(ar,ur);const pr={show(){try{Qn.hidden=!1}catch(e){console.error(e)}},hide(){Qn.hidden=!0},enable(){ar.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),s=Ht`<button id="${o}" class="respec-option"> + ></button>`;r.addEventListener("click",()=>{r.setAttribute("aria-expanded","true");const o=Ht`<ol class="${`respec-${e}-list`}"></ol>`;for(const e of t){const t=document.createRange().createContextualFragment(gr(e)),n=document.createElement("li");t.firstElementChild===t.lastElementChild?n.append(...t.firstElementChild.childNodes):n.appendChild(t),o.appendChild(n)}mr.freshModal(n,o,r)});const o=new Map([["expanded","false"],["haspopup","true"],["controls",`respec-pill-${e}-modal`]]);return tr(r,o),r}(n,t,r),nr.appendChild(lr[n]));const o=lr[n];o.textContent=t.length;const s=1===t.length?Vt.singular(r):r;tr(o,new Map([["label",`${t.length} ${s}`]]))}tr(ur,fr);const mr={show(){try{nr.hidden=!1}catch(e){console.error(e)}},hide(){nr.hidden=!0},enable(){ur.removeAttribute("disabled")},addCommand(e,t,n,r){r=r||"";const o="respec-button-"+e.toLowerCase().replace(/\s+/,"-"),s=Ht`<button id="${o}" class="respec-option"> <span class="respec-cmd-icon" aria-hidden="true">${r}</span> ${e}… - </button>`,i=Ht`<li role="menuitem">${s}</li>`;return i.addEventListener("click",t),er.appendChild(i),s},error(e){dr(e,or,"error","ReSpec Errors")},warning(e){dr(e,sr,"warning","ReSpec Warnings")},closeModal(e){rr&&(rr.classList.remove("respec-show-overlay"),rr.classList.add("respec-hide-overlay"),rr.addEventListener("transitionend",()=>{rr.remove(),rr=null})),e&&e.setAttribute("aria-expanded","false"),nr&&(nr.remove(),nr=null,ar.focus())},freshModal(e,t,n){nr&&nr.remove(),rr&&rr.remove(),rr=Ht`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";nr=Ht`<div + </button>`,i=Ht`<li role="menuitem">${s}</li>`;return i.addEventListener("click",t),rr.appendChild(i),s},error(e){hr(e,ar,"error","ReSpec Errors")},warning(e){hr(e,cr,"warning","ReSpec Warnings")},closeModal(e){ir&&(ir.classList.remove("respec-show-overlay"),ir.classList.add("respec-hide-overlay"),ir.addEventListener("transitionend",()=>{ir.remove(),ir=null})),e&&e.setAttribute("aria-expanded","false"),sr&&(sr.remove(),sr=null,ur.focus())},freshModal(e,t,n){sr&&sr.remove(),ir&&ir.remove(),ir=Ht`<div id="respec-overlay" class="removeOnSave"></div>`;const r=n.id+"-modal",o=r+"-heading";sr=Ht`<div id="${r}" class="respec-modal removeOnSave" role="dialog" aria-labelledby="${o}" > - ${tr} + ${or} <h3 id="${o}">${e}</h3> <div class="inside">${t}</div> - </div>`;const s=new Map([["labelledby",o]]);Xn(nr,s),document.body.append(rr,nr),rr.addEventListener("click",()=>this.closeModal(n)),rr.classList.toggle("respec-show-overlay"),nr.hidden=!1,lr(nr)}};function fr(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${en(e.elements.map(hr))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return Bn(`${t}${e.message}${n}${r}${o}`)}function hr(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&pr.closeModal()}),window.respecUI=pr,Ln("error",e=>pr.error(e)),Ln("warn",e=>pr.warning(e));var mr=Object.freeze({__proto__:null,name:"core/ui",ui:pr});var gr=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const br="w3c/group",wr=["wg","wgURI","wgId","wgPatentURI","wgPatentPolicy"];async function yr(e){let t="",n=e;e.includes("/")&&([t,n]=e.split("/",2));const r=new URL(`${n}/${t}`,"https://respec.org/w3c/groups/"),o=await cn(r.href);if(o.ok){const e=await o.json(),{id:t,name:n,URI:r,patentURI:s,patentPolicy:i,type:a}=e;return{wg:n,wgId:t,wgURI:r,wgPatentURI:s,wgPatentPolicy:i,groupType:a}}const s=await o.text(),i=`Failed to fetch group details (HTTP: ${o.status}). ${s}`,a=404===o.status?"See [supported group names](https://respec.org/w3c/groups/) to use with the [`group`](https://respec.org/docs/#group) configuration option.":void 0;_n(i,br,{hint:a})}var vr=Object.freeze({__proto__:null,name:br,run:async function(e){const t=wr.filter(t=>e[t]);if(!e.group){if(t.length){Cn(`Configuration options ${en(wr,e=>`\`${e}\``)} are deprecated.`,br,{hint:"Please use the [`group`](https://respec.org/docs/#group) option instead."})}return}if(t.length){Cn(`Configuration options ${en(t,e=>`\`${e}\``)} are superseded by \`group\` and will be overridden by ReSpec.`,br,{hint:"Please remove them from `respecConfig`."})}const{group:n}=e,r=Array.isArray(n)?await async function(e){const t=await Promise.all(e.map(yr)),n={wg:[],wgId:[],wgURI:[],wgPatentURI:[],wgPatentPolicy:[],groupType:[]};for(const e of t.filter(e=>e))for(const t of Object.keys(n))n[t].push(e[t]);return n}(n):await yr(n);Object.assign(e,r)}});function kr(e){if(!e.key){const t="Found a link without `key` attribute in the configuration. See dev console.";return Cn(t,"core/templates/show-link"),void console.warn(t,e)}return Ht` + </div>`;const s=new Map([["labelledby",o]]);tr(sr,s),document.body.append(ir,sr),ir.addEventListener("click",()=>this.closeModal(n)),ir.classList.toggle("respec-show-overlay"),sr.hidden=!1,pr(sr)}};function gr(e){if("string"==typeof e)return e;const t=e.plugin?`(${e.plugin}): `:"",n=e.hint?" "+e.hint:"",r=Array.isArray(e.elements)?` Occurred at: ${en(e.elements.map(br))}.`:"",o=e.details?`\n\n<details>\n${e.details}\n</details>\n`:"";return Vn(`${t}${e.message}${n}${r}${o}`)}function br(e,t){return`[${t+1}](#${e.id})`}document.addEventListener("keydown",e=>{"Escape"===e.key&&mr.closeModal()}),window.respecUI=mr,Ln("error",e=>mr.error(e)),Ln("warn",e=>mr.warning(e));var wr=Object.freeze({__proto__:null,name:"core/ui",ui:mr});var yr=Object.freeze({__proto__:null,name:"core/location-hash",run:function(){location.hash&&document.respec.ready.then(()=>{let e=decodeURIComponent(location.hash).substr(1);const t=document.getElementById(e),n=/\W/.test(e);if(!t&&n){const t=e.replace(/[\W]+/gim,"-").replace(/^-+/,"").replace(/-+$/,"");document.getElementById(t)&&(e=t)}location.hash="#"+e})}});const vr="w3c/group",kr=["wg","wgURI","wgId","wgPatentURI","wgPatentPolicy"];async function xr(e){let t="",n=e;e.includes("/")&&([t,n]=e.split("/",2));const r=new URL(`${n}/${t}`,"https://respec.org/w3c/groups/"),o=await cn(r.href);if(o.ok){const e=await o.json(),{id:t,name:n,URI:r,patentURI:s,patentPolicy:i,type:a}=e;return{wg:n,wgId:t,wgURI:r,wgPatentURI:s,wgPatentPolicy:i,groupType:a}}const s=await o.text(),i=`Failed to fetch group details (HTTP: ${o.status}). ${s}`,a=404===o.status?"See [supported group names](https://respec.org/w3c/groups/) to use with the [`group`](https://respec.org/docs/#group) configuration option.":void 0;_n(i,vr,{hint:a})}var $r=Object.freeze({__proto__:null,name:vr,run:async function(e){const t=kr.filter(t=>e[t]);if(!e.group){if(t.length){Cn(`Configuration options ${en(kr,e=>`\`${e}\``)} are deprecated.`,vr,{hint:"Please use the [`group`](https://respec.org/docs/#group) option instead."})}return}if(t.length){Cn(`Configuration options ${en(t,e=>`\`${e}\``)} are superseded by \`group\` and will be overridden by ReSpec.`,vr,{hint:"Please remove them from `respecConfig`."})}const{group:n}=e,r=Array.isArray(n)?await async function(e){const t=await Promise.all(e.map(xr)),n={wg:[],wgId:[],wgURI:[],wgPatentURI:[],wgPatentPolicy:[],groupType:[]};for(const e of t.filter(e=>e))for(const t of Object.keys(n))n[t].push(e[t]);return n}(n):await xr(n);Object.assign(e,r)}});function Sr(e){if(!e.key){const t="Found a link without `key` attribute in the configuration. See dev console.";return Cn(t,"core/templates/show-link"),void console.warn(t,e)}return Ht` <dt class="${e.class?e.class:null}">${e.key}</dt> - ${e.data?e.data.map(xr):xr(e)} - `}function xr(e){return Ht`<dd class="${e.class?e.class:null}"> + ${e.data?e.data.map(_r):_r(e)} + `}function _r(e){return Ht`<dd class="${e.class?e.class:null}"> ${e.href?Ht`<a href="${e.href}">${e.value||e.href}</a>`:e.value} - </dd>`}function $r(e){const t=Ht`<a href="${e.url||""}" class="logo"></a>`;if(!e.alt){Cn("Found spec logo without an `alt` attribute.","core/templates/show-logo",{elements:[t]})}const n=Ht`<img + </dd>`}function Cr(e){const t=Ht`<a href="${e.url||""}" class="logo"></a>`;if(!e.alt){Cn("Found spec logo without an `alt` attribute.","core/templates/show-logo",{elements:[t]})}const n=Ht`<img id="${e.id}" alt="${e.alt}" width="${e.width}" height="${e.height}" - />`;return n.src=e.src,t.append(n),t}const Sr={en:{until:e=>Ht` Until ${e} `},es:{until:e=>Ht` Hasta ${e} `},ko:{until:e=>Ht` ${e} 이전 `},ja:{until:e=>Ht` ${e} 以前 `},de:{until:e=>Ht` bis ${e} `},zh:{until:e=>Ht` 直到 ${e} `}},_r=s in Sr?s:"en",Cr=Ht`<svg + />`;return n.src=e.src,t.append(n),t}const Er={en:{until:e=>Ht` Until ${e} `},es:{until:e=>Ht` Hasta ${e} `},ko:{until:e=>Ht` ${e} 이전 `},ja:{until:e=>Ht` ${e} 以前 `},de:{until:e=>Ht` bis ${e} `},zh:{until:e=>Ht` 直到 ${e} `}},Rr=s in Er?s:"en",Tr=Ht`<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg" @@ -107,7 +109,7 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e class="st1" d="M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z" /> -</svg>`;function Er(e=[]){const t=Sr[_r];return e.map((function(e){const r=[e.name],o=[e.company],s=e.w3cid?parseInt(e.w3cid,10):null,i=Ht`<dd +</svg>`;function Ar(e=[]){const t=Er[Rr];return e.map((function(e){const r=[e.name],o=[e.company],s=e.w3cid?parseInt(e.w3cid,10):null,i=Ht`<dd class="p-author h-card vcard" data-editor-id="${s}" ></dd>`,a=document.createDocumentFragment(),c=[];e.mailto?c.push(Ht`<a @@ -115,32 +117,32 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e href="${"mailto:"+e.mailto}" >${r}</a >`):e.url?c.push(Ht`<a class="u-url url p-name fn" href="${e.url}">${r}</a>`):c.push(Ht`<span class="p-name fn">${r}</span>`);e.orcid&&c.push(Ht`<a class="p-name orcid" href="${e.orcid}" - >${Cr.cloneNode(!0)} + >${Tr.cloneNode(!0)} </a>`);e.company&&(e.companyURL?c.push(Ht` (<a class="p-org org h-org h-card" href="${e.companyURL}" >${o}</a >) - `):c.push(Ht` (${o}) `));e.note&&c.push(document.createTextNode(` (${e.note})`));if(e.extras){const t=e.extras.filter(e=>e.name&&e.name.trim()).map(n);for(const e of t)c.push(document.createTextNode(", "),e)}if(e.retiredDate){const n=new Date(e.retiredDate),r="Invalid Date"!==n.toString(),o=document.createElement("time");if(o.textContent=r?sn(n):"Invalid Date",!r){_n("The date is invalid. The expected format is YYYY-MM-DD.","core/templates/show-people",{title:"Invalid date",elements:[o]})}o.dateTime=(l=n,Jt.format(l)),c.push(Ht` - ${t.until(o)} `)}var l;return Ht.bind(a)`${c}`,i.appendChild(a),i}));function n(e){const t=Ht`<span class="${e.class||null}"></span>`;let n=t;return e.href&&(n=Ht`<a href="${e.href}"></a>`,t.appendChild(n)),n.textContent=e.name,t}}const Rr="w3c/templates/headers",Tr="https://creativecommons.org/licenses/by/4.0/legalcode",Ar="https://www.w3.org/Consortium/Legal/copyright-documents",Lr="https://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer",Pr="https://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks",Ir=rn({en:{author:"Author:",authors:"Authors:",editor:"Editor:",editors:"Editors:",former_editor:"Former editor:",former_editors:"Former editors:",latest_editors_draft:"Latest editor's draft:",latest_published_version:"Latest published version:",edited_in_place:"edited in place",this_version:"This version:",test_suite:"Test suite:",implementation_report:"Implementation report:",prev_editor_draft:"Previous editor's draft:",prev_version:"Previous version:",prev_recommendation:"Previous Recommendation:",latest_recommendation:"Latest Recommendation:"},ko:{author:"저자:",authors:"저자:",editor:"편집자:",editors:"편집자:",former_editor:"이전 편집자:",former_editors:"이전 편집자:",latest_editors_draft:"최신 편집 초안:",latest_published_version:"최신 버전:",this_version:"현재 버전:"},zh:{author:"作者:",authors:"作者:",editor:"编辑:",editors:"编辑:",former_editor:"原编辑:",former_editors:"原编辑:",latest_editors_draft:"最新编辑草稿:",latest_published_version:"最新发布版本:",this_version:"本版本:",test_suite:"测试套件:",implementation_report:"实现报告:",prev_editor_draft:"上一版编辑草稿:",prev_version:"上一版:",prev_recommendation:"上一版正式推荐标准:",latest_recommendation:"最新发布的正式推荐标准:"},ja:{author:"著者:",authors:"著者:",editor:"編者:",editors:"編者:",former_editor:"以前の版の編者:",former_editors:"以前の版の編者:",latest_editors_draft:"最新の編集用草案:",latest_published_version:"最新バージョン:",this_version:"このバージョン:",test_suite:"テストスイート:",implementation_report:"実装レポート:"},nl:{author:"Auteur:",authors:"Auteurs:",editor:"Redacteur:",editors:"Redacteurs:",latest_editors_draft:"Laatste werkversie:",latest_published_version:"Laatst gepubliceerde versie:",this_version:"Deze versie:"},es:{author:"Autor:",authors:"Autores:",editor:"Editor:",editors:"Editores:",latest_editors_draft:"Borrador de editor mas reciente:",latest_published_version:"Versión publicada mas reciente:",this_version:"Ésta versión:"},de:{author:"Autor/in:",authors:"Autor/innen:",editor:"Redaktion:",editors:"Redaktion:",former_editor:"Frühere Mitwirkende:",former_editors:"Frühere Mitwirkende:",latest_editors_draft:"Letzter Entwurf:",latest_published_version:"Letzte publizierte Fassung:",this_version:"Diese Fassung:"}});var Dr=(e,t)=>Ht`<div class="head"> - ${e.logos.map($r)} ${document.querySelector("h1#title")} + `):c.push(Ht` (${o}) `));e.note&&c.push(document.createTextNode(` (${e.note})`));if(e.extras){const t=e.extras.filter(e=>e.name&&e.name.trim()).map(n);for(const e of t)c.push(document.createTextNode(", "),e)}if(e.retiredDate){const n=new Date(e.retiredDate),r="Invalid Date"!==n.toString(),o=document.createElement("time");if(o.textContent=r?sn(n):"Invalid Date",!r){_n("The date is invalid. The expected format is YYYY-MM-DD.","core/templates/show-people",{title:"Invalid date",elements:[o]})}o.dateTime=(l=n,Jt.format(l)),c.push(Ht` - ${t.until(o)} `)}var l;return Ht.bind(a)`${c}`,i.appendChild(a),i}));function n(e){const t=Ht`<span class="${e.class||null}"></span>`;let n=t;return e.href&&(n=Ht`<a href="${e.href}"></a>`,t.appendChild(n)),n.textContent=e.name,t}}const Lr="w3c/templates/headers",Pr="https://creativecommons.org/licenses/by/4.0/legalcode",Ir="https://www.w3.org/Consortium/Legal/copyright-documents",Dr="https://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer",Nr="https://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks",Or=rn({en:{author:"Author:",authors:"Authors:",editor:"Editor:",editors:"Editors:",former_editor:"Former editor:",former_editors:"Former editors:",latest_editors_draft:"Latest editor's draft:",latest_published_version:"Latest published version:",edited_in_place:"edited in place",this_version:"This version:",test_suite:"Test suite:",implementation_report:"Implementation report:",prev_editor_draft:"Previous editor's draft:",prev_version:"Previous version:",prev_recommendation:"Previous Recommendation:",latest_recommendation:"Latest Recommendation:"},ko:{author:"저자:",authors:"저자:",editor:"편집자:",editors:"편집자:",former_editor:"이전 편집자:",former_editors:"이전 편집자:",latest_editors_draft:"최신 편집 초안:",latest_published_version:"최신 버전:",this_version:"현재 버전:"},zh:{author:"作者:",authors:"作者:",editor:"编辑:",editors:"编辑:",former_editor:"原编辑:",former_editors:"原编辑:",latest_editors_draft:"最新编辑草稿:",latest_published_version:"最新发布版本:",this_version:"本版本:",test_suite:"测试套件:",implementation_report:"实现报告:",prev_editor_draft:"上一版编辑草稿:",prev_version:"上一版:",prev_recommendation:"上一版正式推荐标准:",latest_recommendation:"最新发布的正式推荐标准:"},ja:{author:"著者:",authors:"著者:",editor:"編者:",editors:"編者:",former_editor:"以前の版の編者:",former_editors:"以前の版の編者:",latest_editors_draft:"最新の編集用草案:",latest_published_version:"最新バージョン:",this_version:"このバージョン:",test_suite:"テストスイート:",implementation_report:"実装レポート:"},nl:{author:"Auteur:",authors:"Auteurs:",editor:"Redacteur:",editors:"Redacteurs:",latest_editors_draft:"Laatste werkversie:",latest_published_version:"Laatst gepubliceerde versie:",this_version:"Deze versie:"},es:{author:"Autor:",authors:"Autores:",editor:"Editor:",editors:"Editores:",latest_editors_draft:"Borrador de editor mas reciente:",latest_published_version:"Versión publicada mas reciente:",this_version:"Ésta versión:"},de:{author:"Autor/in:",authors:"Autor/innen:",editor:"Redaktion:",editors:"Redaktion:",former_editor:"Frühere Mitwirkende:",former_editors:"Frühere Mitwirkende:",latest_editors_draft:"Letzter Entwurf:",latest_published_version:"Letzte publizierte Fassung:",this_version:"Diese Fassung:"}});var jr=(e,t)=>Ht`<div class="head"> + ${e.logos.map(Cr)} ${document.querySelector("h1#title")} ${function(e){let t=document.querySelector("h2#subtitle");return t&&t.parentElement?(t.remove(),e.subtitle=t.textContent.trim()):e.subtitle&&(t=document.createElement("h2"),t.textContent=e.subtitle,t.id="subtitle"),t&&t.classList.add("subtitle"),t}(e)} <h2> ${e.prependW3C?"W3C ":""}${e.isCR?""+e.longStatus:""+e.textStatus} <time class="dt-published" datetime="${e.dashDate}" >${e.publishHumanDate}</time - >${e.modificationDate?Ht`, ${Ir.edited_in_place}${" "} + >${e.modificationDate?Ht`, ${Or.edited_in_place}${" "} ${function(e){const t=sn(new Date(e));return Ht`<time class="dt-modified" datetime="${e}" >${t}</time >`}(e.modificationDate)}`:""} </h2> <dl> ${e.isNoTrack?"":Ht` - <dt>${Ir.this_version}</dt> + <dt>${Or.this_version}</dt> <dd> <a class="u-url" href="${e.thisVersion}" >${e.thisVersion}</a > </dd> - <dt>${Ir.latest_published_version}</dt> + <dt>${Or.latest_published_version}</dt> <dd> ${e.latestVersion?Ht`<a href="${e.latestVersion}" >${e.latestVersion}</a @@ -148,15 +150,15 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e </dd> `} ${e.edDraftURI?Ht` - <dt>${Ir.latest_editors_draft}</dt> + <dt>${Or.latest_editors_draft}</dt> <dd><a href="${e.edDraftURI}">${e.edDraftURI}</a></dd> `:""} ${e.testSuiteURI?Ht` - <dt>${Ir.test_suite}</dt> + <dt>${Or.test_suite}</dt> <dd><a href="${e.testSuiteURI}">${e.testSuiteURI}</a></dd> `:""} ${e.implementationReportURI?Ht` - <dt>${Ir.implementation_report}</dt> + <dt>${Or.implementation_report}</dt> <dd> <a href="${e.implementationReportURI}" >${e.implementationReportURI}</a @@ -164,33 +166,33 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e </dd> `:""} ${e.isED&&e.prevED?Ht` - <dt>${Ir.prev_editor_draft}</dt> + <dt>${Or.prev_editor_draft}</dt> <dd><a href="${e.prevED}">${e.prevED}</a></dd> `:""} ${e.showPreviousVersion?Ht` - <dt>${Ir.prev_version}</dt> + <dt>${Or.prev_version}</dt> <dd><a href="${e.prevVersion}">${e.prevVersion}</a></dd> `:""} ${e.prevRecURI?e.isRec?Ht` - <dt>${Ir.prev_recommendation}</dt> + <dt>${Or.prev_recommendation}</dt> <dd><a href="${e.prevRecURI}">${e.prevRecURI}</a></dd> `:Ht` - <dt>${Ir.latest_recommendation}</dt> + <dt>${Or.latest_recommendation}</dt> <dd><a href="${e.prevRecURI}">${e.prevRecURI}</a></dd> `:""} - <dt>${e.multipleEditors?Ir.editors:Ir.editor}</dt> - ${Er(e.editors)} + <dt>${e.multipleEditors?Or.editors:Or.editor}</dt> + ${Ar(e.editors)} ${Array.isArray(e.formerEditors)&&e.formerEditors.length>0?Ht` <dt> - ${e.multipleFormerEditors?Ir.former_editors:Ir.former_editor} + ${e.multipleFormerEditors?Or.former_editors:Or.former_editor} </dt> - ${Er(e.formerEditors)} + ${Ar(e.formerEditors)} `:""} ${e.authors?Ht` - <dt>${e.multipleAuthors?Ir.authors:Ir.author}</dt> - ${Er(e.authors)} + <dt>${e.multipleAuthors?Or.authors:Or.author}</dt> + ${Ar(e.authors)} `:""} - ${e.otherLinks?e.otherLinks.map(kr):""} + ${e.otherLinks?e.otherLinks.map(Sr):""} </dl> ${e.errata?Ht`<p> Please check the @@ -209,9 +211,9 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e ${t.multipleAlternates?"This document is also available in these non-normative formats:":"This document is also available in this non-normative format:"} ${t.alternatesHTML} </p>`:""} - ${function(e){const t=document.querySelector(".copyright");if(t)return t.remove(),t;if(e.hasOwnProperty("overrideCopyright")){return Cn("The `overrideCopyright` configuration option is deprecated.",Rr,{hint:'Please add a `<p class="copyright">` element directly to your document instead'}),Ht`${[e.overrideCopyright]}`}if(e.isUnofficial&&e.licenseInfo)return Ht`<p class="copyright"> + ${function(e){const t=document.querySelector(".copyright");if(t)return t.remove(),t;if(e.hasOwnProperty("overrideCopyright")){return Cn("The `overrideCopyright` configuration option is deprecated.",Lr,{hint:'Please add a `<p class="copyright">` element directly to your document instead'}),Ht`${[e.overrideCopyright]}`}if(e.isUnofficial&&e.licenseInfo)return Ht`<p class="copyright"> This document is licensed under a - ${Nr(e.licenseInfo.name,e.licenseInfo.url,"subfoot")} + ${zr(e.licenseInfo.name,e.licenseInfo.url,"subfoot")} (${e.licenseInfo.short}). </p>`;return function(e){return Ht`<p class="copyright"> <a href="https://www.w3.org/Consortium/Legal/ipr-notice#Copyright" @@ -233,16 +235,16 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e >, <a href="https://www.keio.ac.jp/">Keio</a>, <a href="https://ev.buaa.edu.cn/">Beihang</a>). ${function(e){if(!e.isCCBY)return;return Ht` Some Rights Reserved: this document is dual-licensed, - ${Nr("CC-BY",Tr)} and - ${Nr("W3C Document License",Ar)}. + ${zr("CC-BY",Pr)} and + ${zr("W3C Document License",Ir)}. `}(e)} - W3C <a href="${Lr}">liability</a>, - <a href="${Pr}">trademark</a> and ${function(e){if(e.isCCBY)return Nr("document use","https://www.w3.org/Consortium/Legal/2013/copyright-documents-dual.html");if(e.isW3CSoftAndDocLicense)return Nr("permissive document license","https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document");return Nr("document use",Ar)}(e)} rules + W3C <a href="${Dr}">liability</a>, + <a href="${Nr}">trademark</a> and ${function(e){if(e.isCCBY)return zr("document use","https://www.w3.org/Consortium/Legal/2013/copyright-documents-dual.html");if(e.isW3CSoftAndDocLicense)return zr("permissive document license","https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document");return zr("document use",Ir)}(e)} rules apply. </p>`}(e)}(e)} <hr title="Separator for header" /> - </div>`;function Nr(e,t,n){return Ht`<a rel="license" href="${t}" class="${n}">${e}</a>`}var Or=(e,t)=>{const n=document.querySelector(".copyright");n&&n.remove();const r=document.querySelector("h1#title"),o=r.cloneNode(!0);return Ht`<div class="head"> - ${e.logos.map($r)} ${r} + </div>`;function zr(e,t,n){return Ht`<a rel="license" href="${t}" class="${n}">${e}</a>`}var Wr=(e,t)=>{const n=document.querySelector(".copyright");n&&n.remove();const r=document.querySelector("h1#title"),o=r.cloneNode(!0);return Ht`<div class="head"> + ${e.logos.map(Cr)} ${r} ${e.subtitle?Ht`<h2 id="subtitle">${e.subtitle}</h2>`:""} <h2> ${e.longStatus} @@ -252,7 +254,7 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e </h2> <dl> ${e.thisVersion?Ht` - <dt>${Ir.this_version}</dt> + <dt>${Or.this_version}</dt> <dd> <a class="u-url" href="${e.thisVersion}" >${e.thisVersion}</a @@ -260,13 +262,13 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e </dd> `:""} ${e.latestVersion?Ht` - <dt>${Ir.latest_published_version}</dt> + <dt>${Or.latest_published_version}</dt> <dd> <a href="${e.latestVersion}">${e.latestVersion}</a> </dd> `:""} ${e.edDraftURI?Ht` - <dt>${Ir.latest_editors_draft}</dt> + <dt>${Or.latest_editors_draft}</dt> <dd><a href="${e.edDraftURI}">${e.edDraftURI}</a></dd> `:""} ${e.testSuiteURI?Ht` @@ -291,19 +293,19 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e <dd><a href="${e.prevED}">${e.prevED}</a></dd> `:""} `} - <dt>${e.multipleEditors?Ir.editors:Ir.editor}</dt> - ${Er(e.editors)} + <dt>${e.multipleEditors?Or.editors:Or.editor}</dt> + ${Ar(e.editors)} ${Array.isArray(e.formerEditors)&&e.formerEditors.length>0?Ht` <dt> - ${e.multipleFormerEditors?Ir.former_editors:Ir.former_editor} + ${e.multipleFormerEditors?Or.former_editors:Or.former_editor} </dt> - ${Er(e.formerEditors)} + ${Ar(e.formerEditors)} `:""} ${e.authors?Ht` - <dt>${e.multipleAuthors?Ir.authors:Ir.author}</dt> - ${Er(e.authors)} + <dt>${e.multipleAuthors?Or.authors:Or.author}</dt> + ${Ar(e.authors)} `:""} - ${e.otherLinks?e.otherLinks.map(kr):""} + ${e.otherLinks?e.otherLinks.map(Sr):""} </dl> ${e.alternateFormats?Ht`<p> ${t.multipleAlternates?"This document is also available in these non-normative formats:":"This document is also available in this non-normative format:"} @@ -340,9 +342,9 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e `} </p>`} <hr title="Separator for header" /> - </div>`};const jr=rn({en:{sotd:"Status of This Document"},ko:{sotd:"현재 문서의 상태"},zh:{sotd:"关于本文档"},ja:{sotd:"この文書の位置付け"},nl:{sotd:"Status van dit document"},es:{sotd:"Estado de este Document"},de:{sotd:"Status dieses Dokuments"}});var zr=(e,t)=>Ht` - <h2>${jr.sotd}</h2> - ${e.isPreview?Wr(e):""} + </div>`};const Mr=rn({en:{sotd:"Status of This Document"},ko:{sotd:"현재 문서의 상태"},zh:{sotd:"关于本文档"},ja:{sotd:"この文書の位置付け"},nl:{sotd:"Status van dit document"},es:{sotd:"Estado de este Document"},de:{sotd:"Status dieses Dokuments"}});var Ur=(e,t)=>Ht` + <h2>${Mr.sotd}</h2> + ${e.isPreview?Fr(e):""} ${e.isUnofficial?function(e){const{additionalContent:t}=e;return Ht` <p> This document is a draft of a potential specification. It has no official @@ -383,7 +385,7 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e >list of acknowledged W3C Member Submissions</a >. </p>`}(e):e.isTeamSubmission?function(e,t){return Ht` - ${Mr(e,t)} + ${qr(e,t)} <p> Please consult the complete <a href="https://www.w3.org/TeamSubmission/">list of Team Submissions</a>. @@ -406,7 +408,7 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e This document was published by ${e.wgHTML} as ${e.anOrA} ${e.longStatus}. ${t} ${e.notYetRec?"This document is intended to become a W3C Recommendation.":""} - </p>`}(e)} ${Ur(e,t)} + </p>`}(e)} ${Br(e,t)} `} ${e.sotdAfterWGinfo?t.additionalContent:""} ${e.isRec?function({updateableRec:e,revisionTypes:t=[],humanRevisedRecEnd:n}){let r="";t.includes("addition")&&(r="additions");t.includes("correction")&&!r&&(r="corrections");return Ht`<p> @@ -512,7 +514,7 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e `} `} ${t.additionalSections} - `;function Wr(e){const{prUrl:t,prNumber:n,edDraftURI:r}=e;return Ht`<details class="annoying-warning" open=""> + `;function Fr(e){const{prUrl:t,prNumber:n,edDraftURI:r}=e;return Ht`<details class="annoying-warning" open=""> <summary> This is a preview${t&&n?Ht` @@ -528,13 +530,13 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e <a href="${r}">${r}</a> for the Editor's draft. `:""} </p> - </details>`}function Mr(e,t){const{mailToWGPublicListWithSubject:n,mailToWGPublicListSubscription:r}=t,{wgPublicList:o,subjectPrefix:s}=e;return Ht`<p> + </details>`}function qr(e,t){const{mailToWGPublicListWithSubject:n,mailToWGPublicListSubscription:r}=t,{wgPublicList:o,subjectPrefix:s}=e;return Ht`<p> If you wish to make comments regarding this document, please send them to <a href="${n}">${o}@w3.org</a> (<a href="${r}">subscribe</a>, <a href="${`https://lists.w3.org/Archives/Public/${o}/`}">archives</a>)${s?Ht` with <code>${s}</code> at the start of your email's subject`:""}. - </p>`}function Ur(e,t){if(e.github||e.wgPublicList)return Ht`<p> + </p>`}function Br(e,t){if(e.github||e.wgPublicList)return Ht`<p> ${e.github?Ht` <a href="${e.issueBase}">GitHub Issues</a> are preferred for discussion of this specification. @@ -552,9 +554,9 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e >)${e.subjectPrefix?Ht` with <code>${e.subjectPrefix}</code> at the start of your email's subject`:""}. `:""} - </p>`}var Fr=(e,t)=>Ht` - <h2>${jr.sotd}</h2> - ${e.isPreview?Wr(e):""} + </p>`}var Hr=(e,t)=>Ht` + <h2>${Mr.sotd}</h2> + ${e.isPreview?Fr(e):""} <p> This specification was published by the <a href="${e.wgURI}">${e.wg}</a>. It is not a W3C Standard nor is it @@ -578,20 +580,20 @@ window.respecVersion="26.4.1",function(){"use strict";window.addEventListener("e >. </p> ${e.sotdAfterWGinfo?"":t.additionalContent} - ${!e.github&&e.wgPublicList?Mr(e,t):""} - ${e.github?Ur(e,t):""} + ${!e.github&&e.wgPublicList?qr(e,t):""} + ${e.github?Br(e,t):""} ${e.sotdAfterWGinfo?t.additionalContent:""} ${t.additionalSections} - `;const qr="w3c/headers",Br=new Intl.DateTimeFormat(["en-AU"],{timeZone:"UTC",year:"numeric",month:"long",day:"2-digit"}),Hr={LS:"WD",LD:"WD",FPWD:"WD",LC:"WD",FPLC:"WD","FPWD-NOTE":"NOTE","WD-NOTE":"WD","LC-NOTE":"LC","IG-NOTE":"NOTE","WG-NOTE":"NOTE"},Gr={NOTE:"w3p:NOTE",WD:"w3p:WD",LC:"w3p:LastCall",CR:"w3p:CR",CRD:"w3p:CRD",PR:"w3p:PR",REC:"w3p:REC",PER:"w3p:PER",RSCND:"w3p:RSCND"},Vr={NOTE:"Working Group Note","WG-NOTE":"Working Group Note","CG-NOTE":"Co-ordination Group Note","IG-NOTE":"Interest Group Note","Member-SUBM":"Member Submission","Team-SUBM":"Team Submission",MO:"Member-Only Document",ED:"Editor's Draft",LS:"Living Standard",LD:"Living Document",FPWD:"First Public Working Draft",WD:"Working Draft","FPWD-NOTE":"Working Group Note","WD-NOTE":"Working Draft","LC-NOTE":"Working Draft",FPLC:"First Public and Last Call Working Draft",LC:"Last Call Working Draft",CR:"Candidate Recommendation",CRD:"Candidate Recommendation",PR:"Proposed Recommendation",PER:"Proposed Edited Recommendation",REC:"Recommendation",RSCND:"Rescinded Recommendation",unofficial:"Unofficial Draft",base:"Document",finding:"TAG Finding","draft-finding":"Draft TAG Finding","CG-DRAFT":"Draft Community Group Report","CG-FINAL":"Final Community Group Report","BG-DRAFT":"Draft Business Group Report","BG-FINAL":"Final Business Group Report"},Zr={...Vr,CR:"Candidate Recommendation Snapshot",CRD:"Candidate Recommendation Draft","FPWD-NOTE":"First Public Working Group Note","LC-NOTE":"Last Call Working Draft"},Yr=["FPWD","WD"],Jr=["FPLC","LC","CR","CRD","PR","PER","REC"],Kr=["CG-DRAFT","CG-FINAL"],Xr=["BG-DRAFT","BG-FINAL"],Qr=[...Kr,...Xr],eo=["base",...Kr,...Xr,"draft-finding","finding","MO","unofficial"],to=["ED","IG-NOTE"],no=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["w3c-software",{name:"W3C Software Notice and License",short:"W3C Software",url:"https://www.w3.org/Consortium/Legal/2002/copyright-software-20021231"}],["w3c-software-doc",{name:"W3C Software and Document Notice and License",short:"W3C Software and Document",url:"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}]]),ro=["PP2017","PP2020"],oo=Object.freeze({id:"",alt:"",href:"",src:"",height:"48",width:"72"});function so(e,t,n=new Date){const r=e[t]?new Date(e[t]):new Date(n);if(Number.isFinite(r.valueOf())){const e=Jt.format(r);return new Date(e)}return _n(`[\`${t}\`](https://github.com/w3c/respec/wiki/${t}) is not a valid date: "${e[t]}". Expected format 'YYYY-MM-DD'.`,qr),new Date(Jt.format(new Date))}function io(e,{isTagFinding:t=!1}){const n=e.cloneNode(!0),r=document.createDocumentFragment();for(;n.hasChildNodes()&&(n.firstChild.nodeType!==Node.ELEMENT_NODE||"section"!==n.firstChild.localName);)r.appendChild(n.firstChild);if(t&&!r.hasChildNodes()){Cn("ReSpec does not support automated SotD generation for TAG findings.",qr,{hint:"Please add the prerequisite content in the 'sotd' section."})}return{additionalContent:r,additionalSections:n.childNodes}}var ao=Object.freeze({__proto__:null,name:qr,cgStatus:Kr,bgStatus:Xr,cgbgStatus:Qr,run:function(e){if(!e.specStatus){const e=`Missing required configuration: ${En("specStatus")}.`,t=`Please select an appropriate status from ${En("specStatus")} based on your W3C group. If in doubt, use \`"unofficial"\`.`;_n(e,qr,{hint:t})}if(e.isUnofficial="unofficial"===e.specStatus,e.isUnofficial&&!Array.isArray(e.logos)&&(e.logos=[]),e.isUnofficial){if(e.license&&!no.has(e.license)){const t=`The ${En("license")} configuration option has an invalid value: "\`${e.license}\`". Defaulting to "cc-by".`,n=[...no.keys()].map(e=>`\`"${e}"\``).join(", "),r=`Please explicitly set ${En("license")} to one of: ${n}.`;_n(t,qr,{hint:r}),e.license="cc-by"}void 0===e.license&&(e.license="cc-by")}if(e.isCCBY="cc-by"===e.license,e.isW3CSoftAndDocLicense="w3c-software-doc"===e.license,!e.isUnofficial&&["cc-by"].includes(e.license)){const t=`You cannot use license "\`${e.license}\`" with W3C Specs.`,n=`Please set ${En("license")} to "w3c-software-doc" instead.`;_n(t,qr,{hint:n})}if(e.licenseInfo=no.get(e.license),e.isCGBG=Qr.includes(e.specStatus),e.isCGFinal=e.isCGBG&&e.specStatus.endsWith("G-FINAL"),e.isBasic="base"===e.specStatus,e.isRegular=!e.isCGBG&&!e.isBasic,e.isRegular&&!e.shortName){_n("Missing required configuration: `shortName`",qr)}if(e.testSuiteURI){const t=new URL(e.testSuiteURI,location.href),{host:n,pathname:r}=t;if("github.com"===n&&r.startsWith("/w3c/web-platform-tests/")){const t="Web Platform Tests have moved to a new Github Organization at https://github.com/web-platform-tests. ",n=`Please update your ${En("testSuiteURI")} to point to the new tests repository (e.g., https://github.com/web-platform-tests/wpt/tree/master/${e.shortName} ).`;Cn(t,qr,{hint:n})}}if(e.subtitle||(e.subtitle=""),e.publishDate=so(e,"publishDate",document.lastModified),e.publishYear=e.publishDate.getUTCFullYear(),e.publishHumanDate=Br.format(e.publishDate),e.isNoTrack=eo.includes(e.specStatus),e.isRecTrack=!e.noRecTrack&&Jr.concat(Yr).includes(e.specStatus),e.isMemberSubmission="Member-SUBM"===e.specStatus,e.isMemberSubmission){const t={alt:"W3C Member Submission",href:"https://www.w3.org/Submission/",src:"https://www.w3.org/Icons/member_subm-v.svg",width:"211"};e.logos.push({...oo,...t})}if(e.isTeamSubmission="Team-SUBM"===e.specStatus,e.isTeamSubmission){const t={alt:"W3C Team Submission",href:"https://www.w3.org/TeamSubmission/",src:"https://www.w3.org/Icons/team_subm-v.svg",width:"211"};e.logos.push({...oo,...t})}if(e.isSubmission=e.isMemberSubmission||e.isTeamSubmission,e.anOrA=to.includes(e.specStatus)?"an":"a",e.isTagFinding="finding"===e.specStatus||"draft-finding"===e.specStatus,e.isRecTrack&&!function(e){return e.github||e.otherLinks&&e.otherLinks.find(e=>e.data.find(e=>e.href&&e.href.toString().match(/^https:\/\/github\.com\/.*\/issues/)))}(e)){_n("Rec-track documents must link to Github issues from their head.",qr,{hint:"Please use the [`github`](https://respec.org/docs/#github) configuration option."})}if(!e.edDraftURI&&(e.edDraftURI="","ED"===e.specStatus)){Cn("Editor's Drafts should set edDraftURI.",qr)}e.maturity=Hr[e.specStatus]?Hr[e.specStatus]:e.specStatus;let t="TR";"Member-SUBM"===e.specStatus?t="Submission":"Team-SUBM"===e.specStatus&&(t="TeamSubmission"),e.isRegular&&(e.thisVersion=`https://www.w3.org/${t}/${e.publishDate.getUTCFullYear()}/${e.maturity}-${e.shortName}-${on(e.publishDate)}/`),"ED"===e.specStatus&&(e.thisVersion=e.edDraftURI);const n="ED"===e.specStatus&&null===e.latestVersion;if(e.isRegular&&!n&&(e.latestVersion=`https://www.w3.org/${t}/${e.shortName}/`),e.isTagFinding&&(e.latestVersion="https://www.w3.org/2001/tag/doc/"+e.shortName,e.thisVersion=`${e.latestVersion}-${Jt.format(e.publishDate)}`),e.previousPublishDate){if(!e.previousMaturity&&!e.isTagFinding){_n("`previousPublishDate` is set, but not `previousMaturity`.",qr)}e.previousPublishDate=so(e,"previousPublishDate");const t=Hr[e.previousMaturity]?Hr[e.previousMaturity]:e.previousMaturity;e.isTagFinding?e.prevVersion=`${e.latestVersion}-${Jt.format(e.previousPublishDate)}`:e.isCGBG?e.prevVersion=e.prevVersion||"":e.isBasic?e.prevVersion="":e.prevVersion=`https://www.w3.org/TR/${e.previousPublishDate.getUTCFullYear()}/${t}-${e.shortName}-${on(e.previousPublishDate)}/`}else{if(!(e.specStatus.endsWith("NOTE")||"FPWD"===e.specStatus||"FPLC"===e.specStatus||"ED"===e.specStatus||e.noRecTrack||e.isNoTrack||e.isSubmission)){_n("Document on track but no previous version.",qr,{hint:"Add [`previousMaturity`](https://respec.org/docs/#previousMaturity) and [`previousPublishDate`](https://respec.org/docs/#previousPublishDate) to ReSpec's config."})}e.prevVersion||(e.prevVersion="")}e.prevRecShortname&&!e.prevRecURI&&(e.prevRecURI="https://www.w3.org/TR/"+e.prevRecShortname);const r=function(e){if(!e.name){_n("All authors and editors must have a `name` property.",qr,{hint:"See [Person](https://respec.org/docs/#person) configuration for available options."})}if(e.orcid)try{e.orcid=function(e){const t=new URL(e,"https://orcid.org/");if("https://orcid.org"!==t.origin)throw new Error(`The origin should be "https://orcid.org", not "${t.origin}".`);const n=t.pathname.slice(1).replace(/\/$/,"");if(!/^\d{4}-\d{4}-\d{4}-\d{3}(\d|X)$/.test(n))throw new Error(`ORCIDs have the format "1234-1234-1234-1234", not "${n}"`);const r=n[n.length-1],o=(12-n.split("").slice(0,-1).filter(e=>/\d/.test(e)).map(Number).reduce((e,t)=>2*(e+t),0)%11)%11,s=10===o?"X":String(o);if(r!==s)throw new Error(`"${n}" has an invalid checksum.`);return t.href}(e.orcid)}catch(t){_n(`"${e.orcid}" is not an ORCID. ${t.message}`,qr),delete e.orcid}};if(e.formerEditors||(e.formerEditors=[]),e.editors){e.editors.forEach(r);for(let t=0;t<e.editors.length;t++){const n=e.editors[t];"retiredDate"in n&&(e.formerEditors.push(n),e.editors.splice(t--,1))}}if(!e.editors||0===e.editors.length){_n("At least one editor is required",qr)}if(e.formerEditors.length&&e.formerEditors.forEach(r),e.authors&&e.authors.forEach(r),e.multipleEditors=e.editors&&e.editors.length>1,e.multipleFormerEditors=e.formerEditors.length>1,e.multipleAuthors=e.authors&&e.authors.length>1,(e.alternateFormats||[]).forEach(e=>{if(!e.uri||!e.label){_n("All alternate formats must have a uri and a label.",qr)}}),e.copyrightStart&&e.copyrightStart==e.publishYear&&(e.copyrightStart=""),e.longStatus=Zr[e.specStatus],e.textStatus=Vr[e.specStatus],Gr[e.specStatus]&&(e.rdfStatus=Gr[e.specStatus]),e.showThisVersion=!e.isNoTrack||e.isTagFinding,e.showPreviousVersion="FPWD"!==e.specStatus&&"FPLC"!==e.specStatus&&"ED"!==e.specStatus&&!e.isNoTrack&&!e.isSubmission,e.specStatus.endsWith("NOTE")&&!e.prevVersion&&(e.showPreviousVersion=!1),e.isTagFinding&&(e.showPreviousVersion=!!e.previousPublishDate),e.notYetRec=e.isRecTrack&&"REC"!==e.specStatus,e.isRec=e.isRecTrack&&"REC"===e.specStatus,e.isRec&&!e.errata){_n("Recommendations must have an errata link.",qr,{hint:"Add an [`errata`](https://respec.org/docs/#errata) URL to your respecConfig."})}e.prependW3C=!e.isUnofficial,e.isED="ED"===e.specStatus,e.isCR="CR"===e.specStatus||"CRD"===e.specStatus,e.isCRDraft="CRD"===e.specStatus,e.isPR="PR"===e.specStatus,e.isPER="PER"===e.specStatus,e.isMO="MO"===e.specStatus,e.isNote=["FPWD-NOTE","WG-NOTE"].includes(e.specStatus),e.isIGNote="IG-NOTE"===e.specStatus,e.dashDate=Jt.format(e.publishDate),e.publishISODate=e.publishDate.toISOString(),e.shortISODate=Jt.format(e.publishDate),function(e){if(!e.hasOwnProperty("wgPatentPolicy"))return;const t=new Set([].concat(e.wgPatentPolicy));if(t.size&&![...t].every(e=>ro.includes(e))){const t=`Invalid [\`wgPatentPolicy\`](https://respec.org/docs#wgPatentPolicy) value: "${e.wgPatentPolicy}".`,n=`Please use one of: ${ro.map(e=>`\`${e}\``).join(", ")} .`;_n(t,qr,{hint:n})}if(1!==t.size){const e="When collaborating across multiple groups, they must use the same patent policy.",n=`Please check the patent policies of each group. The patent policies were: ${[...t].join(", ")}.`;_n(e,qr,{hint:n})}e.wgPatentPolicy=[...t][0]}(e),e.hasOwnProperty("wgPatentURI")&&!Array.isArray(e.wgPatentURI)?Object.defineProperty(e,"wgId",{get(){const e=this.wgPatentURI.split("/"),t=e.findIndex(e=>"pp-impl"===e)+1;return e[t]||""}}):e.wgId=e.wgId?e.wgId:"";const o={get multipleAlternates(){return e.alternateFormats&&e.alternateFormats.length>1},get alternatesHTML(){return e.alternateFormats&&un(e.alternateFormats,e=>{const t=e.hasOwnProperty("lang")&&e.lang?e.lang:null,n=e.hasOwnProperty("type")&&e.type?e.type:null;return Ht`<a + `;const Gr="w3c/headers",Vr=new Intl.DateTimeFormat(["en-AU"],{timeZone:"UTC",year:"numeric",month:"long",day:"2-digit"}),Zr={LS:"WD",LD:"WD",FPWD:"WD",LC:"WD",FPLC:"WD","FPWD-NOTE":"NOTE","WD-NOTE":"WD","LC-NOTE":"LC","IG-NOTE":"NOTE","WG-NOTE":"NOTE"},Yr={NOTE:"w3p:NOTE",WD:"w3p:WD",LC:"w3p:LastCall",CR:"w3p:CR",CRD:"w3p:CRD",PR:"w3p:PR",REC:"w3p:REC",PER:"w3p:PER",RSCND:"w3p:RSCND"},Jr={NOTE:"Working Group Note","WG-NOTE":"Working Group Note","CG-NOTE":"Co-ordination Group Note","IG-NOTE":"Interest Group Note","Member-SUBM":"Member Submission","Team-SUBM":"Team Submission",MO:"Member-Only Document",ED:"Editor's Draft",LS:"Living Standard",LD:"Living Document",FPWD:"First Public Working Draft",WD:"Working Draft","FPWD-NOTE":"Working Group Note","WD-NOTE":"Working Draft","LC-NOTE":"Working Draft",FPLC:"First Public and Last Call Working Draft",LC:"Last Call Working Draft",CR:"Candidate Recommendation",CRD:"Candidate Recommendation",PR:"Proposed Recommendation",PER:"Proposed Edited Recommendation",REC:"Recommendation",RSCND:"Rescinded Recommendation",unofficial:"Unofficial Draft",base:"Document",finding:"TAG Finding","draft-finding":"Draft TAG Finding","CG-DRAFT":"Draft Community Group Report","CG-FINAL":"Final Community Group Report","BG-DRAFT":"Draft Business Group Report","BG-FINAL":"Final Business Group Report"},Kr={...Jr,CR:"Candidate Recommendation Snapshot",CRD:"Candidate Recommendation Draft","FPWD-NOTE":"First Public Working Group Note","LC-NOTE":"Last Call Working Draft"},Xr=["FPWD","WD"],Qr=["FPLC","LC","CR","CRD","PR","PER","REC"],eo=["CG-DRAFT","CG-FINAL"],to=["BG-DRAFT","BG-FINAL"],no=[...eo,...to],ro=["base",...eo,...to,"draft-finding","finding","MO","unofficial"],oo=["ED","IG-NOTE"],so=new Map([["cc0",{name:"Creative Commons 0 Public Domain Dedication",short:"CC0",url:"https://creativecommons.org/publicdomain/zero/1.0/"}],["w3c-software",{name:"W3C Software Notice and License",short:"W3C Software",url:"https://www.w3.org/Consortium/Legal/2002/copyright-software-20021231"}],["w3c-software-doc",{name:"W3C Software and Document Notice and License",short:"W3C Software and Document",url:"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document"}],["cc-by",{name:"Creative Commons Attribution 4.0 International Public License",short:"CC-BY",url:"https://creativecommons.org/licenses/by/4.0/legalcode"}]]),io=["PP2017","PP2020"],ao=Object.freeze({id:"",alt:"",href:"",src:"",height:"48",width:"72"});function co(e,t,n=new Date){const r=e[t]?new Date(e[t]):new Date(n);if(Number.isFinite(r.valueOf())){const e=Jt.format(r);return new Date(e)}return _n(`[\`${t}\`](https://github.com/w3c/respec/wiki/${t}) is not a valid date: "${e[t]}". Expected format 'YYYY-MM-DD'.`,Gr),new Date(Jt.format(new Date))}function lo(e,{isTagFinding:t=!1}){const n=e.cloneNode(!0),r=document.createDocumentFragment();for(;n.hasChildNodes()&&(n.firstChild.nodeType!==Node.ELEMENT_NODE||"section"!==n.firstChild.localName);)r.appendChild(n.firstChild);if(t&&!r.hasChildNodes()){Cn("ReSpec does not support automated SotD generation for TAG findings.",Gr,{hint:"Please add the prerequisite content in the 'sotd' section."})}return{additionalContent:r,additionalSections:n.childNodes}}var uo=Object.freeze({__proto__:null,name:Gr,cgStatus:eo,bgStatus:to,cgbgStatus:no,run:function(e){if(!e.specStatus){const e=`Missing required configuration: ${En("specStatus")}.`,t=`Please select an appropriate status from ${En("specStatus")} based on your W3C group. If in doubt, use \`"unofficial"\`.`;_n(e,Gr,{hint:t})}if(e.isUnofficial="unofficial"===e.specStatus,e.isUnofficial&&!Array.isArray(e.logos)&&(e.logos=[]),e.isUnofficial){if(e.license&&!so.has(e.license)){const t=`The ${En("license")} configuration option has an invalid value: "\`${e.license}\`". Defaulting to "cc-by".`,n=[...so.keys()].map(e=>`\`"${e}"\``).join(", "),r=`Please explicitly set ${En("license")} to one of: ${n}.`;_n(t,Gr,{hint:r}),e.license="cc-by"}void 0===e.license&&(e.license="cc-by")}if(e.isCCBY="cc-by"===e.license,e.isW3CSoftAndDocLicense="w3c-software-doc"===e.license,!e.isUnofficial&&["cc-by"].includes(e.license)){const t=`You cannot use license "\`${e.license}\`" with W3C Specs.`,n=`Please set ${En("license")} to "w3c-software-doc" instead.`;_n(t,Gr,{hint:n})}if(e.licenseInfo=so.get(e.license),e.isCGBG=no.includes(e.specStatus),e.isCGFinal=e.isCGBG&&e.specStatus.endsWith("G-FINAL"),e.isBasic="base"===e.specStatus,e.isRegular=!e.isCGBG&&!e.isBasic,e.isRegular&&!e.shortName){_n("Missing required configuration: `shortName`",Gr)}if(e.testSuiteURI){const t=new URL(e.testSuiteURI,location.href),{host:n,pathname:r}=t;if("github.com"===n&&r.startsWith("/w3c/web-platform-tests/")){const t="Web Platform Tests have moved to a new Github Organization at https://github.com/web-platform-tests. ",n=`Please update your ${En("testSuiteURI")} to point to the new tests repository (e.g., https://github.com/web-platform-tests/wpt/tree/master/${e.shortName} ).`;Cn(t,Gr,{hint:n})}}if(e.subtitle||(e.subtitle=""),e.publishDate=co(e,"publishDate",document.lastModified),e.publishYear=e.publishDate.getUTCFullYear(),e.publishHumanDate=Vr.format(e.publishDate),e.isNoTrack=ro.includes(e.specStatus),e.isRecTrack=!e.noRecTrack&&Qr.concat(Xr).includes(e.specStatus),e.isMemberSubmission="Member-SUBM"===e.specStatus,e.isMemberSubmission){const t={alt:"W3C Member Submission",href:"https://www.w3.org/Submission/",src:"https://www.w3.org/Icons/member_subm-v.svg",width:"211"};e.logos.push({...ao,...t})}if(e.isTeamSubmission="Team-SUBM"===e.specStatus,e.isTeamSubmission){const t={alt:"W3C Team Submission",href:"https://www.w3.org/TeamSubmission/",src:"https://www.w3.org/Icons/team_subm-v.svg",width:"211"};e.logos.push({...ao,...t})}if(e.isSubmission=e.isMemberSubmission||e.isTeamSubmission,e.anOrA=oo.includes(e.specStatus)?"an":"a",e.isTagFinding="finding"===e.specStatus||"draft-finding"===e.specStatus,e.isRecTrack&&!function(e){return e.github||e.otherLinks&&e.otherLinks.find(e=>e.data.find(e=>e.href&&e.href.toString().match(/^https:\/\/github\.com\/.*\/issues/)))}(e)){_n("Rec-track documents must link to Github issues from their head.",Gr,{hint:"Please use the [`github`](https://respec.org/docs/#github) configuration option."})}if(!e.edDraftURI&&(e.edDraftURI="","ED"===e.specStatus)){Cn("Editor's Drafts should set edDraftURI.",Gr)}e.maturity=Zr[e.specStatus]?Zr[e.specStatus]:e.specStatus;let t="TR";"Member-SUBM"===e.specStatus?t="Submission":"Team-SUBM"===e.specStatus&&(t="TeamSubmission"),e.isRegular&&(e.thisVersion=`https://www.w3.org/${t}/${e.publishDate.getUTCFullYear()}/${e.maturity}-${e.shortName}-${on(e.publishDate)}/`),"ED"===e.specStatus&&(e.thisVersion=e.edDraftURI);const n="ED"===e.specStatus&&null===e.latestVersion;if(e.isRegular&&!n&&(e.latestVersion=`https://www.w3.org/${t}/${e.shortName}/`),e.isTagFinding&&(e.latestVersion="https://www.w3.org/2001/tag/doc/"+e.shortName,e.thisVersion=`${e.latestVersion}-${Jt.format(e.publishDate)}`),e.previousPublishDate){if(!e.previousMaturity&&!e.isTagFinding){_n("`previousPublishDate` is set, but not `previousMaturity`.",Gr)}e.previousPublishDate=co(e,"previousPublishDate");const t=Zr[e.previousMaturity]?Zr[e.previousMaturity]:e.previousMaturity;e.isTagFinding?e.prevVersion=`${e.latestVersion}-${Jt.format(e.previousPublishDate)}`:e.isCGBG?e.prevVersion=e.prevVersion||"":e.isBasic?e.prevVersion="":e.prevVersion=`https://www.w3.org/TR/${e.previousPublishDate.getUTCFullYear()}/${t}-${e.shortName}-${on(e.previousPublishDate)}/`}else{if(!(e.specStatus.endsWith("NOTE")||"FPWD"===e.specStatus||"FPLC"===e.specStatus||"ED"===e.specStatus||e.noRecTrack||e.isNoTrack||e.isSubmission)){_n("Document on track but no previous version.",Gr,{hint:"Add [`previousMaturity`](https://respec.org/docs/#previousMaturity) and [`previousPublishDate`](https://respec.org/docs/#previousPublishDate) to ReSpec's config."})}e.prevVersion||(e.prevVersion="")}e.prevRecShortname&&!e.prevRecURI&&(e.prevRecURI="https://www.w3.org/TR/"+e.prevRecShortname);const r=function(e){if(!e.name){_n("All authors and editors must have a `name` property.",Gr,{hint:"See [Person](https://respec.org/docs/#person) configuration for available options."})}if(e.orcid)try{e.orcid=function(e){const t=new URL(e,"https://orcid.org/");if("https://orcid.org"!==t.origin)throw new Error(`The origin should be "https://orcid.org", not "${t.origin}".`);const n=t.pathname.slice(1).replace(/\/$/,"");if(!/^\d{4}-\d{4}-\d{4}-\d{3}(\d|X)$/.test(n))throw new Error(`ORCIDs have the format "1234-1234-1234-1234", not "${n}"`);const r=n[n.length-1],o=(12-n.split("").slice(0,-1).filter(e=>/\d/.test(e)).map(Number).reduce((e,t)=>2*(e+t),0)%11)%11,s=10===o?"X":String(o);if(r!==s)throw new Error(`"${n}" has an invalid checksum.`);return t.href}(e.orcid)}catch(t){_n(`"${e.orcid}" is not an ORCID. ${t.message}`,Gr),delete e.orcid}};if(e.formerEditors||(e.formerEditors=[]),e.editors){e.editors.forEach(r);for(let t=0;t<e.editors.length;t++){const n=e.editors[t];"retiredDate"in n&&(e.formerEditors.push(n),e.editors.splice(t--,1))}}if(!e.editors||0===e.editors.length){_n("At least one editor is required",Gr)}if(e.formerEditors.length&&e.formerEditors.forEach(r),e.authors&&e.authors.forEach(r),e.multipleEditors=e.editors&&e.editors.length>1,e.multipleFormerEditors=e.formerEditors.length>1,e.multipleAuthors=e.authors&&e.authors.length>1,(e.alternateFormats||[]).forEach(e=>{if(!e.uri||!e.label){_n("All alternate formats must have a uri and a label.",Gr)}}),e.copyrightStart&&e.copyrightStart==e.publishYear&&(e.copyrightStart=""),e.longStatus=Kr[e.specStatus],e.textStatus=Jr[e.specStatus],Yr[e.specStatus]&&(e.rdfStatus=Yr[e.specStatus]),e.showThisVersion=!e.isNoTrack||e.isTagFinding,e.showPreviousVersion="FPWD"!==e.specStatus&&"FPLC"!==e.specStatus&&"ED"!==e.specStatus&&!e.isNoTrack&&!e.isSubmission,e.specStatus.endsWith("NOTE")&&!e.prevVersion&&(e.showPreviousVersion=!1),e.isTagFinding&&(e.showPreviousVersion=!!e.previousPublishDate),e.notYetRec=e.isRecTrack&&"REC"!==e.specStatus,e.isRec=e.isRecTrack&&"REC"===e.specStatus,e.isRec&&!e.errata){_n("Recommendations must have an errata link.",Gr,{hint:"Add an [`errata`](https://respec.org/docs/#errata) URL to your respecConfig."})}e.prependW3C=!e.isUnofficial,e.isED="ED"===e.specStatus,e.isCR="CR"===e.specStatus||"CRD"===e.specStatus,e.isCRDraft="CRD"===e.specStatus,e.isPR="PR"===e.specStatus,e.isPER="PER"===e.specStatus,e.isMO="MO"===e.specStatus,e.isNote=["FPWD-NOTE","WG-NOTE"].includes(e.specStatus),e.isIGNote="IG-NOTE"===e.specStatus,e.dashDate=Jt.format(e.publishDate),e.publishISODate=e.publishDate.toISOString(),e.shortISODate=Jt.format(e.publishDate),function(e){if(!e.wgPatentPolicy)return;const t=new Set([].concat(e.wgPatentPolicy));if(t.size&&![...t].every(e=>io.includes(e))){const t=`Invalid [\`wgPatentPolicy\`](https://respec.org/docs#wgPatentPolicy) value: "${e.wgPatentPolicy}".`,n=`Please use one of: ${io.map(e=>`\`${e}\``).join(", ")} .`;_n(t,Gr,{hint:n})}if(1!==t.size){const e="When collaborating across multiple groups, they must use the same patent policy.",n=`Please check the patent policies of each group. The patent policies were: ${[...t].join(", ")}.`;_n(e,Gr,{hint:n})}e.wgPatentPolicy=[...t][0]}(e),e.hasOwnProperty("wgPatentURI")&&!Array.isArray(e.wgPatentURI)?Object.defineProperty(e,"wgId",{get(){const e=this.wgPatentURI.split("/"),t=e.findIndex(e=>"pp-impl"===e)+1;return e[t]||""}}):e.wgId=e.wgId?e.wgId:"";const o={get multipleAlternates(){return e.alternateFormats&&e.alternateFormats.length>1},get alternatesHTML(){return e.alternateFormats&&un(e.alternateFormats,e=>{const t=e.hasOwnProperty("lang")&&e.lang?e.lang:null,n=e.hasOwnProperty("type")&&e.type?e.type:null;return Ht`<a rel="alternate" href="${e.uri}" hreflang="${t}" type="${n}" >${e.label}</a - >`})}},s=(e.isCGBG?Or:Dr)(e,o);document.body.prepend(s),document.body.classList.add("h-entry");const i=document.getElementById("sotd")||document.createElement("section");if((e.isCGBG||!e.isNoTrack||e.isTagFinding)&&!i.id){_n("A custom SotD paragraph is required for your type of document.",qr)}i.id=i.id||"sotd",i.classList.add("introductory");const a=[e.wg,e.wgURI,e.wgPatentURI];if(a.some(e=>Array.isArray(e))&&!a.every(e=>Array.isArray(e))){_n("If one of '`wg`', '`wgURI`', or '`wgPatentURI`' is an array, they all have to be.",qr)}if(e.isCGBG&&!e.wg){_n("[`wg`](https://github.com/w3c/respec/wiki/wg) configuration option is required for this kind of document.",qr)}if(Array.isArray(e.wg)){e.multipleWGs=e.wg.length>1,e.wgHTML=un(e.wg,(t,n)=>Ht`the <a href="${e.wgURI[n]}">${t}</a>`);const t=[];for(let n=0,r=e.wg.length;n<r;n++)t.push(Ht`a + >`})}},s=(e.isCGBG?Wr:jr)(e,o);document.body.prepend(s),document.body.classList.add("h-entry");const i=document.getElementById("sotd")||document.createElement("section");if((e.isCGBG||!e.isNoTrack||e.isTagFinding)&&!i.id){_n("A custom SotD paragraph is required for your type of document.",Gr)}i.id=i.id||"sotd",i.classList.add("introductory");const a=[e.wg,e.wgURI,e.wgPatentURI];if(a.some(e=>Array.isArray(e))&&!a.every(e=>Array.isArray(e))){_n("If one of '`wg`', '`wgURI`', or '`wgPatentURI`' is an array, they all have to be.",Gr)}if(e.isCGBG&&!e.wg){_n("[`wg`](https://github.com/w3c/respec/wiki/wg) configuration option is required for this kind of document.",Gr)}if(Array.isArray(e.wg)){e.multipleWGs=e.wg.length>1,e.wgHTML=un(e.wg,(t,n)=>Ht`the <a href="${e.wgURI[n]}">${t}</a>`);const t=[];for(let n=0,r=e.wg.length;n<r;n++)t.push(Ht`a <a href="${e.wgPatentURI[n]}" rel="disclosure" >public list of any patent disclosures (${e.wg[n]})</a - >`);e.wgPatentHTML=un(t)}else e.multipleWGs=!1,e.wg&&(e.wgHTML=Ht`the <a href="${e.wgURI}">${e.wg}</a>`);if("PR"===e.specStatus&&!e.crEnd){_n('`specStatus` is "PR" but no `crEnd` is specified (needed to indicate end of previous CR).',qr)}if("CR"===e.specStatus&&!e.crEnd){_n('`specStatus` is "CR", but no `crEnd` is specified in Respec config.',qr)}if(e.crEnd=so(e,"crEnd"),e.humanCREnd=Br.format(e.crEnd),"PR"===e.specStatus&&!e.prEnd){_n('`specStatus` is "PR" but no `prEnd` is specified.',qr)}if(e.prEnd=so(e,"prEnd"),e.humanPREnd=Br.format(e.prEnd),"PER"===e.specStatus&&!e.perEnd){_n("Status is PER but no perEnd is specified",qr)}e.perEnd=so(e,"perEnd"),e.humanPEREnd=Br.format(e.perEnd);const c=["addition","correction"];if("REC"===e.specStatus&&e.revisionTypes&&e.revisionTypes.length>0){const t=e.revisionTypes.find(e=>!c.includes(e));if(t){_n(`\`specStatus\` is "REC" with unknown revision type '${t}'`,qr)}if(e.revisionTypes.includes("addition")&&!e.updateableRec){_n('`specStatus` is "REC" with proposed additions but the Rec is not marked as a allowing new features.',qr)}}if("REC"===e.specStatus&&e.updateableRec&&e.revisionTypes&&e.revisionTypes.length>0&&!e.revisedRecEnd){_n('`specStatus` is "REC" with proposed corrections or additions but no `revisedRecEnd` is specified.',qr)}if(e.revisedRecEnd=so(e,"revisedRecEnd"),e.humanRevisedRecEnd=Br.format(e.revisedRecEnd),e.recNotExpected=!(!e.noRecTrack&&!e.recNotExpected)||!e.isRecTrack&&"WD"==e.maturity&&"FPWD-NOTE"!==e.specStatus,e.noRecTrack&&Jr.includes(e.specStatus)){const t=`Document configured as [\`noRecTrack\`](https://github.com/w3c/respec/wiki/noRecTrack), but its status ("${e.specStatus}") puts it on the W3C Rec Track.`,n=`Status cannot be any of: ${Jr.join(", ")}.`;_n(t,qr,{hint:n})}if(e.isIGNote&&!e.charterDisclosureURI){_n("IG-NOTEs must link to charter's disclosure section using `charterDisclosureURI`.",qr)}if(i.classList.contains("override")||Ht.bind(i)`${function(e,t){const n={...io(t,e),get mailToWGPublicList(){return`mailto:${e.wgPublicList}@w3.org`},get mailToWGPublicListWithSubject(){const t=e.subjectPrefix?"?subject="+encodeURIComponent(e.subjectPrefix):"";return this.mailToWGPublicList+t},get mailToWGPublicListSubscription(){return`mailto:${e.wgPublicList}-request@w3.org?subject=subscribe`}};return(e.isCGBG?Fr:zr)(e,n)}(e,i)}`,!e.implementationReportURI&&e.isCR){_n("CR documents must have an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).",qr)}if(!e.implementationReportURI&&e.isPR){Cn("PR documents should include an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).",qr)}An("amend-user-config",{publishISODate:e.publishISODate,generatedSubtitle:`${e.longStatus} ${e.publishHumanDate}`})}});const co=new WeakMap;class lo{constructor(e,t){co.set(this,{name:e,lintingFunction:t})}get name(){return co.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return co.get(this).lintingFunction(e,t)}}const uo="check-charset",po={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},fo=s in po?s:"en";const ho=new lo(uo,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:uo,occurrences:n.length,...po[fo]}})),mo="check-internal-slots",go={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},bo=s in go?s:"en";const wo=new lo(mo,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:mo,offendingElements:n,occurrences:n.length,...go[bo]}})),yo="check-punctuation",vo=[".",":","!","?"],ko={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${vo.map(e=>`"${e}"`).join(", ")}.`}},xo=s in ko?s:"en";const $o=new lo(yo,(function(e,t){const n=new RegExp(`[${vo.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:yo,offendingElements:r,occurrences:r.length,...ko[xo]}})),So="core/linter",_o=new WeakMap;const Co=new class{constructor(){_o.set(this,{rules:new Set})}get rules(){return _o.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[..._o.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...Eo,...t},{description:r,help:o,howToFix:s,name:i,occurrences:a,offendingElements:c}=n,l=c.length?r:`${r} (Count: ${a})`;Cn(l,`${So}/${i}`,{hint:`${s} ${o}`,elements:c})}(n.lint(e,t)));await n}},Eo={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var Ro=Object.freeze({__proto__:null,name:So,default:Co,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await Co.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const To="local-refs-exist",Ao={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},Lo=s in Ao?s:"en";const Po=new lo(To,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(Io);if(n.length)return{name:To,offendingElements:n,occurrences:n.length,...Ao[Lo]}}));function Io(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const Do="no-headingless-sections",No={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},Oo=s in No?s:"en",jo=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const zo=new lo(Do,(function(e,t){const n=[...t.querySelectorAll("section")].filter(jo);if(n.length)return{name:Do,offendingElements:n,occurrences:n.length,...No[Oo]}})),Wo="no-http-props",Mo={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},Uo=s in Mo?s:"en";const Fo=new lo(Wo,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:Wo,occurrences:n.length,...Mo[Uo]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),qo="no-unused-vars",Bo={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Ho=s in Bo?s:"en";const Go=new lo(qo,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=nn(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:qo,offendingElements:n,occurrences:n.length,...Bo[Ho]}})),Vo="privsec-section",Zo={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},Yo=s in Zo?s:"en";const Jo=new lo(Vo,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Vo,occurrences:1,...Zo[Yo]}}));Co.register(Fo,zo,Go,$o,Po,wo,ho,Jo);const Ko={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0},Xo="wpt-tests-exist",Qo={en:{description:"Non-existent Web Platform Tests",howToFix:"Please fix the tests mentioned.",help:"See developer console."}},es=s in Qo?s:"en";const ts=new lo(Xo,(async function(e,t){const n=await async function(e,t){let n;try{const t=new URL(e);if(t.pathname.startsWith("/web-platform-tests/wpt/tree/master/")){const e=/web-platform-tests\/wpt\/tree\/master\/(.+)/;n=t.pathname.match(e)[1].replace(/\//g,"")}else n=t.pathname.replace(/\//g,"")}catch(e){return Cn("Failed to parse WPT directory from testSuiteURI","linter/"+Xo),console.error(e),null}const r=new URL("web-platform-tests/wpt/files",t+"/");r.searchParams.set("path",n);const o=await fetch(r);if(!o.ok){return Cn(`Failed to fetch files from WPT repository. Request failed with error: ${await o.text()} (${o.status})`,"linter/"+Xo),null}const{entries:s}=await o.json(),i=s.filter(e=>!e.endsWith("/"));return new Set(i)}(e.testSuiteURI,e.githubAPI);if(!n)return;const r=[],o=new Set,s=[...t.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);for(const e of s){const t=e.dataset.tests.split(/,/gm).map(e=>e.trim().split("#")[0]).filter(e=>e).filter(e=>!n.has(e));t.length&&(r.push(e),t.forEach(e=>o.add(e)))}if(!r.length)return;const i=[...o].map(e=>`\`${e}\``);return{name:Xo,offendingElements:r,occurrences:r.length,...Qo[es],description:`${Qo[es].description}: ${i.join(", ")}.`}}));const ns="w3c/defaults";Co.register(Jo,ts);const rs={src:"https://www.w3.org/StyleSheets/TR/2016/logos/W3C",alt:"W3C",height:48,width:72,url:"https://www.w3.org/"},os={lint:{"privsec-section":!0,"wpt-tests-exist":!1},doJsonLd:!1,logos:[],xref:!0};function ss(e){return e.map(e=>`\`"${e}"\``).join(", ")}var is=Object.freeze({__proto__:null,name:ns,run:function(e){const t=!1!==e.lint&&{...Ko.lint,...os.lint,...e.lint};e.specStatus&&"unofficial"!==e.specStatus.toLowerCase()&&(os.logos.push(rs),e.hasOwnProperty("license")||(os.license="w3c-software-doc")),Object.assign(e,{...Ko,...os,...e,lint:t}),e.groupType&&e.specStatus&&function(e){const{specStatus:t,groupType:n}=e;switch(n){case"cg":if(![...Qr,"unofficial"].includes(t)){const n=`W3C Community Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,r=`Please use one of: ${ss(Kr)}. Automatically falling back to \`"CG-DRAFT"\`.`;_n(n,ns,{hint:r}),e.specStatus="CG-DRAFT"}break;case"bg":if(![...Xr,"unofficial"].includes(t)){const n=`W3C Business Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,r=`Please use one of: ${ss(Xr)}. Automatically falling back to \`"BG-DRAFT"\`.`;_n(n,ns,{hint:r}),e.specStatus="BG-DRAFT"}break;case"wg":if(Qr.includes(t)){const e=`W3C Working Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,n=`Please see ${En("specStatus")} for appropriate values for this type of group.`;_n(e,ns,{hint:n})}}}(e)}});var as=String.raw`@keyframes pop{ + >`);e.wgPatentHTML=un(t)}else e.multipleWGs=!1,e.wg&&(e.wgHTML=Ht`the <a href="${e.wgURI}">${e.wg}</a>`);if("PR"===e.specStatus&&!e.crEnd){_n('`specStatus` is "PR" but no `crEnd` is specified (needed to indicate end of previous CR).',Gr)}if("CR"===e.specStatus&&!e.crEnd){_n('`specStatus` is "CR", but no `crEnd` is specified in Respec config.',Gr)}if(e.crEnd=co(e,"crEnd"),e.humanCREnd=Vr.format(e.crEnd),"PR"===e.specStatus&&!e.prEnd){_n('`specStatus` is "PR" but no `prEnd` is specified.',Gr)}if(e.prEnd=co(e,"prEnd"),e.humanPREnd=Vr.format(e.prEnd),"PER"===e.specStatus&&!e.perEnd){_n("Status is PER but no perEnd is specified",Gr)}e.perEnd=co(e,"perEnd"),e.humanPEREnd=Vr.format(e.perEnd);const c=["addition","correction"];if("REC"===e.specStatus&&e.revisionTypes&&e.revisionTypes.length>0){const t=e.revisionTypes.find(e=>!c.includes(e));if(t){_n(`\`specStatus\` is "REC" with unknown revision type '${t}'`,Gr)}if(e.revisionTypes.includes("addition")&&!e.updateableRec){_n('`specStatus` is "REC" with proposed additions but the Rec is not marked as a allowing new features.',Gr)}}if("REC"===e.specStatus&&e.updateableRec&&e.revisionTypes&&e.revisionTypes.length>0&&!e.revisedRecEnd){_n('`specStatus` is "REC" with proposed corrections or additions but no `revisedRecEnd` is specified.',Gr)}if(e.revisedRecEnd=co(e,"revisedRecEnd"),e.humanRevisedRecEnd=Vr.format(e.revisedRecEnd),e.recNotExpected=!(!e.noRecTrack&&!e.recNotExpected)||!e.isRecTrack&&"WD"==e.maturity&&"FPWD-NOTE"!==e.specStatus,e.noRecTrack&&Qr.includes(e.specStatus)){const t=`Document configured as [\`noRecTrack\`](https://github.com/w3c/respec/wiki/noRecTrack), but its status ("${e.specStatus}") puts it on the W3C Rec Track.`,n=`Status cannot be any of: ${Qr.join(", ")}.`;_n(t,Gr,{hint:n})}if(e.isIGNote&&!e.charterDisclosureURI){_n("IG-NOTEs must link to charter's disclosure section using `charterDisclosureURI`.",Gr)}if(i.classList.contains("override")||Ht.bind(i)`${function(e,t){const n={...lo(t,e),get mailToWGPublicList(){return`mailto:${e.wgPublicList}@w3.org`},get mailToWGPublicListWithSubject(){const t=e.subjectPrefix?"?subject="+encodeURIComponent(e.subjectPrefix):"";return this.mailToWGPublicList+t},get mailToWGPublicListSubscription(){return`mailto:${e.wgPublicList}-request@w3.org?subject=subscribe`}};return(e.isCGBG?Hr:Ur)(e,n)}(e,i)}`,!e.implementationReportURI&&e.isCR){_n("CR documents must have an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).",Gr)}if(!e.implementationReportURI&&e.isPR){Cn("PR documents should include an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).",Gr)}An("amend-user-config",{publishISODate:e.publishISODate,generatedSubtitle:`${e.longStatus} ${e.publishHumanDate}`})}});const po=new WeakMap;class fo{constructor(e,t){po.set(this,{name:e,lintingFunction:t})}get name(){return po.get(this).name}lint(e={lint:{[this.name]:!1}},t=document){if(function(e,t){return!(!1===e.hasOwnProperty("lint")||!1===e.lint||!e.lint[t])}(e,this.name))return po.get(this).lintingFunction(e,t)}}const ho="check-charset",mo={en:{description:"Document must only contain one `<meta>` tag with charset set to 'utf-8'",howToFix:'Add this line in your document `<head>` section - `<meta charset="utf-8">` or set charset to "utf-8" if not set already.'},zh:{description:"文档只能包含一个 charset 属性为 utf-8 的 `<meta>` 标签",howToFix:'将此行添加到文档的 `<head>` 部分—— `<meta charset="utf-8">` 或将 charset 设置为 utf-8(如果尚未设置)。'}},go=s in mo?s:"en";const bo=new fo(ho,(function(e,t){const n=t.querySelectorAll("meta[charset]"),r=[];for(const e of n)r.push(e.getAttribute("charset").trim().toLowerCase());return r.includes("utf-8")&&1===n.length?[]:{name:ho,occurrences:n.length,...mo[go]}})),wo="check-internal-slots",yo={en:{description:"Internal slots should be preceded by a '.'",howToFix:"Add a '.' between the elements mentioned.",help:"See developer console."}},vo=s in yo?s:"en";const ko=new fo(wo,(function(e,t){const n=[...t.querySelectorAll("var+a")].filter(({previousSibling:{nodeName:e}})=>e&&"VAR"===e);if(n.length)return{name:wo,offendingElements:n,occurrences:n.length,...yo[vo]}})),xo="check-punctuation",$o=[".",":","!","?"],So={en:{description:"`p` elements should end with a punctuation mark.",howToFix:`Please make sure \`p\` elements end with one of: ${$o.map(e=>`"${e}"`).join(", ")}.`}},_o=s in So?s:"en";const Co=new fo(xo,(function(e,t){const n=new RegExp(`[${$o.join("")}\\]]$|^ *$`,"m"),r=[...t.querySelectorAll("p:not(#back-to-top)")].filter(e=>!n.test(e.textContent.trim()));if(r.length)return{name:xo,offendingElements:r,occurrences:r.length,...So[_o]}})),Eo="core/linter",Ro=new WeakMap;const To=new class{constructor(){Ro.set(this,{rules:new Set})}get rules(){return Ro.get(this).rules}register(...e){e.forEach(e=>this.rules.add(e))}async lint(e,t=window.document){const n=[...Ro.get(this).rules].map(n=>async function(e){const t=await e;if(!t)return;const n={...Ao,...t},{description:r,help:o,howToFix:s,name:i,occurrences:a,offendingElements:c}=n,l=c.length?r:`${r} (Count: ${a})`;Cn(l,`${Eo}/${i}`,{hint:`${s} ${o}`,elements:c})}(n.lint(e,t)));await n}},Ao={name:"unknown",description:"",occurrences:0,howToFix:"",offendingElements:[],help:""};var Lo=Object.freeze({__proto__:null,name:Eo,default:To,run:function(e){!1!==e.lint&&(async()=>{await document.respec.ready;try{await To.lint(e,document)}catch(e){console.error("Error ocurred while running the linter",e)}})()}});const Po="local-refs-exist",Io={en:{description:"Broken local reference found in document.",howToFix:"Please fix the links mentioned.",help:"See developer console."}},Do=s in Io?s:"en";const No=new fo(Po,(function(e,t){const n=[...t.querySelectorAll("a[href^='#']")].filter(Oo);if(n.length)return{name:Po,offendingElements:n,occurrences:n.length,...Io[Do]}}));function Oo(e){const t=e.getAttribute("href").substring(1),n=e.ownerDocument;return!n.getElementById(t)&&!n.getElementsByName(t).length}const jo="no-headingless-sections",zo={en:{description:"All sections must start with a `h2-6` element.",howToFix:"Add a `h2-6` to the offending section or use a `<div>`.",help:"See developer console."},nl:{description:"Alle secties moeten beginnen met een `h2-6` element.",howToFix:"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.",help:"Zie de developer console."},zh:{description:"所有章节(section)都必须以 `h2-6` 元素开头。",howToFix:"将 `h2-6` 添加到有问题的章节或使用 `<div>`。"}},Wo=s in zo?s:"en",Mo=({firstElementChild:e})=>null===e||!1===/^h[1-6]$/.test(e.localName);const Uo=new fo(jo,(function(e,t){const n=[...t.querySelectorAll("section")].filter(Mo);if(n.length)return{name:jo,offendingElements:n,occurrences:n.length,...zo[Wo]}})),Fo="no-http-props",qo={en:{description:"Insecure URLs are not allowed in `respecConfig`.",howToFix:"Please change the following properties to 'https://': "},zh:{description:"`respecConfig` 中不允许使用不安全的URL.",howToFix:"请将以下属性更改为 https://:"}},Bo=s in qo?s:"en";const Ho=new fo(Fo,(function(e,t){if(!t.location.href.startsWith("http"))return;const n=Object.getOwnPropertyNames(e).filter(e=>e.endsWith("URI")||"prevED"===e).filter(n=>new URL(e[n],t.location.href).href.startsWith("http://"));if(!n.length)return;const r={name:Fo,occurrences:n.length,...qo[Bo]};return r.howToFix+=n.map(e=>`\`${e}\``).join(", ")+".",r})),Go="no-unused-vars",Vo={en:{description:"Variable was defined, but never used.",howToFix:"Add a `data-ignore-unused` attribute to the `<var>`.",help:"See developer console."}},Zo=s in Vo?s:"en";const Yo=new fo(Go,(function(e,t){const n=[],r=e=>!!e.querySelector(":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm");for(const e of t.querySelectorAll("section")){if(!r(e))continue;const t=e.querySelectorAll(":scope > :not(section) var");if(!t.length)continue;const o=new Map;for(const e of t){const t=nn(e.textContent);(o.get(t)||o.set(t,[]).get(t)).push(e)}for(const e of o.values())1!==e.length||e[0].hasAttribute("data-ignore-unused")||n.push(e[0])}if(n.length)return{name:Go,offendingElements:n,occurrences:n.length,...Vo[Zo]}})),Jo="privsec-section",Ko={en:{description:"Document must a 'Privacy and/or Security' Considerations section.",howToFix:"Add a privacy and/or security considerations section.",help:"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/)."}},Xo=s in Ko?s:"en";const Qo=new fo(Jo,(function(e,t){if(e.isRecTrack&&!function(e){return Array.from(e.querySelectorAll("h2, h3, h4, h5, h6")).some(({textContent:e})=>{const t=/(privacy|security)/im.test(e),n=/(considerations)/im.test(e);return t&&n||t})}(t))return{name:Jo,occurrences:1,...Ko[Xo]}}));To.register(Ho,Uo,Yo,Co,No,ko,bo,Qo);const es={lint:{"no-headingless-sections":!0,"no-http-props":!0,"no-unused-vars":!1,"check-punctuation":!1,"local-refs-exist":!0,"check-internal-slots":!1,"check-charset":!1,"privsec-section":!1},pluralize:!0,specStatus:"base",highlightVars:!0,addSectionLinks:!0},ts="wpt-tests-exist",ns={en:{description:"Non-existent Web Platform Tests",howToFix:"Please fix the tests mentioned.",help:"See developer console."}},rs=s in ns?s:"en";const os=new fo(ts,(async function(e,t){const n=await async function(e,t){let n;try{const t=new URL(e);if(t.pathname.startsWith("/web-platform-tests/wpt/tree/master/")){const e=/web-platform-tests\/wpt\/tree\/master\/(.+)/;n=t.pathname.match(e)[1].replace(/\//g,"")}else n=t.pathname.replace(/\//g,"")}catch(e){return Cn("Failed to parse WPT directory from testSuiteURI","linter/"+ts),console.error(e),null}const r=new URL("web-platform-tests/wpt/files",t+"/");r.searchParams.set("path",n);const o=await fetch(r);if(!o.ok){return Cn(`Failed to fetch files from WPT repository. Request failed with error: ${await o.text()} (${o.status})`,"linter/"+ts),null}const{entries:s}=await o.json(),i=s.filter(e=>!e.endsWith("/"));return new Set(i)}(e.testSuiteURI,e.githubAPI);if(!n)return;const r=[],o=new Set,s=[...t.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);for(const e of s){const t=e.dataset.tests.split(/,/gm).map(e=>e.trim().split("#")[0]).filter(e=>e).filter(e=>!n.has(e));t.length&&(r.push(e),t.forEach(e=>o.add(e)))}if(!r.length)return;const i=[...o].map(e=>`\`${e}\``);return{name:ts,offendingElements:r,occurrences:r.length,...ns[rs],description:`${ns[rs].description}: ${i.join(", ")}.`}}));const ss="w3c/defaults";To.register(Qo,os);const is={src:"https://www.w3.org/StyleSheets/TR/2016/logos/W3C",alt:"W3C",height:48,width:72,url:"https://www.w3.org/"},as={lint:{"privsec-section":!0,"wpt-tests-exist":!1},doJsonLd:!1,logos:[],xref:!0};function cs(e){return e.map(e=>`\`"${e}"\``).join(", ")}var ls=Object.freeze({__proto__:null,name:ss,run:function(e){const t=!1!==e.lint&&{...es.lint,...as.lint,...e.lint};e.specStatus&&"unofficial"!==e.specStatus.toLowerCase()&&(as.logos.push(is),e.hasOwnProperty("license")||(as.license="w3c-software-doc")),Object.assign(e,{...es,...as,...e,lint:t}),e.groupType&&e.specStatus&&function(e){const{specStatus:t,groupType:n}=e;switch(n){case"cg":if(![...no,"unofficial"].includes(t)){const n=`W3C Community Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,r=`Please use one of: ${cs(eo)}. Automatically falling back to \`"CG-DRAFT"\`.`;_n(n,ss,{hint:r}),e.specStatus="CG-DRAFT"}break;case"bg":if(![...to,"unofficial"].includes(t)){const n=`W3C Business Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,r=`Please use one of: ${cs(to)}. Automatically falling back to \`"BG-DRAFT"\`.`;_n(n,ss,{hint:r}),e.specStatus="BG-DRAFT"}break;case"wg":if(no.includes(t)){const e=`W3C Working Group documents can't use \`"${t}"\` for the ${En("specStatus")} configuration option.`,n=`Please see ${En("specStatus")} for appropriate values for this type of group.`;_n(e,ss,{hint:n})}}}(e)}});var us=String.raw`@keyframes pop{ 0%{transform:scale(1,1)} 25%{transform:scale(1.25,1.25);opacity:.75} 100%{transform:scale(1,1)} @@ -647,7 +649,7 @@ h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left: } @media print{ .removeOnSave{display:none} -}`;const cs=function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=as,document.head.appendChild(e),e}();var ls=Object.freeze({__proto__:null,name:"core/style",run:function(e){e.noReSpecCSS&&cs.remove()}});const us="w3c/style";const ds=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/base.css",as:"style"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/logos/W3C",as:"image"}],t=document.createDocumentFragment();for(const n of e.map(Xt))t.appendChild(n);return t}();ds.appendChild(function(){const e=document.createElement("link");return e.rel="stylesheet",e.href="https://www.w3.org/StyleSheets/TR/2016/base.css",e.classList.add("removeOnSave"),e}()),document.head.querySelector("meta[name=viewport]")||ds.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(ds);var ps=Object.freeze({__proto__:null,name:us,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'base'.";e.specStatus="base",Cn(t,us)}let t="W3C-";switch(e.specStatus.toUpperCase()){case"CG-DRAFT":case"CG-FINAL":case"BG-DRAFT":case"BG-FINAL":t=e.specStatus.toLowerCase();break;case"FPWD":case"LC":case"WD-NOTE":case"LC-NOTE":t+="WD";break;case"WG-NOTE":case"FPWD-NOTE":t+="WG-NOTE.css";break;case"UNOFFICIAL":t+="UD";break;case"FINDING":case"FINDING-DRAFT":case"BASE":t="base.css";break;default:t+=e.specStatus}const n=function(e){let t="";switch(e){case null:case!0:t="2016";break;default:e&&!isNaN(e)&&(t=e.toString().trim())}return t}(e.useExperimentalStyles||"2016");n&&!e.noToc&&Ln("end-all",()=>{!function(e,t){const n=e.createElement("script");location.hash&&n.addEventListener("load",()=>{window.location.href=location.hash},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,n)},{once:!0});const r=`https://www.w3.org/StyleSheets/TR/${n?n+"/":""}${t}`;var o;!function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,r),Ln("beforesave",(o=r,e=>{const t=e.querySelector(`head link[href="${o}"]`);e.querySelector("head").append(t)}))}});const fs={en:{status_at_publication:Ht`This section describes the status of this +}`;const ds=function(){const e=document.createElement("style");return e.id="respec-mainstyle",e.textContent=us,document.head.appendChild(e),e}();var ps=Object.freeze({__proto__:null,name:"core/style",run:function(e){e.noReSpecCSS&&ds.remove()}});const fs="w3c/style";const hs=function(){const e=[{hint:"preconnect",href:"https://www.w3.org"},{hint:"preload",href:"https://www.w3.org/scripts/TR/2016/fixup.js",as:"script"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/base.css",as:"style"},{hint:"preload",href:"https://www.w3.org/StyleSheets/TR/2016/logos/W3C",as:"image"}],t=document.createDocumentFragment();for(const n of e.map(Xt))t.appendChild(n);return t}();hs.appendChild(function(){const e=document.createElement("link");return e.rel="stylesheet",e.href="https://www.w3.org/StyleSheets/TR/2016/base.css",e.classList.add("removeOnSave"),e}()),document.head.querySelector("meta[name=viewport]")||hs.prepend(function(){const e=document.createElement("meta");return e.name="viewport",e.content=function(e,t=", ",n="="){return Array.from(Object.entries(e)).map(([e,t])=>`${e}${n}${JSON.stringify(t)}`).join(t)}({width:"device-width","initial-scale":"1","shrink-to-fit":"no"}).replace(/"/g,""),e}()),document.head.prepend(hs);var ms=Object.freeze({__proto__:null,name:fs,run:function(e){if(!e.specStatus){const t="`respecConfig.specStatus` missing. Defaulting to 'base'.";e.specStatus="base",Cn(t,fs)}let t="W3C-";switch(e.specStatus.toUpperCase()){case"CG-DRAFT":case"CG-FINAL":case"BG-DRAFT":case"BG-FINAL":t=e.specStatus.toLowerCase();break;case"FPWD":case"LC":case"WD-NOTE":case"LC-NOTE":t+="WD";break;case"WG-NOTE":case"FPWD-NOTE":t+="WG-NOTE.css";break;case"UNOFFICIAL":t+="UD";break;case"FINDING":case"FINDING-DRAFT":case"BASE":t="base.css";break;default:t+=e.specStatus}const n=function(e){let t="";switch(e){case null:case!0:t="2016";break;default:e&&!isNaN(e)&&(t=e.toString().trim())}return t}(e.useExperimentalStyles||"2016");n&&!e.noToc&&Ln("end-all",()=>{!function(e,t){const n=e.createElement("script");location.hash&&n.addEventListener("load",()=>{window.location.href=location.hash},{once:!0}),n.src=`https://www.w3.org/scripts/TR/${t}/fixup.js`,e.body.appendChild(n)}(document,n)},{once:!0});const r=`https://www.w3.org/StyleSheets/TR/${n?n+"/":""}${t}`;var o;!function(e,t){const n=[].concat(t).map(t=>{const n=e.createElement("link");return n.rel="stylesheet",n.href=t,n}).reduce((e,t)=>(e.appendChild(t),e),e.createDocumentFragment());e.head.appendChild(n)}(document,r),Ln("beforesave",(o=r,e=>{const t=e.querySelector(`head link[href="${o}"]`);e.querySelector("head").append(t)}))}});const gs={en:{status_at_publication:Ht`This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the @@ -671,103 +673,103 @@ h2>a.self-link,h3>a.self-link,h4>a.self-link,h5>a.self-link,h6>a.self-link{left: Dokument obsolet machen. Eine Liste der aktuellen Publikatinen des W3C und die aktuellste Fassung dieser Spezifikation kann im <a href="https://www.w3.org/TR/">W3C technical reports index</a> unter - https://www.w3.org/TR/ abgerufen werden.`}};Object.keys(fs).forEach(e=>{o[e]||(o[e]={}),Object.assign(o[e],fs[e])});var hs=Object.freeze({__proto__:null,name:"w3c/l10n"});const ms="core/github";let gs,bs;const ws=new Promise((e,t)=>{gs=e,bs=e=>{_n(e,ms),t(new Error(e))}}),ys=rn({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});var vs=Object.freeze({__proto__:null,name:ms,github:ws,run:async function(e){if(!e.hasOwnProperty("github")||!e.github)return void gs(null);if("object"==typeof e.github&&!e.github.hasOwnProperty("repoURL")){return void bs("Config option `[github](https://github.com/w3c/respec/wiki/github)` is missing property `repoURL`.")}let t,n=e.github.repoURL||e.github;n.endsWith("/")||(n+="/");try{t=new URL(n,"https://github.com")}catch{return void bs(`\`respecConf.github\` is not a valid URL? (${t})`)}if("https://github.com"!==t.origin){return void bs(`\`respecConf.github\` must be HTTPS and pointing to GitHub. (${t})`)}const[r,o]=t.pathname.split("/").filter(e=>e);if(!r||!o){return void bs("`respecConf.github` URL needs a path with, for example, w3c/my-spec")}const s=e.github.branch||"gh-pages",i=new URL("./issues/",t).href,a={edDraftURI:`https://${r.toLowerCase()}.github.io/${o}/`,githubToken:void 0,githubUser:void 0,issueBase:i,atRiskBase:i,otherLinks:[],pullBase:new URL("./pulls/",t).href,shortName:o},c={key:ys.participate,data:[{value:`GitHub ${r}/${o}`,href:t},{value:ys.file_a_bug,href:a.issueBase},{value:ys.commit_history,href:new URL("./commits/"+s,t.href).href},{value:"Pull requests",href:a.pullBase}]};let l="https://respec.org/github";if(e.githubAPI)if(new URL(e.githubAPI).hostname===window.parent.location.hostname)l=e.githubAPI;else{Cn("`respecConfig.githubAPI` should not be added manually.",ms)}const u={branch:s,repoURL:t.href,apiBase:l,fullName:`${r}/${o}`};gs(u);const d={...a,...e,github:u,githubAPI:l};Object.assign(e,d),e.otherLinks.unshift(c)}});const ks="core/data-include";function xs(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=an(e,r.dataset.oninclude,n),s="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=Bn(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&Zn(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:s}),s||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var $s=Object.freeze({__proto__:null,name:ks,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);xs(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),_n(r,ks,{elements:[e]})}});await Promise.all(t)}});const Ss="core/title",_s=rn({en:{default_title:"No Title"},de:{default_title:"Kein Titel"},zh:{default_title:"无标题"}});var Cs=Object.freeze({__proto__:null,name:Ss,run:function(e){const t=document.querySelector("h1#title")||Ht`<h1 id="title"></h1>`;if(t.isConnected&&""===t.textContent.trim()){_n('The document is missing a title, so using a default title. To fix this, please give your document a `<title>`. If you need special markup in the document\'s title, please use a `<h1 id="title">`.',Ss,{title:"Document is missing a title",elements:[t]})}t.id||(t.id="title"),t.classList.add("title"),function(e,t){t.isConnected||(t.textContent=document.title||""+_s.default_title);let n=nn(t.textContent);if(e.isPreview&&e.prNumber){const r=e.prUrl||`${e.github.repoURL}pull/${e.prNumber}`,{childNodes:o}=Ht` + https://www.w3.org/TR/ abgerufen werden.`}};Object.keys(gs).forEach(e=>{o[e]||(o[e]={}),Object.assign(o[e],gs[e])});var bs=Object.freeze({__proto__:null,name:"w3c/l10n"});const ws="core/github";let ys,vs;const ks=new Promise((e,t)=>{ys=e,vs=e=>{_n(e,ws),t(new Error(e))}}),xs=rn({en:{file_a_bug:"File a bug",participate:"Participate:",commit_history:"Commit history"},ko:{participate:"참여"},zh:{file_a_bug:"反馈错误",participate:"参与:"},ja:{commit_history:"変更履歴",file_a_bug:"問題報告",participate:"参加方法:"},nl:{commit_history:"Revisiehistorie",file_a_bug:"Dien een melding in",participate:"Doe mee:"},es:{commit_history:"Historia de cambios",file_a_bug:"Nota un bug",participate:"Participe:"},de:{commit_history:"Revisionen",file_a_bug:"Fehler melden",participate:"Mitmachen:"}});var $s=Object.freeze({__proto__:null,name:ws,github:ks,run:async function(e){if(!e.hasOwnProperty("github")||!e.github)return void ys(null);if("object"==typeof e.github&&!e.github.hasOwnProperty("repoURL")){return void vs("Config option `[github](https://github.com/w3c/respec/wiki/github)` is missing property `repoURL`.")}let t,n=e.github.repoURL||e.github;n.endsWith("/")||(n+="/");try{t=new URL(n,"https://github.com")}catch{return void vs(`\`respecConf.github\` is not a valid URL? (${t})`)}if("https://github.com"!==t.origin){return void vs(`\`respecConf.github\` must be HTTPS and pointing to GitHub. (${t})`)}const[r,o]=t.pathname.split("/").filter(e=>e);if(!r||!o){return void vs("`respecConf.github` URL needs a path with, for example, w3c/my-spec")}const s=e.github.branch||"gh-pages",i=new URL("./issues/",t).href,a={edDraftURI:`https://${r.toLowerCase()}.github.io/${o}/`,githubToken:void 0,githubUser:void 0,issueBase:i,atRiskBase:i,otherLinks:[],pullBase:new URL("./pulls/",t).href,shortName:o},c={key:xs.participate,data:[{value:`GitHub ${r}/${o}`,href:t},{value:xs.file_a_bug,href:a.issueBase},{value:xs.commit_history,href:new URL("./commits/"+s,t.href).href},{value:"Pull requests",href:a.pullBase}]};let l="https://respec.org/github";if(e.githubAPI)if(new URL(e.githubAPI).hostname===window.parent.location.hostname)l=e.githubAPI;else{Cn("`respecConfig.githubAPI` should not be added manually.",ws)}const u={branch:s,repoURL:t.href,apiBase:l,fullName:`${r}/${o}`};ys(u);const d={...a,...e,github:u,githubAPI:l};Object.assign(e,d),e.otherLinks.unshift(c)}});const Ss="core/data-include";function _s(e,t,n){const r=document.querySelector(`[data-include-id=${t}]`),o=an(e,r.dataset.oninclude,n),s="string"==typeof r.dataset.includeReplace;!function(e,t,{replace:n}){const{includeFormat:r}=e.dataset;let o=t;"markdown"===r&&(o=Vn(o)),"text"===r?e.textContent=o:e.innerHTML=o,"markdown"===r&&Kn(e),n&&e.replaceWith(...e.childNodes)}(r,o,{replace:s}),s||function(e){["data-include","data-include-format","data-include-replace","data-include-id","oninclude"].forEach(t=>e.removeAttribute(t))}(r)}var Cs=Object.freeze({__proto__:null,name:Ss,run:async function(){const e=document.querySelectorAll("[data-include]"),t=Array.from(e).map(async e=>{const t=e.dataset.include;if(!t)return;const n="include-"+String(Math.random()).substr(2);e.dataset.includeId=n;try{const e=await fetch(t);_s(await e.text(),n,t)}catch(n){const r=`\`data-include\` failed: \`${t}\` (${n.message}).`;console.error(r,e,n),_n(r,Ss,{elements:[e]})}});await Promise.all(t)}});const Es="core/title",Rs=rn({en:{default_title:"No Title"},de:{default_title:"Kein Titel"},zh:{default_title:"无标题"}});var Ts=Object.freeze({__proto__:null,name:Es,run:function(e){const t=document.querySelector("h1#title")||Ht`<h1 id="title"></h1>`;if(t.isConnected&&""===t.textContent.trim()){_n('The document is missing a title, so using a default title. To fix this, please give your document a `<title>`. If you need special markup in the document\'s title, please use a `<h1 id="title">`.',Es,{title:"Document is missing a title",elements:[t]})}t.id||(t.id="title"),t.classList.add("title"),function(e,t){t.isConnected||(t.textContent=document.title||""+Rs.default_title);let n=nn(t.textContent);if(e.isPreview&&e.prNumber){const r=e.prUrl||`${e.github.repoURL}pull/${e.prNumber}`,{childNodes:o}=Ht` Preview of PR <a href="${r}">#${e.prNumber}</a>: - `;t.prepend(...o),n=`Preview of PR #${e.prNumber}: ${n}`}document.title=n,e.title=n}(e,t),document.body.prepend(t)}});const Es="w3c/level",Rs=rn({en:{level:"Level"}});var Ts=Object.freeze({__proto__:null,name:Es,run:function(e){if(!e.hasOwnProperty("level"))return;const t=document.querySelector("h1#title"),n=parseInt(e.level);if(!Number.isInteger(n)||n<0){_n(`The \`level\` configuration option must be a number greater or equal to 0. It is currently set to \`${n}\``,Es,{title:"Invalid level config.",elements:[t]})}else t.append(` ${Rs.level} ${n}`),document.title=`${document.title} ${Rs.level} ${n}`,e.shortName=`${e.shortName}-${n}`,e.level=n}});const As="w3c/abstract",Ls=rn({en:{abstract:"Abstract"},ko:{abstract:"요약"},zh:{abstract:"摘要"},ja:{abstract:"要約"},nl:{abstract:"Samenvatting"},es:{abstract:"Resumen"},de:{abstract:"Zusammenfassung"}});var Ps=Object.freeze({__proto__:null,name:As,run:async function(){const e=document.getElementById("abstract");if(!e){return void _n('Document must have one element with `id="abstract"`.',As)}e.classList.add("introductory");let t=document.querySelector("#abstract>h2");t||(t=document.createElement("h2"),t.textContent=Ls.abstract,e.prepend(t))}});var Is=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=an(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const Ds="core/dfn-abbr";function Ns(e){const t=(n=e).dataset.abbr?n.dataset.abbr:n.textContent.match(/\b([a-z])/gi).join("").toUpperCase();var n;const r=e.textContent.replace(/\s\s+/g," ").trim();e.insertAdjacentHTML("afterend",` (<abbr title="${r}">${t}</abbr>)`);const o=e.dataset.lt||"";e.dataset.lt=o.split("|").filter(e=>e.trim()).concat(t).join("|")}var Os=Object.freeze({__proto__:null,name:Ds,run:function(){const e=document.querySelectorAll("[data-abbr]");for(const t of e){const{localName:e}=t;switch(e){case"dfn":Ns(t);break;default:_n(`\`data-abbr\` attribute not supported on \`${e}\` elements.`,Ds,{elements:[t],title:"Error: unsupported."})}}}});const js=/^[a-z]+(\s+[a-z]+)+$/,zs=/\B"([^"]*)"\B/,Ws=/(\w+)\((.*)\)$/,Ms=/^\[\[(\w+)\]\]$/,Us=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,Fs=/^(\w+)\["([\w- ]*)"\]$/,qs=/\.?(\w+\(.*\)$)/;function Bs(e){const{identifier:t,renderParent:n}=e;if(n)return Ht`<a data-xref-type="_IDL_" data-link-type="idl" + `;t.prepend(...o),n=`Preview of PR #${e.prNumber}: ${n}`}document.title=n,e.title=n}(e,t),document.body.prepend(t)}});const As="w3c/level",Ls=rn({en:{level:"Level"}});var Ps=Object.freeze({__proto__:null,name:As,run:function(e){if(!e.hasOwnProperty("level"))return;const t=document.querySelector("h1#title"),n=parseInt(e.level);if(!Number.isInteger(n)||n<0){_n(`The \`level\` configuration option must be a number greater or equal to 0. It is currently set to \`${n}\``,As,{title:"Invalid level config.",elements:[t]})}else t.append(` ${Ls.level} ${n}`),document.title=`${document.title} ${Ls.level} ${n}`,e.shortName=`${e.shortName}-${n}`,e.level=n}});const Is="w3c/abstract",Ds=rn({en:{abstract:"Abstract"},ko:{abstract:"요약"},zh:{abstract:"摘要"},ja:{abstract:"要約"},nl:{abstract:"Samenvatting"},es:{abstract:"Resumen"},de:{abstract:"Zusammenfassung"}});var Ns=Object.freeze({__proto__:null,name:Is,run:async function(){const e=document.getElementById("abstract");if(!e){return void _n('Document must have one element with `id="abstract"`.',Is)}e.classList.add("introductory");let t=document.querySelector("#abstract>h2");t||(t=document.createElement("h2"),t.textContent=Ds.abstract,e.prepend(t))}});var Os=Object.freeze({__proto__:null,name:"core/data-transform",run:function(){document.querySelectorAll("[data-transform]").forEach(e=>{e.innerHTML=an(e.innerHTML,e.dataset.transform),e.removeAttribute("data-transform")})}});const js="core/dfn-abbr";function zs(e){const t=(n=e).dataset.abbr?n.dataset.abbr:n.textContent.match(/\b([a-z])/gi).join("").toUpperCase();var n;const r=e.textContent.replace(/\s\s+/g," ").trim();e.insertAdjacentHTML("afterend",` (<abbr title="${r}">${t}</abbr>)`);const o=e.dataset.lt||"";e.dataset.lt=o.split("|").filter(e=>e.trim()).concat(t).join("|")}var Ws=Object.freeze({__proto__:null,name:js,run:function(){const e=document.querySelectorAll("[data-abbr]");for(const t of e){const{localName:e}=t;switch(e){case"dfn":zs(t);break;default:_n(`\`data-abbr\` attribute not supported on \`${e}\` elements.`,js,{elements:[t],title:"Error: unsupported."})}}}});const Ms=/^[a-z]+(\s+[a-z]+)+$/,Us=/\B"([^"]*)"\B/,Fs=/(\w+)\((.*)\)$/,qs=/^\[\[(\w+)\]\]$/,Bs=/^((?:\[\[)?(?:\w+)(?:\]\])?)$/,Hs=/^(\w+)\["([\w- ]*)"\]$/,Gs=/\.?(\w+\(.*\)$)/;function Vs(e){const{identifier:t,renderParent:n}=e;if(n)return Ht`<a data-xref-type="_IDL_" data-link-type="idl" ><code>${t}</code></a - >`}function Hs(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Ht`${n&&r?".":""}<a + >`}function Zs(e){const{identifier:t,parent:n,renderParent:r}=e,{identifier:o}=n||{};return Ht`${n&&r?".":""}<a data-xref-type="attribute" data-link-for=${o} data-xref-for=${o} data-lt="${`[[${t}]]`}" ><code>[[${t}]]</code></a - >`}function Gs(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Ht`${r?".":""}<a + >`}function Ys(e){const{parent:t,identifier:n,renderParent:r}=e,{identifier:o}=t||{};return Ht`${r?".":""}<a data-link-type="idl" data-xref-type="attribute|dict-member" data-link-for="${o}" data-xref-for="${o}" ><code>${n}</code></a - >`}function Vs(e){const{args:t,identifier:n,type:r,parent:o,renderParent:s}=e,{identifier:i}=o||{},a=ln(t,e=>Ht`<var>${e}</var>`),c=`${n}(${t.join(", ")})`;return Ht`${o&&s?".":""}<a + >`}function Js(e){const{args:t,identifier:n,type:r,parent:o,renderParent:s}=e,{identifier:i}=o||{},a=ln(t,e=>Ht`<var>${e}</var>`),c=`${n}(${t.join(", ")})`;return Ht`${o&&s?".":""}<a data-link-type="idl" data-xref-type="${r}" data-link-for="${i}" data-xref-for="${i}" data-lt="${c}" ><code>${n}</code></a - ><code>(${a})</code>`}function Zs(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Ht`"<a + ><code>(${a})</code>`}function Ks(e){const{identifier:t,enumValue:n,parent:r}=e,o=r?r.identifier:t;return Ht`"<a data-link-type="idl" data-xref-type="enum-value" data-link-for="${o}" data-xref-for="${o}" data-lt="${n?null:"the-empty-string"}" ><code>${n}</code></a - >"`}function Ys(e){const{identifier:t}=e;return Ht`"<a + >"`}function Xs(e){const{identifier:t}=e;return Ht`"<a data-link-type="idl" data-cite="WebIDL" data-xref-type="exception" ><code>${t}</code></a - >"`}function Js(e){const{identifier:t}=e;return Ht`<a + >"`}function Qs(e){const{identifier:t}=e;return Ht`<a data-link-type="idl" data-cite="WebIDL" data-xref-type="interface" ><code>${t}</code></a - >`}function Ks(e){let t;try{t=function(e){const[t,n]=e.split(qs),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),s=[];for(;r.length;){const t=r.pop();if(Ws.test(t)){const[,e,n]=t.match(Ws),r=n.split(/,\s*/).filter(e=>e);s.push({type:"method",identifier:e,args:r,renderParent:o})}else if(Fs.test(t)){const[,e,n]=t.match(Fs);s.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(zs.test(t)){const[,e]=t.match(zs);o?s.push({type:"exception",identifier:e}):s.push({type:"enum",enumValue:e,renderParent:o})}else if(Ms.test(t)){const[,e]=t.match(Ms);s.push({type:"internal-slot",identifier:e,renderParent:o})}else if(Us.test(t)&&r.length){const[,e]=t.match(Us);s.push({type:"attribute",identifier:e,renderParent:o})}else if(js.test(t))s.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!Us.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);s.push({type:"base",identifier:t,renderParent:o})}}return s.forEach((e,t,n)=>{e.parent=n[t+1]||null}),s.reverse()}(e)}catch(t){const n=Ht`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return _n(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Ht(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=Bs(e);t&&r.push(t);break}case"attribute":r.push(Gs(e));break;case"internal-slot":r.push(Hs(e));break;case"method":r.push(Vs(e));break;case"enum":r.push(Zs(e));break;case"exception":r.push(Ys(e));break;case"idl-primitive":r.push(Js(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const Xs=new Set(["alias","reference"]),Qs=async function(){return await qt.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const ei={get ready(){return Qs},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!Xs.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!Xs.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...Xs].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!Xs.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...Xs],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},ti={},ni=new URL("https://api.specref.org/bibrefs?refs="),ri=Xt({hint:"dns-prefetch",href:ni.origin});let oi;document.head.appendChild(ri);const si=new Promise(e=>{oi=e});async function ii(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(ni.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await ei.addAll(o)}catch(e){console.error(e)}return o}async function ai(e){const t=await si;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await ai(n.aliasOf):n}var ci=Object.freeze({__proto__:null,biblio:ti,name:"core/biblio",updateFromNetwork:ii,resolveRef:ai,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=ti;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await ei.ready;const n=e.map(async e=>({id:e,data:await ei.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{ti[e.id]=e.data});const s=o.noData.map(e=>e.id);if(s.length){const e=await ii(s,{forceUpdate:!0});Object.assign(ti,e)}Object.assign(ti,this.conf.localBiblio),(()=>{oi(this.conf.biblio)})()}}});const li="core/render-biblio",ui=rn({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),di=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),pi=(fi=".",e=>{const t=e.trim();return!t||t.endsWith(fi)?t:t+fi});var fi;function hi(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(mi)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),s=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),i=Ht`<section> + >`}function ei(e){let t;try{t=function(e){const[t,n]=e.split(Gs),r=t.split(/[./]/).concat(n).filter(e=>e&&e.trim()).map(e=>e.trim()),o=!e.includes("/"),s=[];for(;r.length;){const t=r.pop();if(Fs.test(t)){const[,e,n]=t.match(Fs),r=n.split(/,\s*/).filter(e=>e);s.push({type:"method",identifier:e,args:r,renderParent:o})}else if(Hs.test(t)){const[,e,n]=t.match(Hs);s.push({type:"enum",identifier:e,enumValue:n,renderParent:o})}else if(Us.test(t)){const[,e]=t.match(Us);o?s.push({type:"exception",identifier:e}):s.push({type:"enum",enumValue:e,renderParent:o})}else if(qs.test(t)){const[,e]=t.match(qs);s.push({type:"internal-slot",identifier:e,renderParent:o})}else if(Bs.test(t)&&r.length){const[,e]=t.match(Bs);s.push({type:"attribute",identifier:e,renderParent:o})}else if(Ms.test(t))s.push({type:"idl-primitive",identifier:t,renderParent:o});else{if(!Bs.test(t)||0!==r.length)throw new SyntaxError(`IDL micro-syntax parsing error in \`{{ ${e} }}\``);s.push({type:"base",identifier:t,renderParent:o})}}return s.forEach((e,t,n)=>{e.parent=n[t+1]||null}),s.reverse()}(e)}catch(t){const n=Ht`<span>{{ ${e} }}</span>`,r="Error: Invalid inline IDL string.";return _n(t.message,"core/inlines",{title:r,elements:[n]}),n}const n=Ht(document.createDocumentFragment()),r=[];for(const e of t)switch(e.type){case"base":{const t=Vs(e);t&&r.push(t);break}case"attribute":r.push(Ys(e));break;case"internal-slot":r.push(Zs(e));break;case"method":r.push(Js(e));break;case"enum":r.push(Ks(e));break;case"exception":r.push(Xs(e));break;case"idl-primitive":r.push(Qs(e));break;default:throw new Error("Unknown type.")}return n`${r}`}const ti=new Set(["alias","reference"]),ni=async function(){return await qt.openDB("respec-biblio2",12,{upgrade(e){Array.from(e.objectStoreNames).map(t=>e.deleteObjectStore(t));e.createObjectStore("alias",{keyPath:"id"}).createIndex("aliasOf","aliasOf",{unique:!1}),e.createObjectStore("reference",{keyPath:"id"})}})}();const ri={get ready(){return ni},async find(e){return await this.isAlias(e)&&(e=await this.resolveAlias(e)),await this.get("reference",e)},async has(e,t){if(!ti.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t);return!!await n.openCursor(r)},async isAlias(e){return await this.has("alias",e)},async resolveAlias(e){if(!e)throw new TypeError("id is required");const t=(await this.ready).transaction("alias","readonly").store,n=IDBKeyRange.only(e),r=await t.openCursor(n);return r?r.value.aliasOf:r},async get(e,t){if(!ti.has(e))throw new TypeError("Invalid type: "+e);if(!t)throw new TypeError("id is required");const n=(await this.ready).transaction(e,"readonly").store,r=IDBKeyRange.only(t),o=await n.openCursor(r);return o?o.value:o},async addAll(e){if(!e)return;const t={alias:[],reference:[]};for(const n of Object.keys(e)){const r={id:n,...e[n]};r.aliasOf?t.alias.push(r):t.reference.push(r)}const n=[...ti].flatMap(e=>t[e].map(t=>this.add(e,t)));await Promise.all(n)},async add(e,t){if(!ti.has(e))throw new TypeError("Invalid type: "+e);if("object"!=typeof t)throw new TypeError("details should be an object");if("alias"===e&&!t.hasOwnProperty("aliasOf"))throw new TypeError("Invalid alias object.");const n=await this.ready,r=await this.has(e,t.id),o=n.transaction(e,"readwrite").store;return r?await o.put(t):await o.add(t)},async close(){(await this.ready).close()},async clear(){const e=await this.ready,t=[...ti],n=e.transaction(t,"readwrite"),r=t.map(e=>n.objectStore(e).clear());await Promise.all(r)}},oi={},si=new URL("https://api.specref.org/bibrefs?refs="),ii=Xt({hint:"dns-prefetch",href:si.origin});let ai;document.head.appendChild(ii);const ci=new Promise(e=>{ai=e});async function li(e,t={forceUpdate:!1}){const n=[...new Set(e)].filter(e=>e.trim());if(!n.length||!1===navigator.onLine)return null;let r;try{r=await fetch(si.href+n.join(","))}catch(e){return console.error(e),null}if(!t.forceUpdate&&!r.ok||200!==r.status)return null;const o=await r.json();try{await ri.addAll(o)}catch(e){console.error(e)}return o}async function ui(e){const t=await ci;if(!t.hasOwnProperty(e))return null;const n=t[e];return n.aliasOf?await ui(n.aliasOf):n}var di=Object.freeze({__proto__:null,biblio:oi,name:"core/biblio",updateFromNetwork:li,resolveRef:ui,Plugin:class{constructor(e){this.conf=e}normalizeReferences(){const e=new Set([...this.conf.normativeReferences].map(e=>e.toLowerCase()));Array.from(this.conf.informativeReferences).filter(t=>e.has(t.toLowerCase())).forEach(e=>this.conf.informativeReferences.delete(e))}getRefKeys(){return{informativeReferences:Array.from(this.conf.informativeReferences),normativeReferences:Array.from(this.conf.normativeReferences)}}async run(){this.conf.localBiblio||(this.conf.localBiblio={}),this.conf.biblio=oi;const e=Object.keys(this.conf.localBiblio).filter(e=>this.conf.localBiblio[e].hasOwnProperty("aliasOf")).map(e=>this.conf.localBiblio[e].aliasOf).filter(e=>!this.conf.localBiblio.hasOwnProperty(e));this.normalizeReferences();const t=this.getRefKeys(),n=Array.from(new Set(t.normativeReferences.concat(t.informativeReferences).filter(e=>!this.conf.localBiblio.hasOwnProperty(e)).concat(e).sort())),r=await async function(e){const t=[];try{await ri.ready;const n=e.map(async e=>({id:e,data:await ri.find(e)}));t.push(...await Promise.all(n))}catch(n){t.push(...e.map(e=>({id:e,data:null}))),console.warn(n)}return t}(n),o={hasData:[],noData:[]};r.forEach(e=>{(e.data?o.hasData:o.noData).push(e)}),o.hasData.forEach(e=>{oi[e.id]=e.data});const s=o.noData.map(e=>e.id);if(s.length){const e=await li(s,{forceUpdate:!0});Object.assign(oi,e)}Object.assign(oi,this.conf.localBiblio),(()=>{ai(this.conf.biblio)})()}}});const pi="core/render-biblio",fi=rn({en:{info_references:"Informative references",norm_references:"Normative references",references:"References"},ko:{references:"참조"},nl:{info_references:"Informatieve referenties",norm_references:"Normatieve referenties",references:"Referenties"},es:{info_references:"Referencias informativas",norm_references:"Referencias normativas",references:"Referencias"},ja:{info_references:"参照用参考文献",norm_references:"規範的参考文献",references:"参考文献"},de:{info_references:"Weiterführende Informationen",norm_references:"Normen und Spezifikationen",references:"Referenzen"},zh:{info_references:"非规范性引用",norm_references:"规范性引用",references:"参考文献"}}),hi=new Map([["CR","W3C Candidate Recommendation"],["ED","W3C Editor's Draft"],["FPWD","W3C First Public Working Draft"],["LCWD","W3C Last Call Working Draft"],["NOTE","W3C Note"],["PER","W3C Proposed Edited Recommendation"],["PR","W3C Proposed Recommendation"],["REC","W3C Recommendation"],["WD","W3C Working Draft"],["WG-NOTE","W3C Working Group Note"]]),mi=(gi=".",e=>{const t=e.trim();return!t||t.endsWith(gi)?t:t+gi});var gi;function bi(e,t){const{goodRefs:n,badRefs:r}=function(e){const t=[],n=[];for(const r of e)r.refcontent?t.push(r):n.push(r);return{goodRefs:t,badRefs:n}}(e.map(wi)),o=function(e){const t=new Map;for(const n of e)t.has(n.refcontent.id)||t.set(n.refcontent.id,n);return[...t.values()]}(n),s=o.concat(r).sort((e,t)=>e.ref.toLocaleLowerCase().localeCompare(t.ref.toLocaleLowerCase())),i=Ht`<section> <h3>${t}</h3> - <dl class="bibliography">${s.map(bi)}</dl> - </section>`;pn(i,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());_n(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,li),console.warn("Bad references: ",t)})}(r),i}function mi(e){let t=ti[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;_n(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,li)}else n=t.aliasOf,t=ti[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function gi(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Ht`<cite + <dl class="bibliography">${s.map(vi)}</dl> + </section>`;pn(i,"",t);return function(e,t){e.map(({ref:e,refcontent:n})=>{const r="#bib-"+e.toLowerCase(),o=t.get(n.id).map(e=>`a.bibref[href="#bib-${e.toLowerCase()}"]`).join(",");return{refUrl:r,elems:document.querySelectorAll(o),refcontent:n}}).forEach(({refUrl:e,elems:t,refcontent:n})=>{t.forEach(t=>{t.setAttribute("href",e),t.setAttribute("title",n.title),t.dataset.linkType="biblio"})})}(o,function(e){return e.reduce((e,t)=>{const n=t.refcontent.id;return(e.has(n)?e.get(n):e.set(n,[]).get(n)).push(t.ref),e},new Map)}(n)),function(e){e.forEach(({ref:e})=>{const t=[...document.querySelectorAll(`a.bibref[href="#bib-${e.toLowerCase()}"]`)].filter(({textContent:t})=>t.toLowerCase()===e.toLowerCase());_n(`Bad reference: [\`${e}\`] (appears ${t.length} times)`,pi),console.warn("Bad references: ",t)})}(r),i}function wi(e){let t=oi[e],n=e;const r=new Set([n]);for(;t&&t.aliasOf;)if(r.has(t.aliasOf)){t=null;_n(`Circular reference in biblio DB between [\`${e}\`] and [\`${n}\`].`,pi)}else n=t.aliasOf,t=oi[n],r.add(n);return t&&!t.id&&(t.id=e.toLowerCase()),{ref:e,refcontent:t}}function yi(e,t){const n=e.replace(/^(!|\?)/,""),r="#bib-"+n.toLowerCase(),o=Ht`<cite ><a class="bibref" href="${r}" data-link-type="biblio">${t||n}</a></cite - >`;return t?o:Ht`[${o}]`}function bi({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Ht` + >`;return t?o:Ht`[${o}]`}function vi({ref:e,refcontent:t}){const n="bib-"+e.toLowerCase();return t?Ht` <dt id="${n}">[${e}]</dt> - <dd>${{html:wi(t)}}</dd> + <dd>${{html:ki(t)}}</dd> `:Ht` <dt id="${n}">[${e}]</dt> <dd><em class="respec-offending-element">Reference not found.</em></dd> - `}function wi(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${pi(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(di.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var yi=Object.freeze({__proto__:null,name:li,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Ht`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Ht`<h2>${ui.references}</h2>`),r.classList.add("appendix"),n.length){const e=hi(n,ui.norm_references);r.appendChild(e)}if(t.length){const e=hi(t,ui.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:gi});const vi="core/inlines",ki={},xi=rn({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),$i=/(?:`[^`]+`)(?!`)/,Si=/(?:{{[^}]+}})/,_i=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,Ci=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,Ei=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,Ri=/(?:\[=[^=]+=\])/,Ti=/(?:\[\^[^^]+\^\])/;function Ai(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[s,i,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Ht`<code + `}function ki(e){if("string"==typeof e)return e;let t=`<cite>${e.title}</cite>`;return t=e.href?`<a href="${e.href}">${t}</a>. `:t+". ",e.authors&&e.authors.length&&(t+=e.authors.join("; "),e.etAl&&(t+=" et al"),t+=". "),e.publisher&&(t=`${t} ${mi(e.publisher)} `),e.date&&(t+=e.date+". "),e.status&&(t+=(hi.get(e.status)||e.status)+". "),e.href&&(t+=`URL: <a href="${e.href}">${e.href}</a>`),t}var xi=Object.freeze({__proto__:null,name:pi,run:function(e){const t=Array.from(e.informativeReferences),n=Array.from(e.normativeReferences);if(!t.length&&!n.length)return;const r=document.querySelector("section#references")||Ht`<section id="references"></section>`;if(document.querySelector("section#references > h2")||r.prepend(Ht`<h2>${fi.references}</h2>`),r.classList.add("appendix"),n.length){const e=bi(n,fi.norm_references);r.appendChild(e)}if(t.length){const e=bi(t,fi.info_references);r.appendChild(e)}document.body.appendChild(r)},renderInlineCitation:yi});const $i="core/inlines",Si={},_i=rn({en:{rfc2119Keywords:()=>new RegExp(["\\bMUST(?:\\s+NOT)?\\b","\\bSHOULD(?:\\s+NOT)?\\b","\\bSHALL(?:\\s+NOT)?\\b","\\bMAY\\b","\\b(?:NOT\\s+)?REQUIRED\\b","\\b(?:NOT\\s+)?RECOMMENDED\\b","\\bOPTIONAL\\b"].join("|"))},de:{rfc2119Keywords:()=>new RegExp(["\\bMUSS\\b","\\bERFORDERLICH\\b","\\b(?:NICHT\\s+)?NÖTIG\\b","\\bDARF(?:\\s+NICHT)?\\b","\\bVERBOTEN\\b","\\bSOLL(?:\\s+NICHT)?\\b","\\b(?:NICHT\\s+)?EMPFOHLEN\\b","\\bKANN\\b","\\bOPTIONAL\\b"].join("|"))}}),Ci=/(?:`[^`]+`)(?!`)/,Ei=/(?:{{[^}]+}})/,Ri=/\B\|\w[\w\s]*(?:\s*:[\w\s&;<>]+)?\|\B/,Ti=/(?:\[\[(?:!|\\|\?)?[\w.-]+(?:|[^\]]+)?\]\])/,Ai=/(?:\[\[\[(?:!|\\|\?)?#?[\w-.]+\]\]\])/,Li=/(?:\[=[^=]+=\])/,Pi=/(?:\[\^[^^]+\^\])/;function Ii(e){const t=e.slice(2,-2).trim(),[n,r,o]=t.split("/",3).map(e=>e&&e.trim()).filter(e=>!!e),[s,i,a]=o?["attr-value",`${n}/${r}`,o]:r?["element-attr",n,r]:["element",null,n];return Ht`<code ><a data-xref-type="${s}" data-xref-for="${i}" >${a}</a ></code - >`}function Li(e){const t=nn(e),n=Ht`<em class="rfc2119">${t}</em>`;return ki[t]=!0,n}function Pi(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Ht`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Ht`<a href="${t}"></a>`;const n=Ht`<span>${e}</span>`;return _n(`Wasn't able to expand ${e} as it didn't match any id in the document.`,vi,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function Ii(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):Ks(nn(t))}function Di(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,s]=r.split("|").map(nn),{type:i,illegal:a}=mn(o,t.parentNode),c=gi(o,s),l=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(l)){const e=c.childNodes[1]||c;Cn("Normative references in informative sections are not allowed. ",vi,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==i||a?n.normativeReferences.add(l):n.informativeReferences.add(l),c.childNodes[1]?c.childNodes:[c]}function Ni(e,t,n){return"ABBR"===t.parentElement.tagName?e:Ht`<abbr title="${n.get(e)}">${e}</abbr>`}function Oi(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Ht`<var data-type="${r}">${n}</var>`}function ji(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,s]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],i=Wi(s),a=n?nn(n):null;return Ht`<a + >`}function Di(e){const t=nn(e),n=Ht`<em class="rfc2119">${t}</em>`;return Si[t]=!0,n}function Ni(e){const t=e.slice(3,-3).trim();if(!t.startsWith("#"))return Ht`<a data-cite="${t}"></a>`;if(document.querySelector(t))return Ht`<a href="${t}"></a>`;const n=Ht`<span>${e}</span>`;return _n(`Wasn't able to expand ${e} as it didn't match any id in the document.`,$i,{hint:`Please make sure there is element with id ${t} in the document.`,elements:[n]}),n}function Oi(e){const t=e.slice(2,-2).trim();return t.startsWith("\\")?e.replace("\\",""):ei(nn(t))}function ji(e,t,n){const r=e.slice(2,-2);if(r.startsWith("\\"))return[`[[${r.slice(1)}]]`];const[o,s]=r.split("|").map(nn),{type:i,illegal:a}=mn(o,t.parentNode),c=yi(o,s),l=o.replace(/^(!|\?)/,"");if(a&&!n.normativeReferences.has(l)){const e=c.childNodes[1]||c;Cn("Normative references in informative sections are not allowed. ",$i,{elements:[e],hint:`Remove '!' from the start of the reference \`[[${r}]]\``})}return"informative"!==i||a?n.normativeReferences.add(l):n.informativeReferences.add(l),c.childNodes[1]?c.childNodes:[c]}function zi(e,t,n){return"ABBR"===t.parentElement.tagName?e:Ht`<abbr title="${n.get(e)}">${e}</abbr>`}function Wi(e){const t=e.slice(1,-1).split(":",2),[n,r]=t.map(e=>e.trim());return Ht`<var data-type="${r}">${n}</var>`}function Mi(e){const t=function(e,t=1/0){return e.replace("\\/","%%").split("/",t).map(e=>e&&e.trim().replace("%%","/"))}(e=e.slice(2,-2),2),[n,r]=2===t.length?t:[null,t[0]],[o,s]=r.includes("|")?r.split("|",2).map(e=>e.trim()):[null,r],i=Fi(s),a=n?nn(n):null;return Ht`<a data-link-type="dfn" data-link-for="${a}" data-xref-for="${a}" data-lt="${o}" >${i}</a - >`}function zi(e){const t=e.slice(1,-1);return Ht`<code>${t}</code>`}function Wi(e){return $i.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?zi(e):Wi(e)):document.createTextNode(e)}var Mi=Object.freeze({__proto__:null,name:vi,rfc2119Usage:ki,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new yn,e.informativeReferences=new yn,e.respecRFC2119||(e.respecRFC2119=ki);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,s=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),s=[];let i;for(;i=o.nextNode();)s.push(i);return s}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),i=xi.rfc2119Keywords(),a=new RegExp(`(${[i.source,Si.source,_i.source,Ci.source,Ei.source,Ri.source,$i.source,Ti.source,...o?[o]:[]].join("|")})`);for(const n of s){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let s=!0;for(const a of r)if(s=!s,s)if(a.startsWith("{{")){const e=Ii(a);o.append(e)}else if(a.startsWith("[[[")){const e=Pi(a);o.append(e)}else if(a.startsWith("[[")){const t=Di(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=Oi(a);o.append(e)}else if(a.startsWith("[=")){const e=ji(a);o.append(e)}else if(a.startsWith("`")){const e=zi(a);o.append(e)}else if(a.startsWith("[^")){const e=Ai(a);o.append(e)}else if(t.has(a)){const e=Ni(a,n,t);o.append(e)}else{if(!i.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=Li(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const Ui="w3c/conformance",Fi=rn({en:{conformance:"Conformance",normativity:"As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.",keywordInterpretation:(e,t)=>Ht`<p> + >`}function Ui(e){const t=e.slice(1,-1);return Ht`<code>${t}</code>`}function Fi(e){return Ci.test(e)?e.split(/(`[^`]+`)(?!`)/).map(e=>e.startsWith("`")?Ui(e):Fi(e)):document.createTextNode(e)}var qi=Object.freeze({__proto__:null,name:$i,rfc2119Usage:Si,run:function(e){const t=new Map;document.normalize(),document.querySelector("section#conformance")||document.body.classList.add("informative"),e.normativeReferences=new yn,e.informativeReferences=new yn,e.respecRFC2119||(e.respecRFC2119=Si);const n=document.querySelectorAll("abbr[title]");for(const e of n)t.set(e.textContent,e.title);const r=[...t.keys()],o=r.length?`(?:\\b${r.join("\\b)|(?:\\b")}\\b)`:null,s=function(e,t=[],n={wsNodes:!0}){const r=t.join(", "),o=document.createNodeIterator(e,NodeFilter.SHOW_TEXT,e=>n.wsNodes||e.data.trim()?r&&e.parentElement.closest(r)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT),s=[];let i;for(;i=o.nextNode();)s.push(i);return s}(document.body,["#respec-ui",".head","pre"],{wsNodes:!1}),i=_i.rfc2119Keywords(),a=new RegExp(`(${[i.source,Ei.source,Ri.source,Ti.source,Ai.source,Li.source,Ci.source,Pi.source,...o?[o]:[]].join("|")})`);for(const n of s){const r=n.data.split(a);if(1===r.length)continue;const o=document.createDocumentFragment();let s=!0;for(const a of r)if(s=!s,s)if(a.startsWith("{{")){const e=Oi(a);o.append(e)}else if(a.startsWith("[[[")){const e=Ni(a);o.append(e)}else if(a.startsWith("[[")){const t=ji(a,n,e);o.append(...t)}else if(a.startsWith("|")){const e=Wi(a);o.append(e)}else if(a.startsWith("[=")){const e=Mi(a);o.append(e)}else if(a.startsWith("`")){const e=Ui(a);o.append(e)}else if(a.startsWith("[^")){const e=Ii(a);o.append(e)}else if(t.has(a)){const e=zi(a,n,t);o.append(e)}else{if(!i.test(a))throw new Error(`Found token '${a}' but it does not correspond to anything`);{const e=Di(a);o.append(e)}}else o.append(a);n.replaceWith(o)}}});const Bi="w3c/conformance",Hi=rn({en:{conformance:"Conformance",normativity:"As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.",keywordInterpretation:(e,t)=>Ht`<p> The key word${t?"s":""} ${e} in this document ${t?"are":"is"} to be interpreted as described in <a href="https://datatracker.ietf.org/doc/html/bcp14">BCP 14</a> - ${gi("RFC2119")} ${gi("RFC8174")} + ${yi("RFC2119")} ${yi("RFC8174")} when, and only when, they appear in all capitals, as shown here. </p>`},de:{conformance:"Anforderungen",normativity:"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument nicht normativ. Alle anderen Angaben sind normativ.",keywordInterpretation:(e,t)=>Ht`<p> ${t?"Die Schlüsselwörter":"Das Schlüsselwort"} ${e} in diesem Dokument ${t?"sind":"ist"} gemäß <a href="https://datatracker.ietf.org/doc/html/bcp14">BCP 14</a> - ${gi("RFC2119")} ${gi("RFC8174")} + ${yi("RFC2119")} ${yi("RFC8174")} und unter Berücksichtigung von <a href="https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst" >2119de</a > zu interpretieren, wenn und nur wenn ${t?"sie":"es"} wie hier gezeigt durchgehend groß geschrieben wurde${t?"n":""}. - </p>`}});var qi=Object.freeze({__proto__:null,name:Ui,run:function(e){const t=document.querySelector("section#conformance");if(t&&!t.classList.contains("override")&&function(e,t){const n=[...Object.keys(ki)];n.length&&(t.normativeReferences.add("RFC2119"),t.normativeReferences.add("RFC8174"));const r=un(n.sort(),e=>Ht`<em class="rfc2119">${e}</em>`),o=n.length>1,s=Ht` - <h2>${Fi.conformance}</h2> - <p>${Fi.normativity}</p> - ${n.length?Fi.keywordInterpretation(r,o):null} - `;e.prepend(...s.childNodes)}(t,e),!t&&Object.keys(ki).length){Cn("Document uses RFC2119 keywords but lacks a conformance section.",Ui,{hint:'Please add a `<section id="conformance">`.'})}}});const Bi=new $n;function Hi(e,t){for(const n of t)Bi.has(n)||Bi.set(n,new Set),Bi.get(n).add(e)}var Gi=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=fn(e);Hi(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===nn(e.textContent)||(e.dataset.lt=t.join("|"))})}});var Vi=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=nn(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=nn(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=nn(n).toLowerCase(),o=Vt.isSingular(r)?Vt.plural(r):Vt.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),Hi(e,n)}})}});var Zi=String.raw`span.example-title{text-transform:none} + </p>`}});var Gi=Object.freeze({__proto__:null,name:Bi,run:function(e){const t=document.querySelector("section#conformance");if(t&&!t.classList.contains("override")&&function(e,t){const n=[...Object.keys(Si)];n.length&&(t.normativeReferences.add("RFC2119"),t.normativeReferences.add("RFC8174"));const r=un(n.sort(),e=>Ht`<em class="rfc2119">${e}</em>`),o=n.length>1,s=Ht` + <h2>${Hi.conformance}</h2> + <p>${Hi.normativity}</p> + ${n.length?Hi.keywordInterpretation(r,o):null} + `;e.prepend(...s.childNodes)}(t,e),!t&&Object.keys(Si).length){Cn("Document uses RFC2119 keywords but lacks a conformance section.",Bi,{hint:'Please add a `<section id="conformance">`.'})}}});const Vi=new $n;function Zi(e,t){for(const n of t)Vi.has(n)||Vi.set(n,new Set),Vi.get(n).add(e)}var Yi=Object.freeze({__proto__:null,name:"core/dfn",run:function(){document.querySelectorAll("dfn").forEach(e=>{const t=fn(e);Zi(e,t),!e.dataset.dfnType&&/^\[\[\w+\]\]$/.test(t[0])&&(e.dataset.dfnType="idl");const n=e.dataset;!n.dfnType||"dfn"===n.dfnType||n.cite||n.noExport||(e.dataset.export=""),1===t.length&&t[0]===nn(e.textContent)||(e.dataset.lt=t.join("|"))})}});var Ji=Object.freeze({__proto__:null,name:"core/pluralize",run:function(e){if(!e.pluralize)return;const t=function(){const e=new Set;document.querySelectorAll("a:not([href])").forEach(t=>{const n=nn(t.textContent).toLowerCase();e.add(n),t.dataset.lt&&e.add(t.dataset.lt)});const t=new Set;return document.querySelectorAll("dfn:not([data-lt-noDefault])").forEach(e=>{const n=nn(e.textContent).toLowerCase();t.add(n),e.dataset.lt&&e.dataset.lt.split("|").forEach(e=>t.add(e)),e.dataset.localLt&&e.dataset.localLt.split("|").forEach(e=>t.add(e))}),function(n){const r=nn(n).toLowerCase(),o=Vt.isSingular(r)?Vt.plural(r):Vt.singular(r);return e.has(o)&&!t.has(o)?o:""}}();document.querySelectorAll("dfn:not([data-lt-no-plural]):not([data-lt-noDefault])").forEach(e=>{const n=[e.textContent];e.dataset.lt&&n.push(...e.dataset.lt.split("|")),e.dataset.localLt&&n.push(...e.dataset.localLt.split("|"));const r=new Set(n.map(t).filter(e=>e));if(r.size){const t=e.dataset.plurals?e.dataset.plurals.split("|"):[],n=[...new Set([...t,...r])];e.dataset.plurals=n.join("|"),Zi(e,n)}})}});var Ki=String.raw`span.example-title{text-transform:none} aside.example,div.example,div.illegal-example{padding:.5em;margin:1em 0;position:relative;clear:both} div.illegal-example{color:red} div.illegal-example p{color:#000} aside.example,div.example{padding:.5em;border-left-width:.5em;border-left-style:solid;border-color:#e0cb52;background:#fcfaee} aside.example div.example{border-left-width:.1em;border-color:#999;background:#fff} aside.example div.example span.example-title{color:#999} -.example pre{background-color:rgba(0,0,0,.03)}`;const Yi=rn({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}});function Ji(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Ht`<span class="example-title">: ${n.title}</span>`:"";return Ht`<div class="marker"> - <a class="self-link">${Yi.example}<bdi>${r}</bdi></a +.example pre{background-color:rgba(0,0,0,.03)}`;const Xi=rn({en:{example:"Example"},nl:{example:"Voorbeeld"},es:{example:"Ejemplo"},ko:{example:"예시"},ja:{example:"例"},de:{example:"Beispiel"},zh:{example:"例"}});function Qi(e,t,n){n.title=e.title,n.title&&e.removeAttribute("title");const r=t>0?" "+t:"",o=n.title?Ht`<span class="example-title">: ${n.title}</span>`:"";return Ht`<div class="marker"> + <a class="self-link">${Xi.example}<bdi>${r}</bdi></a >${o} - </div>`}var Ki=Object.freeze({__proto__:null,name:"core/examples",run:function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;document.head.insertBefore(Ht`<style> - ${Zi} - </style>`,document.querySelector("link"));let t=0;e.forEach(e=>{const n=e.classList.contains("illegal-example"),r={number:t,illegal:n},{title:o}=e;if("aside"===e.localName){++t;const n=Ji(e,t,r);e.prepend(n),o?pn(e,"example-"+t,o):pn(e,"example",String(t));const{id:s}=e;n.querySelector("a.self-link").href="#"+s,An("example",r)}else{const n=!!e.closest("aside");n||++t,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const s=e.id?e.id:null;s&&e.removeAttribute("id");const i=Ji(e,n?0:t,r),a=Ht`<div class="example" id="${s}"> + </div>`}var ea=Object.freeze({__proto__:null,name:"core/examples",run:function(){const e=document.querySelectorAll("pre.example, pre.illegal-example, aside.example");if(!e.length)return;document.head.insertBefore(Ht`<style> + ${Ki} + </style>`,document.querySelector("link"));let t=0;e.forEach(e=>{const n=e.classList.contains("illegal-example"),r={number:t,illegal:n},{title:o}=e;if("aside"===e.localName){++t;const n=Qi(e,t,r);e.prepend(n),o?pn(e,"example-"+t,o):pn(e,"example",String(t));const{id:s}=e;n.querySelector("a.self-link").href="#"+s,An("example",r)}else{const n=!!e.closest("aside");n||++t,r.content=e.innerHTML,e.classList.remove("example","illegal-example");const s=e.id?e.id:null;s&&e.removeAttribute("id");const i=Qi(e,n?0:t,r),a=Ht`<div class="example" id="${s}"> ${i} ${e.cloneNode(!0)} - </div>`;o&&pn(a,"example-"+t,o),pn(a,"example",String(t));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),n||An("example",r)}})}});var Xi=String.raw`.issue-label{text-transform:initial} + </div>`;o&&pn(a,"example-"+t,o),pn(a,"example",String(t));a.querySelector("a.self-link").href="#"+a.id,e.replaceWith(a),n||An("example",r)}})}});var ta=String.raw`.issue-label{text-transform:initial} .warning>p:first-child{margin-top:0} .warning{padding:.5em;border-left-width:.5em;border-left-style:solid} span.warning{padding:.1em .5em .15em} @@ -776,22 +778,22 @@ span.warning{padding:.1em .5em .15em} .warning-title:before{content:"⚠";font-size:1.3em;float:left;padding-right:.3em;margin-top:-.3em} li.task-list-item{list-style:none} input.task-list-item-checkbox{margin:0 .35em .25em -1.6em;vertical-align:middle} -.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}`;const Qi="core/issues-notes",ea=rn({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function ta(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:s,displayType:i,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),s=t?"issue":n?"warning":r?"ednote":"note",i=t?o?ea.feature_at_risk:ea.issue:n?ea.warning:r?ea.editors_note:ea.note;return{type:s,displayType:i,isFeatureAtRisk:o}}(e),c="issue"===s,l="span"===e.localName,{number:u}=e.dataset,d={type:s,inline:l,title:e.title,number:r(e)};if(!l){const r=Ht`<div class="${a?s+" atrisk":s}" role="${"note"===s?"note":null}"></div>`,l=document.createElement("span"),p=Ht`<div role="heading" class="${s+"-title marker"}">${l}</div>`;pn(p,"h",s);let f,h=i;if(e.id?(r.id=e.id,e.removeAttribute("id")):pn(r,"issue-container",d.number?"number-"+d.number:""),c){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Ht`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Ht`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(l.before(e),e.append(l)),l.classList.add("issue-number"),f=t.get(u),!f){Cn(`Failed to fetch issue number ${u}.`,Qi)}f&&!d.title&&(d.title=f.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Ht`<span style="text-transform: none">: ${t.title}</span>`:"";return Ht`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(ea.issue,d,r.id))}if(l.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=f?f.labels:[];f&&"CLOSED"===f.state&&r.classList.add("closed"),p.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const s=(i=n,parseInt(i,16)>8388607.5?"#000":"#fff");var i;return Ht`<a +.issue a.respec-gh-label{padding:5px;margin:0 2px 0 2px;font-size:10px;text-transform:none;text-decoration:none;font-weight:700;border-radius:4px;position:relative;bottom:2px;border:none;display:inline-block}`;const na="core/issues-notes",ra=rn({en:{editors_note:"Editor's note",feature_at_risk:"(Feature at Risk) Issue",issue:"Issue",issue_summary:"Issue Summary",no_issues_in_spec:"There are no issues listed in this specification.",note:"Note",warning:"Warning"},ja:{note:"注",editors_note:"編者注",feature_at_risk:"(変更の可能性のある機能) Issue",issue:"Issue",issue_summary:"Issue の要約",no_issues_in_spec:"この仕様には未解決の issues は含まれていません.",warning:"警告"},nl:{editors_note:"Redactionele noot",issue_summary:"Lijst met issues",no_issues_in_spec:"Er zijn geen problemen vermeld in deze specificatie.",note:"Noot",warning:"Waarschuwing"},es:{editors_note:"Nota de editor",issue:"Cuestión",issue_summary:"Resumen de la cuestión",note:"Nota",no_issues_in_spec:"No hay problemas enumerados en esta especificación.",warning:"Aviso"},de:{editors_note:"Redaktioneller Hinweis",issue:"Frage",issue_summary:"Offene Fragen",no_issues_in_spec:"Diese Spezifikation enthält keine offenen Fragen.",note:"Hinweis",warning:"Warnung"},zh:{editors_note:"编者注",feature_at_risk:"(有可能变动的特性)Issue",issue:"Issue",issue_summary:"Issue 总结",no_issues_in_spec:"本规范中未列出任何 issue。",note:"注",warning:"警告"}});function oa(e,t,n){const r=function(){if(document.querySelector(".issue[data-number]"))return e=>{if(e.dataset.number)return Number(e.dataset.number)};let e=0;return t=>{if(t.classList.contains("issue")&&"span"!==t.localName)return++e}}(),o=document.createElement("ul");e.forEach(e=>{const{type:s,displayType:i,isFeatureAtRisk:a}=function(e){const t=e.classList.contains("issue"),n=e.classList.contains("warning"),r=e.classList.contains("ednote"),o=e.classList.contains("atrisk"),s=t?"issue":n?"warning":r?"ednote":"note",i=t?o?ra.feature_at_risk:ra.issue:n?ra.warning:r?ra.editors_note:ra.note;return{type:s,displayType:i,isFeatureAtRisk:o}}(e),c="issue"===s,l="span"===e.localName,{number:u}=e.dataset,d={type:s,inline:l,title:e.title,number:r(e)};if(!l){const r=Ht`<div class="${a?s+" atrisk":s}" role="${"note"===s?"note":null}"></div>`,l=document.createElement("span"),p=Ht`<div role="heading" class="${s+"-title marker"}">${l}</div>`;pn(p,"h",s);let f,h=i;if(e.id?(r.id=e.id,e.removeAttribute("id")):pn(r,"issue-container",d.number?"number-"+d.number:""),c){if(void 0!==d.number&&(h+=" "+d.number),e.dataset.hasOwnProperty("number")){const e=function(e,t,{isFeatureAtRisk:n=!1}={}){if(!n&&t.issueBase)return Ht`<a href="${t.issueBase+e}" />`;if(n&&t.atRiskBase)return Ht`<a href="${t.atRiskBase+e}" />`}(u,n,{isFeatureAtRisk:a});if(e&&(l.before(e),e.append(l)),l.classList.add("issue-number"),f=t.get(u),!f){Cn(`Failed to fetch issue number ${u}.`,na)}f&&!d.title&&(d.title=f.title)}void 0!==d.number&&o.append(function(e,t,n){const r=`${e} ${t.number}`,o=t.title?Ht`<span style="text-transform: none">: ${t.title}</span>`:"";return Ht`<li><a href="${"#"+n}">${r}</a>${o}</li>`}(ra.issue,d,r.id))}if(l.textContent=h,d.title){e.removeAttribute("title");const{repoURL:t=""}=n.github||{},o=f?f.labels:[];f&&"CLOSED"===f.state&&r.classList.add("closed"),p.append(function(e,t,n){const r=e.map(e=>function(e,t){const{color:n,name:r}=e,o=new URL("./issues/",t);o.searchParams.set("q",`is:issue is:open label:"${e.name}"`);const s=(i=n,parseInt(i,16)>8388607.5?"#000":"#fff");var i;return Ht`<a class="respec-gh-label" style="${`background-color: #${n}; color: ${s}`}" href="${o.href}" >${r}</a >`}(e,n)),o=e.map(e=>e.name),s=en(o);r.length&&r.unshift(document.createTextNode(" "));if(o.length){return Ht`<span class="issue-label" aria-label="${`This issue is labelled as ${s}.`}" >: ${t}${r}</span - >`}return Ht`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(s),m.removeAttribute("data-number"),f&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(f.bodyHTML)),r.append(p,m);const g=bn(p,"section").length+2;p.setAttribute("aria-level",g)}An(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Ht`<p>${ea.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${ea.issue_summary}</h2>`)}(o)}var na=Object.freeze({__proto__:null,name:Qi,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return _n(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,Qi),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),{head:r}=document;r.insertBefore(Ht`<style> - ${Xi} - </style>`,r.querySelector("link")),ta(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const ra="core/best-practices",oa={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},sa=rn(oa),ia=s in oa?s:"en";var aa=Object.freeze({__proto__:null,name:ra,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=pn(e,"bp"),o=Ht`<a class="marker self-link" href="${"#"+r}" - ><bdi lang="${ia}">${sa.best_practice}${t+1}</bdi></a - >`;if(n){const t=Ht`<li>${o}: ${vn(e)}</li>`;n.appendChild(t)}const s=e.closest("div");if(!s)return void e.classList.add("advisement");s.classList.add("advisement");const i=Ht`${o.cloneNode(!0)}: ${e}`;s.prepend(...i.childNodes)}),e.length)t&&(t.appendChild(Ht`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){Cn("Using best practices summary (#bp-summary) but no best practices found.",ra),t.remove()}}});const ca="core/figures",la=rn({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var ua=Object.freeze({__proto__:null,name:ca,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;pn(e,"fig",r),gn(t,Ht`<span class="fig-title"></span>`),t.prepend(la.fig,Ht`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{hn(e,"span").removeAttribute("href")}),Ht`<li class="tofline"> + >`}return Ht`<span class="issue-label">: ${t}${r}</span>`}(o,d.title,t))}let m=e;e.replaceWith(r),m.classList.remove(s),m.removeAttribute("data-number"),f&&!m.innerHTML.trim()&&(m=document.createRange().createContextualFragment(f.bodyHTML)),r.append(p,m);const g=bn(p,"section").length+2;p.setAttribute("aria-level",g)}An(d.type,d)}),function(e){const t=document.getElementById("issue-summary");if(!t)return;const n=t.querySelector("h2, h3, h4, h5, h6");e.hasChildNodes()?t.append(e):t.append(Ht`<p>${ra.no_issues_in_spec}</p>`),(!n||n&&n!==t.firstElementChild)&&t.insertAdjacentHTML("afterbegin",`<h2>${ra.issue_summary}</h2>`)}(o)}var sa=Object.freeze({__proto__:null,name:na,run:async function(e){const t=document.querySelectorAll(".issue, .note, .warning, .ednote");if(!t.length)return;const n=await async function(e){if(!e||!e.apiBase)return new Map;const t=[...document.querySelectorAll(".issue[data-number]")].map(e=>Number.parseInt(e.dataset.number,10)).filter(e=>e);if(!t.length)return new Map;const n=new URL("issues",`${e.apiBase}/${e.fullName}/`);n.searchParams.set("issues",t.join(","));const r=await fetch(n.href);if(!r.ok)return _n(`Error fetching issues from GitHub. (HTTP Status ${r.status}).`,na),new Map;const o=await r.json();return new Map(Object.entries(o))}(e.github),{head:r}=document;r.insertBefore(Ht`<style> + ${ta} + </style>`,r.querySelector("link")),oa(t,n,e),document.querySelectorAll(".ednote").forEach(e=>{e.classList.remove("ednote"),e.classList.add("note")})}});const ia="core/best-practices",aa={en:{best_practice:"Best Practice "},ja:{best_practice:"最良実施例 "},de:{best_practice:"Musterbeispiel "},zh:{best_practice:"最佳实践 "}},ca=rn(aa),la=s in aa?s:"en";var ua=Object.freeze({__proto__:null,name:ia,run:function(){const e=document.querySelectorAll(".practicelab"),t=document.getElementById("bp-summary"),n=t?document.createElement("ul"):null;if([...e].forEach((e,t)=>{const r=pn(e,"bp"),o=Ht`<a class="marker self-link" href="${"#"+r}" + ><bdi lang="${la}">${ca.best_practice}${t+1}</bdi></a + >`;if(n){const t=Ht`<li>${o}: ${vn(e)}</li>`;n.appendChild(t)}const s=e.closest("div");if(!s)return void e.classList.add("advisement");s.classList.add("advisement");const i=Ht`${o.cloneNode(!0)}: ${e}`;s.prepend(...i.childNodes)}),e.length)t&&(t.appendChild(Ht`<h2>Best Practices Summary</h2>`),t.appendChild(n));else if(t){Cn("Using best practices summary (#bp-summary) but no best practices found.",ia),t.remove()}}});const da="core/figures",pa=rn({en:{list_of_figures:"List of Figures",fig:"Figure "},ja:{fig:"図 ",list_of_figures:"図のリスト"},ko:{fig:"그림 ",list_of_figures:"그림 목록"},nl:{fig:"Figuur ",list_of_figures:"Lijst met figuren"},es:{fig:"Figura ",list_of_figures:"Lista de Figuras"},zh:{fig:"图 ",list_of_figures:"规范中包含的图"},de:{fig:"Abbildung",list_of_figures:"Abbildungsverzeichnis"}});var fa=Object.freeze({__proto__:null,name:da,run:function(){document.querySelectorAll(":not(picture)>img:not([width]):not([height]):not([srcset])").forEach(e=>{0!==e.naturalHeight&&0!==e.naturalWidth&&(e.height=e.naturalHeight,e.width=e.naturalWidth)});const e=function(){const e=[];return document.querySelectorAll("figure").forEach((t,n)=>{const r=t.querySelector("figcaption");if(r)!function(e,t,n){const r=t.textContent;pn(e,"fig",r),gn(t,Ht`<span class="fig-title"></span>`),t.prepend(pa.fig,Ht`<bdi class="figno">${n+1}</bdi>`," ")}(t,r,n),e.push(function(e,t){const n=t.cloneNode(!0);return n.querySelectorAll("a").forEach(e=>{hn(e,"span").removeAttribute("href")}),Ht`<li class="tofline"> <a class="tocxref" href="${"#"+e}">${n.childNodes}</a> - </li>`}(t.id,r));else{Cn("Found a `<figure>` without a `<figcaption>`.",ca,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Ht`<h2>${la.list_of_figures}</h2>`,Ht`<ul class="tof"> + </li>`}(t.id,r));else{Cn("Found a `<figure>` without a `<figcaption>`.",da,{elements:[t]})}}),e}(),t=document.getElementById("tof");e.length&&t&&(!function(e){if(e.classList.contains("appendix")||e.classList.contains("introductory")||e.closest("section"))return;const t=function(e){const t=[];for(const n of function*(e){let t=e;for(;t.previousElementSibling;)t=t.previousElementSibling,yield t}(e))"section"===n.localName&&t.push(n);return t}(e);t.every(e=>e.classList.contains("introductory"))?e.classList.add("introductory"):t.some(e=>e.classList.contains("appendix"))&&e.classList.add("appendix")}(t),t.append(Ht`<h2>${pa.list_of_figures}</h2>`,Ht`<ul class="tof"> ${e} - </ul>`))}});const da=new Set(["callback interface","callback","dictionary","enum","interface mixin","interface","typedef"]);function pa(e,t,{parent:n=""}={}){switch(e.type){case"constructor":case"operation":return function(e,t,n){if(n.includes("!overload"))return fa(e,t,n);return fa(e,t,n+"()",n)}(e,n,t);default:return fa(e,n,t)}}function fa(e,t,...n){const{type:r}=e;for(const e of n){let n="enum-value"===r&&""===e?"the-empty-string":e,o=ma(n,t,e,r);if(0===o.length&&""!==t){n=`${t}.${n}`;const e=Bi.get(n);e&&1===e.size&&(o=[...e],Hi(o[0],[n]))}else n=e;if(o.length>1){_n(`WebIDL identifier \`${e}\` ${t?`for \`${t}\``:""} is defined multiple times`,e,{title:"Duplicate definition.",elements:o})}if(o.length)return o[0]}}function ha(e,t,n,r){if(!e.id){const t=n.toLowerCase(),o=t?t+"-":"";let s=r.toLowerCase().replace(/[()]/g,"").replace(/\s/g,"-");""===s&&(s="the-empty-string"),e.id=`dom-${o}${s}`}switch(e.dataset.idl=t.type,e.dataset.title=e.textContent,e.dataset.dfnFor=n,t.type){case"operation":case"attribute":case"field":e.dataset.type=ga(t)}switch(e.querySelector("code")||e.closest("code")||!e.children||gn(e,e.ownerDocument.createElement("code")),t.type){case"attribute":case"constructor":case"operation":!function(e,t){const{local:n,exportable:r}=t,o=e.dataset.lt?new Set(e.dataset.lt.split("|")):new Set;for(const e of r)o.add(e);n.filter(e=>o.has(e)).forEach(e=>o.delete(e)),e.dataset.lt=[...o].join("|"),e.dataset.localLt=n.join("|"),Hi(e,[...n,...r])}(e,function(e,t,n){const{type:r}=e,o=`${t}.${n}`;switch(r){case"constructor":case"operation":return{local:[o,o+"()",n],exportable:[n+"()",...function(e,t){const n=[];if(0===t.length)return n;const r=[],o=[];for(const{name:e,optional:n,variadic:s}of t)n||s?o.push(e):r.push(e);const s=r.join(", "),i=`${e}(${s})`;n.push(i);const a=o.map((t,n)=>{const s=[...r,...o.slice(0,n+1)].join(", ");return`${e}(${s})`});return n.push(...a),n}(n,e.arguments)]};case"attribute":return{local:[o],exportable:[n]}}}(t,n,r))}return e}function ma(e,t,n,r){const o=Bi.get(e);if(!o||0===o.size)return[];const s=[...o],i=s.filter(e=>{if("dfn"===e.dataset.dfnType)return!1;const n=e.closest("[data-dfn-for]");return n&&n.dataset.dfnFor===t});if(0===i.length&&""===t&&1===s.length)return s[0].textContent===n?s:[];if(da.has(r)&&s.length){const e=s.find(e=>e.textContent.trim()===n);if(e)return[e]}return i}function ga(e={}){const{idlType:t,generic:n,union:r}=e;return void 0===t?"":"string"==typeof t?t:n||(r?t.map(ga).join("|"):ga(t))}const ba=function(){const e=document.createElement("button");return e.innerHTML='<svg height="16" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z"/></svg>',e.title="Copy IDL to clipboard",e.classList.add("respec-button-copy-paste","removeOnSave"),e}();function wa(e){const t=e.closest("pre.idl").cloneNode(!0);t.querySelector(".idlHeader").remove();const{textContent:n}=t,r=ba.cloneNode(!0);r.addEventListener("click",()=>{navigator.clipboard.writeText(n)}),e.append(r)}var ya=Object.freeze({__proto__:null,name:"core/webidl-clipboard",addCopyIDLButton:wa});var va=String.raw`pre.idl{padding:1em;position:relative} + </ul>`))}});const ha=new Set(["callback interface","callback","dictionary","enum","interface mixin","interface","typedef"]);function ma(e,t,{parent:n=""}={}){switch(e.type){case"constructor":case"operation":return function(e,t,n){if(n.includes("!overload"))return ga(e,t,n);return ga(e,t,n+"()",n)}(e,n,t);default:return ga(e,n,t)}}function ga(e,t,...n){const{type:r}=e;for(const e of n){let n="enum-value"===r&&""===e?"the-empty-string":e,o=wa(n,t,e,r);if(0===o.length&&""!==t){n=`${t}.${n}`;const e=Vi.get(n);e&&1===e.size&&(o=[...e],Zi(o[0],[n]))}else n=e;if(o.length>1){_n(`WebIDL identifier \`${e}\` ${t?`for \`${t}\``:""} is defined multiple times`,e,{title:"Duplicate definition.",elements:o})}if(o.length)return o[0]}}function ba(e,t,n,r){if(!e.id){const t=n.toLowerCase(),o=t?t+"-":"";let s=r.toLowerCase().replace(/[()]/g,"").replace(/\s/g,"-");""===s&&(s="the-empty-string"),e.id=`dom-${o}${s}`}switch(e.dataset.idl=t.type,e.dataset.title=e.textContent,e.dataset.dfnFor=n,t.type){case"operation":case"attribute":case"field":e.dataset.type=ya(t)}switch(e.querySelector("code")||e.closest("code")||!e.children||gn(e,e.ownerDocument.createElement("code")),t.type){case"attribute":case"constructor":case"operation":!function(e,t){const{local:n,exportable:r}=t,o=e.dataset.lt?new Set(e.dataset.lt.split("|")):new Set;for(const e of r)o.add(e);n.filter(e=>o.has(e)).forEach(e=>o.delete(e)),e.dataset.lt=[...o].join("|"),e.dataset.localLt=n.join("|"),Zi(e,[...n,...r])}(e,function(e,t,n){const{type:r}=e,o=`${t}.${n}`;switch(r){case"constructor":case"operation":return{local:[o,o+"()",n],exportable:[n+"()",...function(e,t){const n=[];if(0===t.length)return n;const r=[],o=[];for(const{name:e,optional:n,variadic:s}of t)n||s?o.push(e):r.push(e);const s=r.join(", "),i=`${e}(${s})`;n.push(i);const a=o.map((t,n)=>{const s=[...r,...o.slice(0,n+1)].join(", ");return`${e}(${s})`});return n.push(...a),n}(n,e.arguments)]};case"attribute":return{local:[o],exportable:[n]}}}(t,n,r))}return e}function wa(e,t,n,r){const o=Vi.get(e);if(!o||0===o.size)return[];const s=[...o],i=s.filter(e=>{if("dfn"===e.dataset.dfnType)return!1;const n=e.closest("[data-dfn-for]");return n&&n.dataset.dfnFor===t});if(0===i.length&&""===t&&1===s.length)return s[0].textContent===n?s:[];if(ha.has(r)&&s.length){const e=s.find(e=>e.textContent.trim()===n);if(e)return[e]}return i}function ya(e={}){const{idlType:t,generic:n,union:r}=e;return void 0===t?"":"string"==typeof t?t:n||(r?t.map(ya).join("|"):ya(t))}const va=function(){const e=document.createElement("button");return e.innerHTML='<svg height="16" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z"/></svg>',e.title="Copy IDL to clipboard",e.classList.add("respec-button-copy-paste","removeOnSave"),e}();function ka(e){const t=e.closest("pre.idl").cloneNode(!0);t.querySelector(".idlHeader").remove();const{textContent:n}=t,r=va.cloneNode(!0);r.addEventListener("click",()=>{navigator.clipboard.writeText(n)}),e.append(r)}var xa=Object.freeze({__proto__:null,name:"core/webidl-clipboard",addCopyIDLButton:ka});var $a=String.raw`pre.idl{padding:1em;position:relative} pre.idl>code{color:#000} @media print{ pre.idl{white-space:pre-wrap} @@ -816,15 +818,15 @@ a.idlEnumItem{color:#000;border-bottom:1px dotted #ccc;text-decoration:none} .respec-button-copy-paste.disabled,.respec-button-copy-paste.disabled:hover,.respec-button-copy-paste:disabled,.respec-button-copy-paste:disabled:hover{color:rgba(102,102,102,.5);cursor:default;background-color:rgba(229,229,229,.5);background-image:none;border-color:rgba(197,197,197,.5);box-shadow:none} @media print{ .respec-button-copy-paste{visibility:hidden} -}`;const ka="core/webidl",xa=ka,$a={},Sa={},_a={wrap:e=>e.flat().filter(e=>""!==e).map(e=>"string"==typeof e?new Text(e):e),trivia:e=>e.trim()?Ht`<span class="idlSectionComment">${e}</span>`:e,generic:e=>/^[A-Z]/.test(e)?Ht`<a data-xref-type="interface" data-cite="WebIDL">${e}</a>`:Ht`<a data-xref-type="dfn" data-cite="WebIDL">${e}</a>`,reference(e,t,n){if("extended-attribute"===n.type&&"Exposed"!==n.name)return e;let r,o="_IDL_",s=null;switch(t){case"Window":o="interface",s="HTML";break;case"object":o="interface",s="WebIDL";break;default:t.includes("Worker")&&"extended-attribute"===n.type&&(r=t+"GlobalScope",o="interface",s=["Worker","DedicatedWorker","SharedWorker"].includes(t)?"HTML":null)}return Ht`<a data-xref-type="${o}" data-cite="${s}" data-lt="${r}" +}`;const Sa="core/webidl",_a=Sa,Ca={},Ea={},Ra={wrap:e=>e.flat().filter(e=>""!==e).map(e=>"string"==typeof e?new Text(e):e),trivia:e=>e.trim()?Ht`<span class="idlSectionComment">${e}</span>`:e,generic:e=>/^[A-Z]/.test(e)?Ht`<a data-xref-type="interface" data-cite="WebIDL">${e}</a>`:Ht`<a data-xref-type="dfn" data-cite="WebIDL">${e}</a>`,reference(e,t,n){if("extended-attribute"===n.type&&"Exposed"!==n.name)return e;let r,o="_IDL_",s=null;switch(t){case"Window":o="interface",s="HTML";break;case"object":o="interface",s="WebIDL";break;default:t.includes("Worker")&&"extended-attribute"===n.type&&(r=t+"GlobalScope",o="interface",s=["Worker","DedicatedWorker","SharedWorker"].includes(t)?"HTML":null)}return Ht`<a data-xref-type="${o}" data-cite="${s}" data-lt="${r}" >${e}</a - >`},name(e,{data:t,parent:n}){if(t.idlType&&"argument-type"===t.idlType.type)return Ht`<span class="idlParamName">${e}</span>`;const r=Ca(e,t,n);if("enum-value"!==t.type){const e=n?"idlName":"idlID";r.classList.add(e)}return r},nameless(e,{data:t,parent:n}){switch(t.type){case"operation":case"constructor":return Ca(e,t,n);default:return e}},type:e=>Ht`<span class="idlType">${e}</span>`,inheritance:e=>Ht`<span class="idlSuperclass">${e}</span>`,definition(e,{data:t,parent:n}){const r=function(e){switch(e.type){case"callback interface":return"idlInterface";case"operation":return"idlMethod";case"field":return"idlMember";case"enum-value":return"idlEnumItem";case"callback function":return"idlCallback"}return`idl${e.type[0].toUpperCase()}${e.type.slice(1)}`}(t);switch(t.type){case"includes":case"enum-value":return Ht`<span class="${r}">${e}</span>`}const o=n?n.name:"",{name:s,idlId:i}=Ra(t,o);return Ht`<span + >`},name(e,{data:t,parent:n}){if(t.idlType&&"argument-type"===t.idlType.type)return Ht`<span class="idlParamName">${e}</span>`;const r=Ta(e,t,n);if("enum-value"!==t.type){const e=n?"idlName":"idlID";r.classList.add(e)}return r},nameless(e,{data:t,parent:n}){switch(t.type){case"operation":case"constructor":return Ta(e,t,n);default:return e}},type:e=>Ht`<span class="idlType">${e}</span>`,inheritance:e=>Ht`<span class="idlSuperclass">${e}</span>`,definition(e,{data:t,parent:n}){const r=function(e){switch(e.type){case"callback interface":return"idlInterface";case"operation":return"idlMethod";case"field":return"idlMember";case"enum-value":return"idlEnumItem";case"callback function":return"idlCallback"}return`idl${e.type[0].toUpperCase()}${e.type.slice(1)}`}(t);switch(t.type){case"includes":case"enum-value":return Ht`<span class="${r}">${e}</span>`}const o=n?n.name:"",{name:s,idlId:i}=La(t,o);return Ht`<span class="${r}" id="${i}" data-idl data-title="${s}" >${e}</span - >`},extendedAttribute:e=>Ht`<span class="extAttr">${e}</span>`,extendedAttributeReference:e=>Ht`<a data-xref-type="extended-attribute">${e}</a>`};function Ca(e,t,n){const r=n?n.name:"",{name:o}=Ra(t,r),s=pa(t,o,{parent:r}),i=function(e){switch(e){case"operation":return"method";case"field":return"dict-member";case"callback interface":case"interface mixin":return"interface";default:return e}}(t.type);if(s){t.partial||(s.dataset.export="",s.dataset.dfnType=i),ha(s,t,r,o);const n="#"+s.id;return Ht`<a + >`},extendedAttribute:e=>Ht`<span class="extAttr">${e}</span>`,extendedAttributeReference:e=>Ht`<a data-xref-type="extended-attribute">${e}</a>`};function Ta(e,t,n){const r=n?n.name:"",{name:o}=La(t,r),s=ma(t,o,{parent:r}),i=function(e){switch(e){case"operation":return"method";case"field":return"dict-member";case"callback interface":case"interface mixin":return"interface";default:return e}}(t.type);if(s){t.partial||(s.dataset.export="",s.dataset.dfnType=i),ba(s,t,r,o);const n="#"+s.id;return Ht`<a data-link-for="${r}" data-link-type="${i}" href="${n}" @@ -834,15 +836,15 @@ a.idlEnumItem{color:#000;border-bottom:1px dotted #ccc;text-decoration:none} >${e}</a >`;if(!t.partial){const n=Ht`<dfn data-export data-dfn-type="${i}" >${e}</dfn - >`;return Hi(n,[o]),ha(n,t,r,o),n}const a=Ht`<a + >`;return Zi(n,[o]),ba(n,t,r,o),n}const a=Ht`<a data-idl="${t.partial?"partial":null}" data-link-type="${i}" data-title="${t.name}" data-xref-type="${i}" >${e}</a - >`;if(o&&"typedef"!==t.type&&!(t.partial&&!s)){Cn(`Missing \`<dfn>\` for${r?` \`${r}\`'s`:""} \`${"operation"===t.type?o+"()":o}\` ${t.type}. [More info](https://github.com/w3c/respec/wiki/WebIDL-thing-is-not-defined).`,xa,{elements:[a]})}return a}const Ea=new WeakMap;function Ra(e,t=""){if(Ea.has(e))return Ea.get(e);const n=function(e,t){let n=function(e){switch(e.type){case"enum-value":return e.value;case"operation":return e.name||e.special;default:return e.name||e.type}}(e);let r=function(e,t){if(!t)return"idl-def-"+e.toLowerCase();return`idl-def-${t.toLowerCase()}-${e.toLowerCase()}`}((e.special&&""===e.name?"anonymous-":"")+n,t);switch(e.type){case"callback interface":case"dictionary":case"interface":case"interface mixin":r+=function(e){if(!e.partial)return"";Sa[e.name]||(Sa[e.name]=0);return Sa[e.name]+=1,"-partial-"+Sa[e.name]}(e);break;case"constructor":case"operation":{const o=function(e,t){const n=`${t}.${e}`,r=n+"()";let o;$a[r]||($a[r]=0);$a[n]?o="!overload-"+$a[n]:$a[n]=0;return $a[r]+=1,$a[n]+=1,o||""}(n,t);o?(n+=o,r+=o):e.arguments.length&&(r+=e.arguments.map(e=>"-"+e.name.toLowerCase()).join(""));break}}return{name:n,idlId:r}}(e,t);return Ea.set(e,n),n}function Ta(e,t){let n;try{n=Bt.parse(e.textContent,{sourceName:String(t)})}catch(t){return _n(`Failed to parse WebIDL: ${t.bareMessage}.`,xa,{title:t.bareMessage,details:`<pre>${t.context}</pre>`,elements:[e]}),[]}e.classList.add("def","idl");const r=Bt.write(n,{templates:_a});Ht.bind(e)`${r}`,gn(e,document.createElement("code")),e.querySelectorAll("[data-idl]").forEach(e=>{if(e.dataset.dfnFor)return;const t=e.dataset.title,n=e.parentElement.closest("[data-idl][data-title]");n&&(e.dataset.dfnFor=n.dataset.title),"dfn"===e.localName&&Hi(e,[t])});const o=e.closest("[data-cite], body"),{dataset:s}=o;if(s.cite||(s.cite="WebIDL"),!/\bwebidl\b/i.test(s.cite)){const e=s.cite.trim().split(/\s+/);s.cite=["WebIDL",...e].join(" ")}return Aa(e),n}function Aa(e){dn(e,"webidl");const t=Ht`<span class="idlHeader" + >`;if(o&&"typedef"!==t.type&&!(t.partial&&!s)){Cn(`Missing \`<dfn>\` for${r?` \`${r}\`'s`:""} \`${"operation"===t.type?o+"()":o}\` ${t.type}. [More info](https://github.com/w3c/respec/wiki/WebIDL-thing-is-not-defined).`,_a,{elements:[a]})}return a}const Aa=new WeakMap;function La(e,t=""){if(Aa.has(e))return Aa.get(e);const n=function(e,t){let n=function(e){switch(e.type){case"enum-value":return e.value;case"operation":return e.name||e.special;default:return e.name||e.type}}(e);let r=function(e,t){if(!t)return"idl-def-"+e.toLowerCase();return`idl-def-${t.toLowerCase()}-${e.toLowerCase()}`}((e.special&&""===e.name?"anonymous-":"")+n,t);switch(e.type){case"callback interface":case"dictionary":case"interface":case"interface mixin":r+=function(e){if(!e.partial)return"";Ea[e.name]||(Ea[e.name]=0);return Ea[e.name]+=1,"-partial-"+Ea[e.name]}(e);break;case"constructor":case"operation":{const o=function(e,t){const n=`${t}.${e}`,r=n+"()";let o;Ca[r]||(Ca[r]=0);Ca[n]?o="!overload-"+Ca[n]:Ca[n]=0;return Ca[r]+=1,Ca[n]+=1,o||""}(n,t);o?(n+=o,r+=o):e.arguments.length&&(r+=e.arguments.map(e=>"-"+e.name.toLowerCase()).join(""));break}}return{name:n,idlId:r}}(e,t);return Aa.set(e,n),n}function Pa(e,t){let n;try{n=Bt.parse(e.textContent,{sourceName:String(t)})}catch(t){return _n(`Failed to parse WebIDL: ${t.bareMessage}.`,_a,{title:t.bareMessage,details:`<pre>${t.context}</pre>`,elements:[e]}),[]}e.classList.add("def","idl");const r=Bt.write(n,{templates:Ra});Ht.bind(e)`${r}`,gn(e,document.createElement("code")),e.querySelectorAll("[data-idl]").forEach(e=>{if(e.dataset.dfnFor)return;const t=e.dataset.title,n=e.parentElement.closest("[data-idl][data-title]");n&&(e.dataset.dfnFor=n.dataset.title),"dfn"===e.localName&&Zi(e,[t])});const o=e.closest("[data-cite], body"),{dataset:s}=o;if(s.cite||(s.cite="WebIDL"),!/\bwebidl\b/i.test(s.cite)){const e=s.cite.trim().split(/\s+/);s.cite=["WebIDL",...e].join(" ")}return Ia(e),n}function Ia(e){dn(e,"webidl");const t=Ht`<span class="idlHeader" ><a class="self-link" href="${"#"+e.id}">WebIDL</a></span - >`;e.prepend(t),wa(t)}var La=Object.freeze({__proto__:null,name:ka,addIDLHeader:Aa,run:async function(){const e=document.querySelectorAll("pre.idl, pre.webidl");if(!e.length)return;if(!document.querySelector(".idl:not(pre), .webidl:not(pre)")){const e=document.querySelector("head link");if(e){const t=document.createElement("style");t.textContent=va,e.before(t)}}const t=[...e].map(Ta),n=Bt.validate(t);for(const r of n){let n=`<pre>${tn(r.context)}</pre>`;if(r.autofix){r.autofix();n+=`Try fixing as:\n <pre>${tn(Bt.write(t[r.sourceName]))}</pre>`}_n("WebIDL validation error: "+r.bareMessage,xa,{details:n,elements:[e[r.sourceName]],title:r.bareMessage})}document.normalize()}});const Pa="core/data-cite",Ia="__SPEC__";async function Da(e){const{key:t,frag:n,path:r}=e;let o="",s="";if(t===Ia)o=document.location.href;else{const e=await ai(t);if(!e)return null;o=e.href,s=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:s}}function Na(e,t,n){const{href:r,title:o}=t,s=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?gn(e,t):(t.textContent=o,e.append(t)),s){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){_n("Exporting an linked external definition is not allowed.",Pa,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,s){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function Oa(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const ja=Oa("#"),za=Oa("/");function Wa(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:s}=r?Wa(r):{key:Ia,isNormative:!1};return t.cite=s?o:"?"+o,t.citeFrag=n.replace("#",""),Wa(e)}const s=r?"#"+r:ja(n),i=o||za(n).split("#")[0],{type:a}=mn(n,e),c="normative"===a,l=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(l)),isNormative:c,frag:s,path:i}}function Ma(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var Ua=Object.freeze({__proto__:null,name:Pa,THIS_SPEC:Ia,toCiteDetails:Wa,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(Wa).map(async e=>({entry:e,result:await ai(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await ii(n);r&&Object.assign(ti,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=Wa(t),r=await Da(n);if(r)Na(t,r,n);else{Cn(`Couldn't find a match for "${e}"`,Pa,{elements:[t]})}}Ln("beforesave",Ma)}});const Fa="core/link-to-dfn",qa=[],Ba=rn({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function Ha(e){const t=new Map,n=[];for(const r of Bi.get(e)){const{dfnFor:o="",dfnType:s="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(s)){const e=t.get(o).get(s),i="dfn"===e.localName,a="dfn"===r.localName,c=s===(e.dataset.dfnType||"dfn"),l=o===(e.dataset.dfnFor||"");if(i&&a&&c&&l){n.push(r);continue}}const i="idl"in r.dataset||"dfn"!==s?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(i,r),pn(r,"dfn",e)}return{result:t,duplicates:n}}function Ga(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return fn(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function Va(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:s}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==s)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=Za(e)&&Za(t,n);r&&!o||gn(e,document.createElement("code"))}(e,t),!r}function Za(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function Ya(e){e.forEach(e=>{Cn(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,Fa,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var Ja=Object.freeze({__proto__:null,name:Fa,possibleExternalLinks:qa,run:async function(e){const t=function(){const e=new $n;for(const t of Bi.keys()){const{result:n,duplicates:r}=Ha(t);e.set(t,n),r.length>0&&_n(Ba.duplicateMsg(t),Fa,{title:Ba.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=Ga(e,t);if(r){Va(e,r,t)||qa.push(e)}else""===e.dataset.cite?n.push(e):qa.push(e)}Ya(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=Wa(t);r!==Ia&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||Ya(qa)}});const Ka="xrefs",Xa=3e5;async function Qa(){return await qt.openDB("xref",2,{upgrade(e){[...e.objectStoreNames].forEach(t=>e.deleteObjectStore(t));e.createObjectStore(Ka,{keyPath:"query.id"}).createIndex("byTerm","query.term",{unique:!1})}})}async function ec(e){const t=new Map;if(await async function(){const e="XREF:LAST_VERSION_CHECK",t=parseInt(localStorage.getItem(e),10),n=Date.now();if(!t)return localStorage.setItem(e,n.toString()),!1;if(n-t<Xa)return!1;const r=new URL("meta/version",rc).href,o=await fetch(r);if(!o.ok)return!1;const s=await o.text();return localStorage.setItem(e,n.toString()),parseInt(s,10)>t}())return await async function(){try{await Qa().then(e=>e.clear(Ka))}catch(e){console.error(e)}}(),t;const n=new Set(e.map(e=>e.id));try{const e=await Qa();let r=await e.transaction(Ka).store.openCursor();for(;r;)n.has(r.key)&&t.set(r.key,r.value.result),r=await r.continue()}catch(e){console.error(e)}return t}const tc="core/xref",nc={"web-platform":["HTML","INFRA","URL","WEBIDL","DOM","FETCH"]},rc="https://respec.org/xref/";if(!document.querySelector("link[rel='preconnect'][href='https://respec.org']")){const e=Xt({hint:"preconnect",href:"https://respec.org"});document.head.appendChild(e)}function oc(e){const t="xrefType"in e.dataset;let n=sc(e);t||(n=n.toLowerCase());const r=function(e){const t=[];let n=e.closest("[data-cite]");for(;n;){const r=n.dataset.cite.toLowerCase().replace(/[!?]/g,"").split(/\s+/).filter(e=>e);if(r.length&&t.push(r),n===e)break;n=n.parentElement.closest("[data-cite]")}if(n!==e){const n=e.closest("section"),r=[...n?n.querySelectorAll("a.bibref"):[]].map(e=>e.textContent.toLowerCase());r.length&&t.push(r)}return function(e){const t=[];for(const n of e){const e=t[t.length-1]||[],r=[...new Set(n)].filter(t=>!e.includes(t));t.push(r.sort())}return t}(t)}(e),o=function(e,t){if(t)return e.dataset.xrefType?e.dataset.xrefType.split("|"):["_IDL_"];return["_CONCEPT_"]}(e,t),s=function(e,t){if(e.dataset.xrefFor)return nn(e.dataset.xrefFor);if(t){const t=e.closest("[data-xref-for]");if(t)return nn(t.dataset.xrefFor)}return null}(e,t);return{term:n,types:o,...r.length&&{specs:r},..."string"==typeof s&&{for:s}}}function sc(e){const{lt:t}=e.dataset;let n=t?t.split("|",1)[0]:e.textContent;return n=nn(n),"the-empty-string"===n?"":n}function ic(e,t,n,r){const{term:o,specs:s=[]}=t,{uri:i,shortname:a,spec:c,normative:l,type:u,for:d}=n,p=s.flat().includes(c)?c:a,f=new URL(i,"https://example.org"),{pathname:h}=f,m={cite:p,citePath:h,citeFrag:f.hash.slice(1),type:u};d&&(m.linkFor=d[0]),Object.assign(e.dataset,m),function(e,t,n,r,o){if(!function(e){const t=e.closest(".normative"),n=e.closest(Kt);return!n||e===t||t&&n&&n.contains(t)}(e))return void(o.normativeReferences.has(t)||o.informativeReferences.add(t));if(n){const e=o.informativeReferences.has(t)?o.informativeReferences.getCanonicalKey(t):t;return o.normativeReferences.add(e),void o.informativeReferences.delete(e)}Cn(`Normative reference to "${r}" found but term is defined informatively in "${t}"`,tc,{title:"Error: Normative reference to informative term",elements:[e]})}(e,p,l,o,r)}function ac(e){const t=JSON.stringify(e,Object.keys(e).sort()),n=(new TextEncoder).encode(t);return crypto.subtle.digest("SHA-1",n).then(cc)}function cc(e){return[...new Uint8Array(e)].map(e=>e.toString(16).padStart(2,"0")).join("")}function lc(e){const t=e.querySelectorAll("a[data-xref-for], a[data-xref-type], a[data-link-for]"),n=["data-xref-for","data-xref-type","data-link-for"];t.forEach(e=>{n.forEach(t=>e.removeAttribute(t))})}var uc=Object.freeze({__proto__:null,name:tc,API_URL:rc,run:async function(e){if(!e.xref)return;const t=function(e){const t={url:rc,specs:null},n=Object.assign({},t);switch(Array.isArray(e)?"array":typeof e){case"boolean":break;case"string":e.toLowerCase()in nc?Object.assign(n,{specs:nc[e.toLowerCase()]}):r(e);break;case"array":Object.assign(n,{specs:e});break;case"object":if(Object.assign(n,e),e.profile){const t=e.profile.toLowerCase();if(t in nc){const r=(e.specs||[]).concat(nc[t]);Object.assign(n,{specs:r})}else r(e.profile)}break;default:_n(`Invalid value for \`xref\` configuration option. Received: "${e}".`,tc)}return n;function r(e){_n(`Invalid profile "${e}" in \`respecConfig.xref\`. Please use one of the supported profiles: ${Object.keys(nc).map(e=>`"${e}"`).join(", ")}.`,tc)}}(e.xref);if(t.specs){const e=document.body.dataset.cite?document.body.dataset.cite.split(/\s+/):[];document.body.dataset.cite=e.concat(t.specs).join(" ")}const n=qa.concat(function(){const e=document.querySelectorAll("a[data-cite]:not([data-cite='']):not([data-cite*='#']), dfn[data-cite]:not([data-cite='']):not([data-cite*='#'])"),t=document.querySelectorAll("dfn.externalDFN");return[...e].filter(e=>{if(""===e.textContent.trim())return!1;const t=e.closest("[data-cite]");return!t||""!==t.dataset.cite}).concat(...t)}());if(!n.length)return;const r=[];for(const e of n){const t=oc(e),n=await ac(t);r.push({...t,id:n})}const o=await async function(e,t){const n=new Set,r=e.filter(e=>!n.has(e.id)&&(n.add(e.id)&&!0)),o=await ec(r),s=r.filter(e=>!o.get(e.id)),i=await async function(e,t){if(!e.length)return new Map;const n={keys:e},r={method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}},o=await fetch(t,r),s=await o.json();return new Map(s.result)}(s,t);i.size&&await async function(e,t){try{const n=(await Qa()).transaction(Ka,"readwrite");for(const r of e){const e=t.get(r.id);n.objectStore(Ka).add({query:r,result:e})}await n.done}catch(e){console.error(e)}}(r,i);return new Map([...o,...i])}(r,t.url);!function(e,t,n,r){const o={ambiguous:new Map,notFound:new Map};for(let s=0,i=e.length;s<i;s++){if(e[s].closest("[data-no-xref]"))continue;const i=e[s],a=t[s],{id:c}=a,l=n.get(c);if(1===l.length)ic(i,a,l[0],r);else{const e=o[0===l.length?"notFound":"ambiguous"];e.has(c)||e.set(c,{elems:[],results:l,query:a}),e.get(c).elems.push(i)}}!function({ambiguous:e,notFound:t}){const n=(e,t,n=[])=>{const r=new URL(rc);return r.searchParams.set("term",e),t.for&&r.searchParams.set("for",t.for),r.searchParams.set("types",t.types.join(",")),n.length&&r.searchParams.set("specs",n.join(",")),r},r=e=>`[Learn more about this error](https://respec.org/docs/#error-term-not-found) or see [how to cite to resolve the error](${e}).`;for(const{query:e,elems:o}of t.values()){const t=e.specs?[...new Set(e.specs.flat())].sort():[],s=sc(o[0]),i=n(s,e),a=t.map(e=>`\`${e}\``).join(", "),c=r(i);_n(`Couldn't match "**${s}**" to anything in the document or in any other document cited in this specification: ${a}.`,tc,{title:"Error: No matching dfn found.",elements:o,hint:c})}for(const{query:t,elems:o,results:s}of e.values()){const e=[...new Set(s.map(e=>e.shortname))].sort(),i=e.map(e=>`**${e}**`).join(", "),a=sc(o[0]),c=r(n(a,t,e));_n(`The term "**${a}**" is defined in ${i} in multiple ways, so it's ambiguous.`,tc,{title:"Error: Linking an ambiguous dfn.",elements:o,hint:c})}}(o)}(n,r,o,e),Ln("beforesave",lc)},getTermFromElement:sc});var dc=Object.freeze({__proto__:null,name:"core/webidl-index",run:function(){const e=document.querySelector("section#idl-index");if(!e)return;const t=[2,3,4,5,6].map(e=>`h${e}:first-child`).join(",");if(!e.querySelector(t)){const t=document.createElement("h2");e.title?(t.textContent=e.title,e.removeAttribute("title")):t.textContent="IDL Index",e.prepend(t)}const n=Array.from(document.querySelectorAll("pre.idl:not(.exclude) > code")).filter(e=>!e.closest(Kt));if(0===n.length){const t="This specification doesn't normatively declare any Web IDL.";return void e.append(t)}const r=document.createElement("pre");r.classList.add("idl","def"),r.id="actual-idl-index",n.map(e=>{const t=document.createDocumentFragment();for(const n of e.children)t.appendChild(n.cloneNode(!0));return t}).forEach(e=>{r.lastChild&&r.append("\n\n"),r.appendChild(e)}),r.querySelectorAll("*[id]").forEach(e=>e.removeAttribute("id")),e.appendChild(r),gn(r,document.createElement("code")),Aa(r)}});var pc=String.raw`ul.index{columns:30ch;column-gap:1.5em} + >`;e.prepend(t),ka(t)}var Da=Object.freeze({__proto__:null,name:Sa,addIDLHeader:Ia,run:async function(){const e=document.querySelectorAll("pre.idl, pre.webidl");if(!e.length)return;if(!document.querySelector(".idl:not(pre), .webidl:not(pre)")){const e=document.querySelector("head link");if(e){const t=document.createElement("style");t.textContent=$a,e.before(t)}}const t=[...e].map(Pa),n=Bt.validate(t);for(const r of n){let n=`<pre>${tn(r.context)}</pre>`;if(r.autofix){r.autofix();n+=`Try fixing as:\n <pre>${tn(Bt.write(t[r.sourceName]))}</pre>`}_n("WebIDL validation error: "+r.bareMessage,_a,{details:n,elements:[e[r.sourceName]],title:r.bareMessage})}document.normalize()}});const Na="core/data-cite",Oa="__SPEC__";async function ja(e){const{key:t,frag:n,path:r}=e;let o="",s="";if(t===Oa)o=document.location.href;else{const e=await ui(t);if(!e)return null;o=e.href,s=e.title}if(r){const e=r.startsWith("/")?"."+r:r;o=new URL(e,o).href}return n&&(o=new URL(n,o).href),{href:o,title:s}}function za(e,t,n){const{href:r,title:o}=t,s=!n.path&&!n.frag;if("a"!==e.localName){if("dfn"===e.localName){const t=document.createElement("a");if(t.href=r,e.textContent?gn(e,t):(t.textContent=o,e.append(t)),s){const n=document.createElement("cite");n.append(t),e.append(n)}if("export"in e.dataset){_n("Exporting an linked external definition is not allowed.",Na,{hint:"Please remove the `data-export` attribute.",elements:[e]}),delete e.dataset.export}e.dataset.noExport=""}}else{const t=e;if(""===t.textContent&&"the-empty-string"!==t.dataset.lt&&(t.textContent=o),t.href=r,s){const e=document.createElement("cite");t.replaceWith(e),e.append(t)}}}function Wa(e){return t=>{const n=t.search(e);return-1!==n?t.substring(n):""}}const Ma=Wa("#"),Ua=Wa("/");function Fa(e){const{dataset:t}=e,{cite:n,citeFrag:r,citePath:o}=t;if(n.startsWith("#")&&!r){const r=e.parentElement.closest('[data-cite]:not([data-cite^="#"])'),{key:o,isNormative:s}=r?Fa(r):{key:Oa,isNormative:!1};return t.cite=s?o:"?"+o,t.citeFrag=n.replace("#",""),Fa(e)}const s=r?"#"+r:Ma(n),i=o||Ua(n).split("#")[0],{type:a}=mn(n,e),c="normative"===a,l=/^[?|!]/.test(n);return{key:n.split(/[/|#]/)[0].substring(Number(l)),isNormative:c,frag:s,path:i}}function qa(e){const t=["data-cite","data-cite-frag","data-cite-path"];e.querySelectorAll("a[data-cite], dfn[data-cite]").forEach(e=>t.forEach(t=>e.removeAttribute(t)))}var Ba=Object.freeze({__proto__:null,name:Na,THIS_SPEC:Oa,toCiteDetails:Fa,run:async function(){const e=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");await async function(e){const t=e.map(Fa).map(async e=>({entry:e,result:await ui(e.key)})),n=(await Promise.all(t)).filter(({result:e})=>null===e).map(({entry:{key:e}})=>e),r=await li(n);r&&Object.assign(oi,r)}([...e]);for(const t of e){const e=t.dataset.cite,n=Fa(t),r=await ja(n);if(r)za(t,r,n);else{Cn(`Couldn't find a match for "${e}"`,Na,{elements:[t]})}}Ln("beforesave",qa)}});const Ha="core/link-to-dfn",Ga=[],Va=rn({en:{duplicateMsg:e=>`Duplicate definition(s) of '${e}'`,duplicateTitle:"This is defined more than once in the document."},ja:{duplicateMsg:e=>`'${e}' の重複定義`,duplicateTitle:"この文書内で複数回定義されています."},de:{duplicateMsg:e=>`Mehrfache Definition von '${e}'`,duplicateTitle:"Das Dokument enthält mehrere Definitionen dieses Eintrags."},zh:{duplicateMsg:e=>`'${e}' 的重复定义`,duplicateTitle:"在文档中有重复的定义。"}});function Za(e){const t=new Map,n=[];for(const r of Vi.get(e)){const{dfnFor:o="",dfnType:s="dfn"}=r.dataset;if(t.has(o)&&t.get(o).has(s)){const e=t.get(o).get(s),i="dfn"===e.localName,a="dfn"===r.localName,c=s===(e.dataset.dfnType||"dfn"),l=o===(e.dataset.dfnFor||"");if(i&&a&&c&&l){n.push(r);continue}}const i="idl"in r.dataset||"dfn"!==s?"idl":"dfn";t.has(o)||t.set(o,new Map),t.get(o).set(i,r),pn(r,"dfn",e)}return{result:t,duplicates:n}}function Ya(e,t){const n=function(e){const t=e.closest("[data-link-for]"),n=t?t.dataset.linkFor:"";return fn(e).reduce((e,r)=>{const o=r.split(".");return 2===o.length&&e.push({for:o[0],title:o[1]}),e.push({for:n,title:r}),t||e.push({for:r,title:r}),""!==n&&e.push({for:"",title:r}),e},[])}(e).find(e=>t.has(e.title)&&t.get(e.title).has(e.for));if(!n)return;const r=t.get(n.title).get(n.for),{linkType:o}=e.dataset;if(o){const e="dfn"===o?"dfn":"idl";return r.get(e)||r.get("dfn")}{const e=n.for?"idl":"dfn";return r.get(e)||r.get("idl")}}function Ja(e,t,n){let r=!1;const{linkFor:o}=e.dataset,{dfnFor:s}=t.dataset;if(t.dataset.cite)e.dataset.cite=t.dataset.cite;else if(o&&!n.get(o)&&o!==s)r=!0;else if(t.classList.contains("externalDFN")){const n=t.dataset.lt?t.dataset.lt.split("|"):[];e.dataset.lt=n[0]||t.textContent,r=!0}else"partial"!==e.dataset.idl?(e.href="#"+t.id,e.classList.add("internalDFN")):r=!0;return e.hasAttribute("data-link-type")||(e.dataset.linkType="idl"in t.dataset?"idl":"dfn"),function(e){if(e.closest("code,pre"))return!0;if(1!==e.childNodes.length)return!1;const[t]=e.childNodes;return"code"===t.localName}(t)&&function(e,t){const n=e.textContent.trim(),r=t.dataset.hasOwnProperty("idl"),o=Ka(e)&&Ka(t,n);r&&!o||gn(e,document.createElement("code"))}(e,t),!r}function Ka(e,t=""){switch(e.localName){case"a":if(!e.querySelector("code"))return!0;break;default:{const{dataset:n}=e;if(e.textContent.trim()===t)return!0;if(n.title===t)return!0;if(n.lt||n.localLt){const e=[];return n.lt&&e.push(...n.lt.split("|")),n.localLt&&e.push(...n.localLt.split("|")),e.includes(t)}}}return!1}function Xa(e){e.forEach(e=>{Cn(`Found linkless \`<a>\` element with text "${e.textContent}" but no matching \`<dfn>\``,Ha,{title:"Linking error: not matching `<dfn>`",elements:[e]})})}var Qa=Object.freeze({__proto__:null,name:Ha,possibleExternalLinks:Ga,run:async function(e){const t=function(){const e=new $n;for(const t of Vi.keys()){const{result:n,duplicates:r}=Za(t);e.set(t,n),r.length>0&&_n(Va.duplicateMsg(t),Ha,{title:Va.duplicateTitle,elements:r})}return e}(),n=[],r=document.querySelectorAll("a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)");for(const e of r){const r=Ya(e,t);if(r){Ja(e,r,t)||Ga.push(e)}else""===e.dataset.cite?n.push(e):Ga.push(e)}Xa(n),function(e){const{shortName:t=""}=e,n=new RegExp(String.raw`^([?!])?${t}\b([^-])`,"i"),r=document.querySelectorAll("dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])");for(const t of r){t.dataset.cite=t.dataset.cite.replace(n,"$1__SPEC__$2");const{key:r,isNormative:o}=Fa(t);r!==Oa&&(o||e.normativeReferences.has(r)?(e.normativeReferences.add(r),e.informativeReferences.delete(r)):e.informativeReferences.add(r))}}(e),e.xref||Xa(Ga)}});const ec="xrefs",tc=3e5;async function nc(){return await qt.openDB("xref",2,{upgrade(e){[...e.objectStoreNames].forEach(t=>e.deleteObjectStore(t));e.createObjectStore(ec,{keyPath:"query.id"}).createIndex("byTerm","query.term",{unique:!1})}})}async function rc(e){const t=new Map;if(await async function(){const e="XREF:LAST_VERSION_CHECK",t=parseInt(localStorage.getItem(e),10),n=Date.now();if(!t)return localStorage.setItem(e,n.toString()),!1;if(n-t<tc)return!1;const r=new URL("meta/version",ic).href,o=await fetch(r);if(!o.ok)return!1;const s=await o.text();return localStorage.setItem(e,n.toString()),parseInt(s,10)>t}())return await async function(){try{await nc().then(e=>e.clear(ec))}catch(e){console.error(e)}}(),t;const n=new Set(e.map(e=>e.id));try{const e=await nc();let r=await e.transaction(ec).store.openCursor();for(;r;)n.has(r.key)&&t.set(r.key,r.value.result),r=await r.continue()}catch(e){console.error(e)}return t}const oc="core/xref",sc={"web-platform":["HTML","INFRA","URL","WEBIDL","DOM","FETCH"]},ic="https://respec.org/xref/";if(!document.querySelector("link[rel='preconnect'][href='https://respec.org']")){const e=Xt({hint:"preconnect",href:"https://respec.org"});document.head.appendChild(e)}function ac(e){const t="xrefType"in e.dataset;let n=cc(e);t||(n=n.toLowerCase());const r=function(e){const t=[];let n=e.closest("[data-cite]");for(;n;){const r=n.dataset.cite.toLowerCase().replace(/[!?]/g,"").split(/\s+/).filter(e=>e);if(r.length&&t.push(r),n===e)break;n=n.parentElement.closest("[data-cite]")}if(n!==e){const n=e.closest("section"),r=[...n?n.querySelectorAll("a.bibref"):[]].map(e=>e.textContent.toLowerCase());r.length&&t.push(r)}return function(e){const t=[];for(const n of e){const e=t[t.length-1]||[],r=[...new Set(n)].filter(t=>!e.includes(t));t.push(r.sort())}return t}(t)}(e),o=function(e,t){if(t)return e.dataset.xrefType?e.dataset.xrefType.split("|"):["_IDL_"];return["_CONCEPT_"]}(e,t),s=function(e,t){if(e.dataset.xrefFor)return nn(e.dataset.xrefFor);if(t){const t=e.closest("[data-xref-for]");if(t)return nn(t.dataset.xrefFor)}return null}(e,t);return{term:n,types:o,...r.length&&{specs:r},..."string"==typeof s&&{for:s}}}function cc(e){const{lt:t}=e.dataset;let n=t?t.split("|",1)[0]:e.textContent;return n=nn(n),"the-empty-string"===n?"":n}function lc(e,t,n,r){const{term:o,specs:s=[]}=t,{uri:i,shortname:a,spec:c,normative:l,type:u,for:d}=n,p=s.flat().includes(c)?c:a,f=new URL(i,"https://example.org"),{pathname:h}=f,m={cite:p,citePath:h,citeFrag:f.hash.slice(1),type:u};d&&(m.linkFor=d[0]),Object.assign(e.dataset,m),function(e,t,n,r,o){if(!function(e){const t=e.closest(".normative"),n=e.closest(Kt);return!n||e===t||t&&n&&n.contains(t)}(e))return void(o.normativeReferences.has(t)||o.informativeReferences.add(t));if(n){const e=o.informativeReferences.has(t)?o.informativeReferences.getCanonicalKey(t):t;return o.normativeReferences.add(e),void o.informativeReferences.delete(e)}Cn(`Normative reference to "${r}" found but term is defined informatively in "${t}"`,oc,{title:"Error: Normative reference to informative term",elements:[e]})}(e,p,l,o,r)}function uc(e){const t=JSON.stringify(e,Object.keys(e).sort()),n=(new TextEncoder).encode(t);return crypto.subtle.digest("SHA-1",n).then(dc)}function dc(e){return[...new Uint8Array(e)].map(e=>e.toString(16).padStart(2,"0")).join("")}function pc(e){const t=e.querySelectorAll("a[data-xref-for], a[data-xref-type], a[data-link-for]"),n=["data-xref-for","data-xref-type","data-link-for"];t.forEach(e=>{n.forEach(t=>e.removeAttribute(t))})}var fc=Object.freeze({__proto__:null,name:oc,API_URL:ic,run:async function(e){if(!e.xref)return;const t=function(e){const t={url:ic,specs:null},n=Object.assign({},t);switch(Array.isArray(e)?"array":typeof e){case"boolean":break;case"string":e.toLowerCase()in sc?Object.assign(n,{specs:sc[e.toLowerCase()]}):r(e);break;case"array":Object.assign(n,{specs:e});break;case"object":if(Object.assign(n,e),e.profile){const t=e.profile.toLowerCase();if(t in sc){const r=(e.specs||[]).concat(sc[t]);Object.assign(n,{specs:r})}else r(e.profile)}break;default:_n(`Invalid value for \`xref\` configuration option. Received: "${e}".`,oc)}return n;function r(e){_n(`Invalid profile "${e}" in \`respecConfig.xref\`. Please use one of the supported profiles: ${Object.keys(sc).map(e=>`"${e}"`).join(", ")}.`,oc)}}(e.xref);if(t.specs){const e=document.body.dataset.cite?document.body.dataset.cite.split(/\s+/):[];document.body.dataset.cite=e.concat(t.specs).join(" ")}const n=Ga.concat(function(){const e=document.querySelectorAll("a[data-cite]:not([data-cite='']):not([data-cite*='#']), dfn[data-cite]:not([data-cite='']):not([data-cite*='#'])"),t=document.querySelectorAll("dfn.externalDFN");return[...e].filter(e=>{if(""===e.textContent.trim())return!1;const t=e.closest("[data-cite]");return!t||""!==t.dataset.cite}).concat(...t)}());if(!n.length)return;const r=[];for(const e of n){const t=ac(e),n=await uc(t);r.push({...t,id:n})}const o=await async function(e,t){const n=new Set,r=e.filter(e=>!n.has(e.id)&&(n.add(e.id)&&!0)),o=await rc(r),s=r.filter(e=>!o.get(e.id)),i=await async function(e,t){if(!e.length)return new Map;const n={keys:e},r={method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}},o=await fetch(t,r),s=await o.json();return new Map(s.result)}(s,t);i.size&&await async function(e,t){try{const n=(await nc()).transaction(ec,"readwrite");for(const r of e){const e=t.get(r.id);n.objectStore(ec).add({query:r,result:e})}await n.done}catch(e){console.error(e)}}(r,i);return new Map([...o,...i])}(r,t.url);!function(e,t,n,r){const o={ambiguous:new Map,notFound:new Map};for(let s=0,i=e.length;s<i;s++){if(e[s].closest("[data-no-xref]"))continue;const i=e[s],a=t[s],{id:c}=a,l=n.get(c);if(1===l.length)lc(i,a,l[0],r);else{const e=o[0===l.length?"notFound":"ambiguous"];e.has(c)||e.set(c,{elems:[],results:l,query:a}),e.get(c).elems.push(i)}}!function({ambiguous:e,notFound:t}){const n=(e,t,n=[])=>{const r=new URL(ic);return r.searchParams.set("term",e),t.for&&r.searchParams.set("for",t.for),r.searchParams.set("types",t.types.join(",")),n.length&&r.searchParams.set("specs",n.join(",")),r},r=e=>`[Learn more about this error](https://respec.org/docs/#error-term-not-found) or see [how to cite to resolve the error](${e}).`;for(const{query:e,elems:o}of t.values()){const t=e.specs?[...new Set(e.specs.flat())].sort():[],s=cc(o[0]),i=n(s,e),a=t.map(e=>`\`${e}\``).join(", "),c=r(i);_n(`Couldn't match "**${s}**" to anything in the document or in any other document cited in this specification: ${a}.`,oc,{title:"Error: No matching dfn found.",elements:o,hint:c})}for(const{query:t,elems:o,results:s}of e.values()){const e=[...new Set(s.map(e=>e.shortname))].sort(),i=e.map(e=>`**${e}**`).join(", "),a=cc(o[0]),c=r(n(a,t,e));_n(`The term "**${a}**" is defined in ${i} in multiple ways, so it's ambiguous.`,oc,{title:"Error: Linking an ambiguous dfn.",elements:o,hint:c})}}(o)}(n,r,o,e),Ln("beforesave",pc)},getTermFromElement:cc});var hc=Object.freeze({__proto__:null,name:"core/webidl-index",run:function(){const e=document.querySelector("section#idl-index");if(!e)return;const t=[2,3,4,5,6].map(e=>`h${e}:first-child`).join(",");if(!e.querySelector(t)){const t=document.createElement("h2");e.title?(t.textContent=e.title,e.removeAttribute("title")):t.textContent="IDL Index",e.prepend(t)}const n=Array.from(document.querySelectorAll("pre.idl:not(.exclude) > code")).filter(e=>!e.closest(Kt));if(0===n.length){const t="This specification doesn't normatively declare any Web IDL.";return void e.append(t)}const r=document.createElement("pre");r.classList.add("idl","def"),r.id="actual-idl-index",n.map(e=>{const t=document.createDocumentFragment();for(const n of e.children)t.appendChild(n.cloneNode(!0));return t}).forEach(e=>{r.lastChild&&r.append("\n\n"),r.appendChild(e)}),r.querySelectorAll("*[id]").forEach(e=>e.removeAttribute("id")),e.appendChild(r),gn(r,document.createElement("code")),Ia(r)}});var mc=String.raw`ul.index{columns:30ch;column-gap:1.5em} ul.index li{list-style:inherit} ul.index li span{color:inherit;cursor:pointer;white-space:normal} #index-defined-here ul.index li{font-size:.9rem} @@ -850,35 +852,35 @@ ul.index code{color:inherit} #index-defined-here .print-only{display:none} @media print{ #index-defined-here .print-only{display:initial} -}`;const fc=rn({en:{heading:"Index",headingExternal:"Terms defined by reference",headlingLocal:"Terms defined by this specification",dfnOf:"definition of"}}),hc=new Set(["attribute","callback","dict-member","dictionary","element-attr","element","enum-value","enum","exception","extended-attribute","interface","method","typedef"]);function mc(e){const t=e.dataset,n=t.dfnType||t.idl||t.linkType||"";switch(n){case"":case"dfn":return"";default:return n}}function gc(e){const t=e.closest("[data-dfn-for]:not([data-dfn-for=''])");return t?t.dataset.dfnFor:""}function bc(e,t,n=""){if(n.startsWith("[[")){return`internal slot for <code>${gc(e)}</code>`}switch(t){case"dict-member":case"method":case"attribute":case"enum-value":return`${"dict-member"===t?"member":t.replace("-"," ")} for <code>${gc(e)}</code>`;case"interface":case"dictionary":case"enum":return t;case"constructor":return`for <code>${gc(e)}</code>`;default:return""}}function wc(){document.querySelectorAll("#index-defined-here li[data-id]").forEach(e=>e.append((e=>{const t="§"+document.getElementById(e).closest("section").querySelector(".secno").textContent.trim();return Ht`<span class="print-only">${t}</span>`})(e.dataset.id)))}function yc(){const e=new Set,t=new Map,n=document.querySelectorAll("a[data-cite]");for(const r of n){if(!r.dataset.cite)continue;const n=r.href;if(e.has(n))continue;const{type:o,linkFor:s}=r.dataset,i=sc(r);if(!i)continue;const a=Wa(r).key.toUpperCase();(t.get(a)||t.set(a,[]).get(a)).push({term:i,type:o,linkFor:s,elem:r}),e.add(n)}return t}function vc(e){const{elem:t}=e,n=function(e){const{term:t,type:n,linkFor:r}=e;let o=t;hc.has(n)&&("extended-attribute"===n&&(o=`[${o}]`),o=`<code>${o}</code>`);const s=xc.has(t)?"type":kc.get(n);s&&(o+=" "+s);if(r){let e=r;/\s/.test(r)||(e=`<code>${e}</code>`),"element-attr"===n&&(e+=" element"),o+=` (for ${e})`}return o}(e);return Ht`<li> +}`;const gc=rn({en:{heading:"Index",headingExternal:"Terms defined by reference",headlingLocal:"Terms defined by this specification",dfnOf:"definition of"}}),bc=new Set(["attribute","callback","dict-member","dictionary","element-attr","element","enum-value","enum","exception","extended-attribute","interface","method","typedef"]);function wc(e){const t=e.dataset,n=t.dfnType||t.idl||t.linkType||"";switch(n){case"":case"dfn":return"";default:return n}}function yc(e){const t=e.closest("[data-dfn-for]:not([data-dfn-for=''])");return t?t.dataset.dfnFor:""}function vc(e,t,n=""){if(n.startsWith("[[")){return`internal slot for <code>${yc(e)}</code>`}switch(t){case"dict-member":case"method":case"attribute":case"enum-value":return`${"dict-member"===t?"member":t.replace("-"," ")} for <code>${yc(e)}</code>`;case"interface":case"dictionary":case"enum":return t;case"constructor":return`for <code>${yc(e)}</code>`;default:return""}}function kc(){document.querySelectorAll("#index-defined-here li[data-id]").forEach(e=>e.append((e=>{const t="§"+document.getElementById(e).closest("section").querySelector(".secno").textContent.trim();return Ht`<span class="print-only">${t}</span>`})(e.dataset.id)))}function xc(){const e=new Set,t=new Map,n=document.querySelectorAll("a[data-cite]");for(const r of n){if(!r.dataset.cite)continue;const n=r.href;if(e.has(n))continue;const{type:o,linkFor:s}=r.dataset,i=cc(r);if(!i)continue;const a=Fa(r).key.toUpperCase();(t.get(a)||t.set(a,[]).get(a)).push({term:i,type:o,linkFor:s,elem:r}),e.add(n)}return t}function $c(e){const{elem:t}=e,n=function(e){const{term:t,type:n,linkFor:r}=e;let o=t;bc.has(n)&&("extended-attribute"===n&&(o=`[${o}]`),o=`<code>${o}</code>`);const s=_c.has(t)?"type":Sc.get(n);s&&(o+=" "+s);if(r){let e=r;/\s/.test(r)||(e=`<code>${e}</code>`),"element-attr"===n&&(e+=" element"),o+=` (for ${e})`}return o}(e);return Ht`<li> <span class="index-term" data-href="${t.href}">${{html:n}}</span> - </li>`}const kc=new Map([["attribute","attribute"],["element-attr","attribute"],["element","element"],["enum","enum"],["exception","exception"],["extended-attribute","extended attribute"],["interface","interface"]]),xc=new Set(["boolean","byte","octet","short","unsigned short","long","unsigned long","long long","unsigned long long","float","unrestricted float","double","unrestricted double","undefined","any","object","symbol"]);function $c(e){e.querySelectorAll("#index-defined-elsewhere li[data-spec]").forEach(e=>e.removeAttribute("data-spec")),e.querySelectorAll("#index-defined-here li[data-id]").forEach(e=>e.removeAttribute("data-id"))}var Sc=Object.freeze({__proto__:null,name:"core/dfn-index",run:function(){const e=document.querySelector("section#index");if(!e)return;const t=document.createElement("style");t.textContent=pc,document.head.appendChild(t),e.classList.add("appendix"),e.querySelector("h2")||e.prepend(Ht`<h2>${fc.heading}</h2>`);const n=Ht`<section id="index-defined-here"> - <h3>${fc.headlingLocal}</h3> + </li>`}const Sc=new Map([["attribute","attribute"],["element-attr","attribute"],["element","element"],["enum","enum"],["exception","exception"],["extended-attribute","extended attribute"],["interface","interface"]]),_c=new Set(["boolean","byte","octet","short","unsigned short","long","unsigned long","long long","unsigned long long","float","unrestricted float","double","unrestricted double","undefined","any","object","symbol"]);function Cc(e){e.querySelectorAll("#index-defined-elsewhere li[data-spec]").forEach(e=>e.removeAttribute("data-spec")),e.querySelectorAll("#index-defined-here li[data-id]").forEach(e=>e.removeAttribute("data-id"))}var Ec=Object.freeze({__proto__:null,name:"core/dfn-index",run:function(){const e=document.querySelector("section#index");if(!e)return;const t=document.createElement("style");t.textContent=mc,document.head.appendChild(t),e.classList.add("appendix"),e.querySelector("h2")||e.prepend(Ht`<h2>${gc.heading}</h2>`);const n=Ht`<section id="index-defined-here"> + <h3>${gc.headlingLocal}</h3> ${function(){const e=function(){const e=new Map,t=document.querySelectorAll("dfn:not([data-cite])");for(const n of t){if(!n.id)continue;const t=nn(n.textContent);(e.get(t)||e.set(t,[]).get(t)).push(n)}return[...e].sort(([e],[t])=>e.slice(e.search(/\w/)).localeCompare(t.slice(t.search(/\w/))))}();return Ht`<ul class="index"> ${e.map(([e,t])=>function(e,t){const n=(e,t,n)=>{const r="#"+e.id;return Ht`<li data-id=${e.id}> <a class="index-term" href="${r}">${{html:t}}</a> ${n?{html:n}:""} - </li>`};if(1===t.length){const r=t[0],o=mc(r),s=function(e,t,n){let r=n;"enum-value"===t&&(r=`"${r}"`);(hc.has(t)||e.dataset.idl||e.closest("code"))&&(r=`<code>${r}</code>`);return r}(r,o,e),i=bc(r,o,e);return n(r,s,i)}return Ht`<li> + </li>`};if(1===t.length){const r=t[0],o=wc(r),s=function(e,t,n){let r=n;"enum-value"===t&&(r=`"${r}"`);(bc.has(t)||e.dataset.idl||e.closest("code"))&&(r=`<code>${r}</code>`);return r}(r,o,e),i=vc(r,o,e);return n(r,s,i)}return Ht`<li> ${e} <ul> - ${t.map(t=>{const r=bc(t,mc(t),e)||fc.dfnOf;return n(t,r)})} + ${t.map(t=>{const r=vc(t,wc(t),e)||gc.dfnOf;return n(t,r)})} </ul> </li>`}(e,t))} </ul>`}()} </section>`;e.append(n);const r=Ht`<section id="index-defined-elsewhere"> - <h3>${fc.headingExternal}</h3> - ${function(){const e=[...yc().entries()].sort(([e],[t])=>e.localeCompare(t));return Ht`<ul class="index"> + <h3>${gc.headingExternal}</h3> + ${function(){const e=[...xc().entries()].sort(([e],[t])=>e.localeCompare(t));return Ht`<ul class="index"> ${e.map(([e,t])=>Ht`<li data-spec="${e}"> - ${gi(e)} defines the following: + ${yi(e)} defines the following: <ul> - ${t.sort((e,t)=>e.term.localeCompare(t.term)).map(vc)} + ${t.sort((e,t)=>e.term.localeCompare(t.term)).map($c)} </ul> </li>`)} </ul>`}()} - </section>`;e.append(r);for(const e of r.querySelectorAll(".index-term"))pn(e,"index-term");Ln("toc",wc,{once:!0}),Ln("beforesave",$c)}});const _c="core/contrib";var Cc=Object.freeze({__proto__:null,name:_c,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void _n("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",_c)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Ht(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=en(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await cn(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return _n("Error loading contributors from GitHub.",_c),console.error(e),null}}}(t,n)}});var Ec=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{hn(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const Rc=["h2","h3","h4","h5","h6"],Tc=["h1",...Rc],Ac="core/structure",Lc=rn({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function Pc(e,t,{prefix:n=""}={}){let r=!1,o=0,s=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const i=Ht`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=s,r=!0);let e=a.isIntro?"":r?Ic(s-o+1):n+s;const c=e.split(".").length;if(1===c&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(s+=1,a.header.prepend(Ht`<bdi class="secno">${e} </bdi>`)),c<=t){const n=a.header.id||a.element.id,r=Nc(a.header,n),o=Pc(a.subsections,t,{prefix:e});o&&r.append(o),i.append(r)}}return i}function Ic(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function Dc(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!Rc.includes(o.localName))continue;const s=o.textContent;pn(e,null,s),r.push({element:e,header:o,title:s,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:Dc(e,{tocIntroductory:t})})}return r}function Nc(e,t){const n=Ht`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=hn(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{hn(e,"span").removeAttribute("id")}),Ht`<li class="tocline">${n}</li>`}var Oc=Object.freeze({__proto__:null,name:Ac,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=Tc.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(bn(e,"section").length+1,6);e.localName!==t&&hn(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){_n("`data-max-toc` must have a value between 0-6 (inclusive).",Ac,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=Pc(Dc(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Ht`<nav id="toc"></nav>`,n=Ht`<h2 class="introductory">${Lc.toc}</h2>`;pn(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Ht`<p role="navigation" id="back-to-top"> + </section>`;e.append(r);for(const e of r.querySelectorAll(".index-term"))pn(e,"index-term");Ln("toc",kc,{once:!0}),Ln("beforesave",Cc)}});const Rc="core/contrib";var Tc=Object.freeze({__proto__:null,name:Rc,run:async function(e){if(!document.getElementById("gh-contributors"))return;if(!e.github){return void _n("Requested list of contributors from GitHub, but [`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.",Rc)}const t=e.editors.map(e=>e.name),n=`${e.github.apiBase}/${e.github.fullName}/`;await async function(e,t){const n=document.getElementById("gh-contributors");if(!n)return;n.textContent="Fetching list of contributors...";const r=await o();null!==r?function(e,t){const n=e.sort((e,t)=>{const n=e.name||e.login,r=t.name||t.login;return n.toLowerCase().localeCompare(r.toLowerCase())});if("UL"===t.tagName)return void Ht(t)`${n.map(({name:e,login:t})=>`<li><a href="https://github.com/${t}">${e||t}</a></li>`)}`;const r=n.map(e=>e.name||e.login);t.textContent=en(r)}(r,n):n.textContent="Failed to fetch contributors.";async function o(){const{href:n}=new URL("contributors",t);try{const t=await cn(n);if(!t.ok)throw new Error(`Request to ${n} failed with status code ${t.status}`);return(await t.json()).filter(t=>!e.includes(t.name||t.login))}catch(e){return _n("Error loading contributors from GitHub.",Rc),console.error(e),null}}}(t,n)}});var Ac=Object.freeze({__proto__:null,name:"core/fix-headers",run:function(){[...document.querySelectorAll("section:not(.introductory)")].map(e=>e.querySelector("h1, h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{hn(e,"h"+Math.min(function(e,t){const n=[];for(;e!=e.ownerDocument.body;)e.matches(t)&&n.push(e),e=e.parentElement;return n}(e,"section").length+1,6))})}});const Lc=["h2","h3","h4","h5","h6"],Pc=["h1",...Lc],Ic="core/structure",Dc=rn({en:{toc:"Table of Contents"},zh:{toc:"内容大纲"},ko:{toc:"목차"},ja:{toc:"目次"},nl:{toc:"Inhoudsopgave"},es:{toc:"Tabla de Contenidos"},de:{toc:"Inhaltsverzeichnis"}});function Nc(e,t,{prefix:n=""}={}){let r=!1,o=0,s=1;if(n.length&&!n.endsWith(".")&&(n+="."),0===e.length)return null;const i=Ht`<ol class="toc"></ol>`;for(const a of e){!a.isAppendix||n||r||(o=s,r=!0);let e=a.isIntro?"":r?Oc(s-o+1):n+s;const c=e.split(".").length;if(1===c&&(e+=".",a.header.before(document.createComment("OddPage"))),a.isIntro||(s+=1,a.header.prepend(Ht`<bdi class="secno">${e} </bdi>`)),c<=t){const n=a.header.id||a.element.id,r=zc(a.header,n),o=Nc(a.subsections,t,{prefix:e});o&&r.append(o),i.append(r)}}return i}function Oc(e){let t="";for(;e>0;)e-=1,t=String.fromCharCode(65+e%26)+t,e=Math.floor(e/26);return t}function jc(e,{tocIntroductory:t=!1}={}){const n=t?e.querySelectorAll(":scope > section"):e.querySelectorAll(":scope > section:not(.introductory)"),r=[];for(const e of n){const n=e.classList.contains("notoc");if(!e.children.length||n)continue;const o=e.children[0];if(!Lc.includes(o.localName))continue;const s=o.textContent;pn(e,null,s),r.push({element:e,header:o,title:s,isIntro:e.classList.contains("introductory"),isAppendix:e.classList.contains("appendix"),subsections:jc(e,{tocIntroductory:t})})}return r}function zc(e,t){const n=Ht`<a href="${"#"+t}" class="tocxref" />`;var r;return n.append(...e.cloneNode(!0).childNodes),(r=n).querySelectorAll("a").forEach(e=>{const t=hn(e,"span");t.className="formerLink",t.removeAttribute("href")}),r.querySelectorAll("dfn").forEach(e=>{hn(e,"span").removeAttribute("id")}),Ht`<li class="tocline">${n}</li>`}var Wc=Object.freeze({__proto__:null,name:Ic,run:function(e){if("tocIntroductory"in e==!1&&(e.tocIntroductory=!1),"maxTocLevel"in e==!1&&(e.maxTocLevel=1/0),function(){const e=function(){const e=Pc.map(e=>`section:not(.introductory) ${e}:first-child`).join(",");return[...document.querySelectorAll(e)].filter(e=>!e.closest("section.introductory"))}();if(!e.length)return;e.forEach(e=>{const t="h"+Math.min(bn(e,"section").length+1,6);e.localName!==t&&hn(e,t)})}(),!e.noTOC){!function(){const e=document.querySelectorAll("section[data-max-toc]");for(const t of e){const e=parseInt(t.dataset.maxToc,10);if(e<0||e>6||Number.isNaN(e)){_n("`data-max-toc` must have a value between 0-6 (inclusive).",Ic,{elements:[t]});continue}if(0===e){t.classList.add("notoc");continue}const n=t.querySelectorAll(":scope > "+Array.from({length:e},()=>"section").join(" > "));for(const e of n)e.classList.add("notoc")}}();const t=Nc(jc(document.body,{tocIntroductory:e.tocIntroductory}),e.maxTocLevel);t&&function(e){if(!e)return;const t=Ht`<nav id="toc"></nav>`,n=Ht`<h2 class="introductory">${Dc.toc}</h2>`;pn(n),t.append(n,e);const r=document.getElementById("toc")||document.getElementById("sotd")||document.getElementById("abstract");r&&("toc"===r.id?r.replaceWith(t):r.after(t));const o=Ht`<p role="navigation" id="back-to-top"> <a href="#title"><abbr title="Back to Top">↑</abbr></a> - </p>`;document.body.append(o)}(t)}An("toc")}});const jc=rn({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var zc=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Ht`<p><em>${jc.informative}</em></p>`)})}});var Wc=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(pn(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Ht` + </p>`;document.body.append(o)}(t)}An("toc")}});const Mc=rn({en:{informative:"This section is non-normative."},nl:{informative:"Dit onderdeel is niet normatief."},ko:{informative:"이 부분은 비규범적입니다."},ja:{informative:"この節は仕様には含まれません."},de:{informative:"Dieser Abschnitt ist nicht normativ."},zh:{informative:"本章节不包含规范性内容。"}});var Uc=Object.freeze({__proto__:null,name:"core/informative",run:function(){Array.from(document.querySelectorAll("section.informative")).map(e=>e.querySelector("h2, h3, h4, h5, h6")).filter(e=>e).forEach(e=>{e.after(Ht`<p><em>${Mc.informative}</em></p>`)})}});var Fc=Object.freeze({__proto__:null,name:"core/id-headers",run:function(e){const t=document.querySelectorAll("section:not(.head):not(.introductory) h2, h3, h4, h5, h6");for(const n of t){let t=n.id;t||(pn(n),t=n.parentElement.id||n.id),e.addSectionLinks&&n.appendChild(Ht` <a href="${"#"+t}" class="self-link" aria-label="§"></a> - `)}}});var Mc=String.raw`.caniuse-stats{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:baseline;cursor:pointer} + `)}}});var qc=String.raw`.caniuse-stats{display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:baseline;cursor:pointer} button.caniuse-cell{margin:1px 1px 0 0;border:none} .caniuse-browser{position:relative} @media print{ @@ -895,13 +897,13 @@ li.caniuse-cell{margin-bottom:1px} .caniuse-cell.d,.caniuse-cell.n{--caniuse-angle:45deg;--caniuse-bg:var(--no-support);--caniuse-bg-alt:var(--no-support-alt)} .caniuse-cell.d{--caniuse-angle:180deg} .caniuse-cell.a,.caniuse-cell.p,.caniuse-cell.x{--caniuse-angle:90deg;--caniuse-bg:var(--partial);--caniuse-bg-alt:var(--partial-alt)} -.caniuse-stats .caniuse-browser:hover>ul,.caniuse-stats button:focus+ul{display:block}`;const Uc="core/caniuse",Fc=new Set(["and_chr","and_ff","and_uc","android","bb","chrome","edge","firefox","ie","ios_saf","op_mini","op_mob","opera","safari","samsung"]);async function qc(e,t){const{feature:n,versions:r,browsers:o}=t,s=new URLSearchParams;s.set("feature",n),s.set("versions",r),Array.isArray(o)&&s.set("browsers",o.join(",")),s.set("format","html");const i=`${e}?${s.toString()}`,a=await fetch(i);if(!a.ok){const{status:e,statusText:t}=a;throw new Error(`Failed to get caniuse data: (${e}) ${t}`)}return await a.text()}var Bc=Object.freeze({__proto__:null,name:Uc,prepare:function(e){if(!e.caniuse)return;const t=function(e){const t={versions:4};if("string"==typeof e.caniuse)return{feature:e.caniuse,...t};const n={...t,...e.caniuse},{browsers:r}=n;if(Array.isArray(r)){const e=r.filter(e=>!Fc.has(e));if(e.length){Cn(`Ignoring invalid browser(s): ${e.map(e=>`"\`${e}\`"`).join(", ")} in [\`respecConfig.caniuse.browsers\`](https://github.com/w3c/respec/wiki/caniuse)`,Uc)}}return n}(e);if(e.caniuse=t,!t.feature)return;document.head.appendChild(Ht`<style class="removeOnSave"> - ${Mc} - </style>`);const n=t.apiURL||"https://respec.org/caniuse/";e.state[Uc]={fetchPromise:qc(n,t)}},run:async function(e){const t=e.caniuse;if(!t?.feature)return;const n=new URL(t.feature,"https://caniuse.com/").href,r=document.querySelector(".head dl"),o=(async()=>{try{const t=await e.state[Uc].fetchPromise;return Ht`${{html:t}}`}catch(e){return _n(`Couldn't find feature "${t.feature}" on caniuse.com.`,Uc,{hint:"Please check the feature key on [caniuse.com](https://caniuse.com)"}),console.error(e),Ht`<a href="${n}">caniuse.com</a>`}})(),s=Ht`<dt class="caniuse-title">Browser support:</dt> +.caniuse-stats .caniuse-browser:hover>ul,.caniuse-stats button:focus+ul{display:block}`;const Bc="core/caniuse",Hc=new Set(["and_chr","and_ff","and_uc","android","bb","chrome","edge","firefox","ie","ios_saf","op_mini","op_mob","opera","safari","samsung"]);async function Gc(e,t){const{feature:n,versions:r,browsers:o}=t,s=new URLSearchParams;s.set("feature",n),s.set("versions",r),Array.isArray(o)&&s.set("browsers",o.join(",")),s.set("format","html");const i=`${e}?${s.toString()}`,a=await fetch(i);if(!a.ok){const{status:e,statusText:t}=a;throw new Error(`Failed to get caniuse data: (${e}) ${t}`)}return await a.text()}var Vc=Object.freeze({__proto__:null,name:Bc,prepare:function(e){if(!e.caniuse)return;const t=function(e){const t={versions:4};if("string"==typeof e.caniuse)return{feature:e.caniuse,...t};const n={...t,...e.caniuse},{browsers:r}=n;if(Array.isArray(r)){const e=r.filter(e=>!Hc.has(e));if(e.length){Cn(`Ignoring invalid browser(s): ${e.map(e=>`"\`${e}\`"`).join(", ")} in [\`respecConfig.caniuse.browsers\`](https://github.com/w3c/respec/wiki/caniuse)`,Bc)}}return n}(e);if(e.caniuse=t,!t.feature)return;document.head.appendChild(Ht`<style class="removeOnSave"> + ${qc} + </style>`);const n=t.apiURL||"https://respec.org/caniuse/";e.state[Bc]={fetchPromise:Gc(n,t)}},run:async function(e){const t=e.caniuse;if(!t?.feature)return;const n=new URL(t.feature,"https://caniuse.com/").href,r=document.querySelector(".head dl"),o=(async()=>{try{const t=await e.state[Bc].fetchPromise;return Ht`${{html:t}}`}catch(e){return _n(`Couldn't find feature "${t.feature}" on caniuse.com.`,Bc,{hint:"Please check the feature key on [caniuse.com](https://caniuse.com)"}),console.error(e),Ht`<a href="${n}">caniuse.com</a>`}})(),s=Ht`<dt class="caniuse-title">Browser support:</dt> <dd class="caniuse-stats"> ${{any:o,placeholder:"Fetching data from caniuse.com..."}} </dd>`;r.append(...s.childNodes),await o,An("amend-user-config",{caniuse:t.feature}),Ln("beforesave",e=>{Ht.bind(e.querySelector(".caniuse-stats"))` - <a href="${n}">caniuse.com</a>`})}});var Hc=String.raw`.mdn{font-size:.75em;position:absolute;right:.3em;min-width:0;margin-top:3em} + <a href="${n}">caniuse.com</a>`})}});var Zc=String.raw`.mdn{font-size:.75em;position:absolute;right:.3em;min-width:0;margin-top:3em} .mdn details{width:100%;margin:1px 0;position:relative;z-index:10;box-sizing:border-box;padding:.4em;padding-top:0} .mdn details[open]{min-width:25ch;max-width:32ch;background:#fff;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px;z-index:11;margin-bottom:.4em} .mdn summary{text-align:right;cursor:default;margin-right:-.4em} @@ -925,35 +927,33 @@ li.caniuse-cell{margin-bottom:1px} .mdn .safari::before{background-image:url(https://resources.whatwg.org/browser-logos/safari.png)} .mdn .safari_ios::before{background-image:url(https://resources.whatwg.org/browser-logos/safari-ios.svg)} .mdn .samsunginternet_android::before{background-image:url(https://resources.whatwg.org/browser-logos/samsung.svg)} -.mdn .webview_android::before{background-image:url(https://resources.whatwg.org/browser-logos/android-webview.png)}`;const Gc="core/mdn-annotation",Vc="https://w3c.github.io/mdn-spec-links/",Zc={chrome:"Chrome",chrome_android:"Chrome Android",edge:"Edge",edge_mobile:"Edge Mobile",firefox:"Firefox",firefox_android:"Firefox Android",ie:"Internet Explorer",opera:"Opera",opera_android:"Opera Android",safari:"Safari",safari_ios:"Safari iOS",samsunginternet_android:"Samsung Internet",webview_android:"WebView Android"},Yc=rn({en:{inAllEngines:"This feature is in all major engines.",inSomeEngines:"This feature has limited support."},zh:{inAllEngines:"所有主要引擎均支持此特性。",inSomeEngines:"此功能支持有限。"}});function Jc(e){const t=e.closest("section");if(!t)return;const{previousElementSibling:n}=t;if(n&&n.classList.contains("mdn"))return n;const r=Ht`<aside class="mdn"></aside>`;return t.before(r),r}function Kc(e){const{name:t,slug:n,summary:r,support:o,engines:s}=e,i=n.slice(n.indexOf("/")+1),a="https://developer.mozilla.org/en-US/docs/Web/"+n,c="Expand MDN details for "+t,l=function(e){if(3===e.length)return Ht`<span title="${Yc.inAllEngines}">✅</span>`;if(e.length<2)return Ht`<span title="${Yc.inSomeEngines}">🚫</span>`;return Ht`<span> </span>`}(s);return Ht`<details> +.mdn .webview_android::before{background-image:url(https://resources.whatwg.org/browser-logos/android-webview.png)}`;const Yc="core/mdn-annotation",Jc="https://w3c.github.io/mdn-spec-links/",Kc={chrome:"Chrome",chrome_android:"Chrome Android",edge:"Edge",edge_mobile:"Edge Mobile",firefox:"Firefox",firefox_android:"Firefox Android",ie:"Internet Explorer",opera:"Opera",opera_android:"Opera Android",safari:"Safari",safari_ios:"Safari iOS",samsunginternet_android:"Samsung Internet",webview_android:"WebView Android"},Xc=rn({en:{inAllEngines:"This feature is in all major engines.",inSomeEngines:"This feature has limited support."},zh:{inAllEngines:"所有主要引擎均支持此特性。",inSomeEngines:"此功能支持有限。"}});function Qc(e){const t=e.closest("section");if(!t)return;const{previousElementSibling:n}=t;if(n&&n.classList.contains("mdn"))return n;const r=Ht`<aside class="mdn"></aside>`;return t.before(r),r}function el(e){const{name:t,slug:n,summary:r,support:o,engines:s}=e,i=n.slice(n.indexOf("/")+1),a="https://developer.mozilla.org/en-US/docs/Web/"+n,c="Expand MDN details for "+t,l=function(e){if(3===e.length)return Ht`<span title="${Xc.inAllEngines}">✅</span>`;if(e.length<2)return Ht`<span title="${Xc.inSomeEngines}">🚫</span>`;return Ht`<span> </span>`}(s);return Ht`<details> <summary aria-label="${c}"><span>MDN</span>${l}</summary> <a title="${r}" href="${a}">${i}</a> - ${function(e){if(3===e.length)return Ht`<p class="engines-all">${Yc.inAllEngines}</p>`;if(e.length<2)return Ht`<p class="engines-some">${Yc.inSomeEngines}</p>`}(s)} + ${function(e){if(3===e.length)return Ht`<p class="engines-all">${Xc.inAllEngines}</p>`;if(e.length<2)return Ht`<p class="engines-some">${Xc.inSomeEngines}</p>`}(s)} ${o?function(e){function t(e,t,n){const r="Unknown"===t?"?":t,o=`${e} ${t.toLowerCase()}`;return Ht`<tr class="${o}"> - <td>${Zc[e]}</td> + <td>${Kc[e]}</td> <td>${n||r}</td> </tr>`}function n(e,n){if(n.version_removed)return t(e,"No","");const r=n.version_added;return"boolean"==typeof r?t(e,r?"Yes":"No",""):r?t(e,"Yes",r+"+"):t(e,"Unknown","")}return Ht`<table> - ${Object.keys(Zc).map(r=>e[r]?n(r,e[r]):t(r,"Unknown",""))} + ${Object.keys(Kc).map(r=>e[r]?n(r,e[r]):t(r,"Unknown",""))} </table>`}(o):Ht`<p class="nosupportdata">No support data.</p>`} - </details>`}var Xc=Object.freeze({__proto__:null,name:Gc,run:async function(e){const t=function(e){const{shortName:t,mdn:n}=e;if(!n)return;return"string"==typeof n?n:n.key||t}(e);if(!t)return;const n=await async function(e,t){const{baseJsonPath:n=Vc,maxAge:r=864e5}=t,o=new URL(e+".json",n).href,s=await cn(o,r);if(404===s.status){return void _n(`Could not find MDN data associated with key "${e}".`,Gc,{hint:"Please add a valid key to `respecConfig.mdn`"})}return await s.json()}(t,e.mdn);if(!n)return;const r=document.createElement("style");r.textContent=Hc,document.head.append(r);for(const e of function(e){return[...document.body.querySelectorAll("[id]:not(script)")].filter(({id:t})=>Array.isArray(e[t]))}(n)){const t=n[e.id],r=Jc(e);if(r)for(const e of t)r.append(Kc(e))}}});const Qc=new Map([["text/html","html"],["application/xml","xml"]]);function el(e,t=document){const n=Qc.get(e);if(!n){const t=[...Qc.values()].join(", ");throw new TypeError(`Invalid format: ${e}. Expected one of: ${t}.`)}const r=function(e,t){const n=t.cloneNode(!0);!function(e){const{head:t,body:n,documentElement:r}=e;kn(e),e.querySelectorAll(".removeOnSave, #toc-nav").forEach(e=>e.remove()),n.classList.remove("toc-sidebar"),Qt(r);const o=e.createDocumentFragment(),s=e.querySelector("meta[name='viewport']");s&&t.firstChild!==s&&o.appendChild(s);let i=e.querySelector("meta[charset], meta[content*='charset=']");i||(i=Ht`<meta charset="utf-8" />`);o.appendChild(i);const a="ReSpec "+(window.respecVersion||"Developer Channel"),c=Ht` - <meta name="generator" content="${a}" /> - `;o.appendChild(c),t.prepend(o),An("beforesave",r)}(n);let r="";switch(e){case"xml":r=(new XMLSerializer).serializeToString(n);break;default:!function(e){e.querySelectorAll("style").forEach(e=>{e.innerHTML=`\n${e.innerHTML}\n`}),e.querySelectorAll("head > *").forEach(e=>{e.outerHTML="\n"+e.outerHTML})}(n),n.doctype&&(r+=(new XMLSerializer).serializeToString(n.doctype)),r+=n.documentElement.outerHTML}return r}(n,t);return`data:${e};charset=utf-8,${encodeURIComponent(r)}`}n("core/exporter",{rsDocToDataURL:el});const tl="ui/save-html",nl=rn({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),rl=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return el(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return el(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function ol(e){const{id:t,href:n,fileName:r,title:o,type:s}=e;return Ht`<a + </details>`}var tl=Object.freeze({__proto__:null,name:Yc,run:async function(e){const t=function(e){const{shortName:t,mdn:n}=e;if(!n)return;return"string"==typeof n?n:n.key||t}(e);if(!t)return;const n=await async function(e,t){const{baseJsonPath:n=Jc,maxAge:r=864e5}=t,o=new URL(e+".json",n).href,s=await cn(o,r);if(404===s.status){return void _n(`Could not find MDN data associated with key "${e}".`,Yc,{hint:"Please add a valid key to `respecConfig.mdn`"})}return await s.json()}(t,e.mdn);if(!n)return;const r=document.createElement("style");r.textContent=Zc,document.head.append(r);for(const e of function(e){return[...document.body.querySelectorAll("[id]:not(script)")].filter(({id:t})=>Array.isArray(e[t]))}(n)){const t=n[e.id],r=Qc(e);if(r)for(const e of t)r.append(el(e))}}});const nl="ui/save-html",rl=rn({en:{save_snapshot:"Export"},nl:{save_snapshot:"Bewaar Snapshot"},ja:{save_snapshot:"保存する"},de:{save_snapshot:"Exportieren"},zh:{save_snapshot:"导出"}}),ol=[{id:"respec-save-as-html",fileName:"index.html",title:"HTML",type:"text/html",get href(){return Dn(this.type)}},{id:"respec-save-as-xml",fileName:"index.xhtml",title:"XML",type:"application/xml",get href(){return Dn(this.type)}},{id:"respec-save-as-epub",fileName:"spec.epub",title:"EPUB 3",type:"application/epub+zip",get href(){const e=new URL("https://labs.w3.org/r2epub/");return e.searchParams.append("respec","true"),e.searchParams.append("url",document.location.href),e.href}}];function sl(e){const{id:t,href:n,fileName:r,title:o,type:s}=e;return Ht`<a href="${n}" id="${t}" download="${r}" type="${s}" class="respec-save-button" - onclick=${()=>pr.closeModal()} + onclick=${()=>mr.closeModal()} >${o}</a - >`}const sl={async show(e){await document.respec.ready;const t=Ht`<div class="respec-save-buttons"> - ${rl.map(ol)} - </div>`;pr.freshModal(nl.save_snapshot,t,e)}},il="download"in HTMLAnchorElement.prototype;let al;il&&(al=pr.addCommand(nl.save_snapshot,(function(){if(!il)return;sl.show(al)}),"Ctrl+Shift+Alt+S","💾"));var cl=Object.freeze({__proto__:null,name:tl,exportDocument:function(e,t){return Cn("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",tl,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),el(t)}});const ll="https://respec.org/specref/",ul=rn({en:{search_specref:"Search Specref"},nl:{search_specref:"Doorzoek Specref"},ja:{search_specref:"仕様検索"},de:{search_specref:"Spezifikationen durchsuchen"},zh:{search_specref:"搜索 Specref"}}),dl=pr.addCommand(ul.search_specref,(function(){const e=Ht` - <iframe class="respec-iframe" src="${ll}" onload=${e=>e.target.classList.add("ready")}></iframe> - <a href="${ll}" target="_blank">Open Search UI in a new tab</a> - `;pr.freshModal(ul.search_specref,e,dl)}),"Ctrl+Shift+Alt+space","🔎");var pl=Object.freeze({__proto__:null});const fl="https://respec.org/xref/",hl={en:{title:"Search definitions"},ja:{title:"定義検索"},de:{title:"Definitionen durchsuchen"},zh:{title:"搜索定义"}},ml=hl[s in hl?s:"en"],gl=pr.addCommand(ml.title,(function(){const e=Ht` - <iframe class="respec-iframe" src="${fl}" onload="${e=>e.target.classList.add("ready")}"></iframe> - <a href="${fl}" target="_blank">Open Search UI in a new tab</a> - `;pr.freshModal(ml.title,e,gl)}),"Ctrl+Shift+Alt+x","📚");var bl=Object.freeze({__proto__:null});const wl=rn({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const yl=document.createElement("div"),vl=Ht.bind(yl),kl=pr.addCommand(`${wl.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map(xl).forEach(t=>{e.push(t)});vl` + >`}const il={async show(e){await document.respec.ready;const t=Ht`<div class="respec-save-buttons"> + ${ol.map(sl)} + </div>`;mr.freshModal(rl.save_snapshot,t,e)}},al="download"in HTMLAnchorElement.prototype;let cl;al&&(cl=mr.addCommand(rl.save_snapshot,(function(){if(!al)return;il.show(cl)}),"Ctrl+Shift+Alt+S","💾"));var ll=Object.freeze({__proto__:null,name:nl,exportDocument:function(e,t){return Cn("Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.",nl,{hint:"Use core/exporter `rsDocToDataURL()` instead."}),Dn(t)}});const ul="https://respec.org/specref/",dl=rn({en:{search_specref:"Search Specref"},nl:{search_specref:"Doorzoek Specref"},ja:{search_specref:"仕様検索"},de:{search_specref:"Spezifikationen durchsuchen"},zh:{search_specref:"搜索 Specref"}}),pl=mr.addCommand(dl.search_specref,(function(){const e=Ht` + <iframe class="respec-iframe" src="${ul}" onload=${e=>e.target.classList.add("ready")}></iframe> + <a href="${ul}" target="_blank">Open Search UI in a new tab</a> + `;mr.freshModal(dl.search_specref,e,pl)}),"Ctrl+Shift+Alt+space","🔎");var fl=Object.freeze({__proto__:null});const hl="https://respec.org/xref/",ml={en:{title:"Search definitions"},ja:{title:"定義検索"},de:{title:"Definitionen durchsuchen"},zh:{title:"搜索定义"}},gl=ml[s in ml?s:"en"],bl=mr.addCommand(gl.title,(function(){const e=Ht` + <iframe class="respec-iframe" src="${hl}" onload="${e=>e.target.classList.add("ready")}"></iframe> + <a href="${hl}" target="_blank">Open Search UI in a new tab</a> + `;mr.freshModal(gl.title,e,bl)}),"Ctrl+Shift+Alt+x","📚");var wl=Object.freeze({__proto__:null});const yl=rn({en:{about_respec:"About"},zh:{about_respec:"关于"},nl:{about_respec:"Over"},ja:{about_respec:"これについて"},de:{about_respec:"Über"}});window.respecVersion=window.respecVersion||"Developer Edition";const vl=document.createElement("div"),kl=Ht.bind(vl),xl=mr.addCommand(`${yl.about_respec} ${window.respecVersion}`,(function(){const e=[];"getEntriesByType"in performance&&performance.getEntriesByType("measure").sort((e,t)=>t.duration-e.duration).map(({name:e,duration:t})=>({name:e,duration:t>1e3?Math.round(t/1e3)+" second(s)":t.toFixed(2)+" milliseconds"})).map($l).forEach(t=>{e.push(t)});kl` <p> ReSpec is a document production toolchain, with a notable focus on W3C specifications. </p> @@ -977,12 +977,12 @@ li.caniuse-cell{margin-bottom:1px} </thead> <tbody>${e}</tbody> </table> -`,pr.freshModal(`${wl.about_respec} - ${window.respecVersion}`,yl,kl)}),"Ctrl+Shift+Alt+A","ℹ️");function xl({name:e,duration:t}){return Ht` +`,mr.freshModal(`${yl.about_respec} - ${window.respecVersion}`,vl,xl)}),"Ctrl+Shift+Alt+A","ℹ️");function $l({name:e,duration:t}){return Ht` <tr> <td><a href="${`https://github.com/w3c/respec/blob/develop/src/${e}.js`}">${e}</a></td> <td>${t}</td> </tr> - `}var $l=Object.freeze({__proto__:null});var Sl=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});const _l="w3c/seo";function Cl({name:e,url:t,mailto:n,company:r,companyURL:o}){const s={type:"Person",name:e,url:t,"foaf:mbox":n};return(r||o)&&(s.worksFor={name:r,url:o}),s}function El(e){const{href:t,title:n,href:r}=e,o={id:t,type:"TechArticle",name:n,url:r};return e.authors&&(o.creator=e.authors.map(e=>({name:e}))),e.rawDate&&(o.publishedDate=e.rawDate),e.isbn&&(o.identifier=e.isbn),e.publisher&&(o.publisher={name:e.publisher}),o}var Rl=Object.freeze({__proto__:null,name:_l,run:async function(e){if(!e.canonicalURI)switch(e.specStatus){case"CG-DRAFT":case"BG-DRAFT":case"unofficial":return}const t=e.shortName?`https://www.w3.org/TR/${e.shortName}/`:null;switch(e.canonicalURI){case"edDraft":if(e.edDraftURI)e.canonicalURI=new URL(e.edDraftURI,document.location.href).href;else{Cn("Canonical URI set to edDraft, but no edDraftURI is set in configuration",_l),e.canonicalURI=null}break;case"TR":if(t)e.canonicalURI=t;else{Cn("Canonical URI set to TR, but no shortName is set in configuration",_l),e.canonicalURI=null}break;default:if(e.canonicalURI)try{e.canonicalURI=new URL(e.canonicalURI,document.location.href).href}catch(t){Cn("CanonicalURI is an invalid URL: "+t.message,_l),e.canonicalURI=null}else t&&(e.canonicalURI=t)}if(e.canonicalURI){const t=document.createElement("link");t.setAttribute("rel","canonical"),t.setAttribute("href",e.canonicalURI),document.head.appendChild(t)}e.doJsonLd&&await async function(e,t){const n=["TechArticle"];e.rdfStatus&&n.push(e.rdfStatus);const r={"@context":["http://schema.org",{"@vocab":"http://schema.org/","@language":t.documentElement.lang||"en",w3p:"http://www.w3.org/2001/02pd/rec54#",foaf:"http://xmlns.com/foaf/0.1/",datePublished:{"@type":"http://www.w3.org/2001/XMLSchema#date"},inLanguage:{"@language":null},isBasedOn:{"@type":"@id"},license:{"@type":"@id"}}],id:e.canonicalURI||e.thisVersion,type:n,name:document.title,inLanguage:t.documentElement.lang||"en",license:e.licenseInfo.url,datePublished:e.dashDate,copyrightHolder:{name:"World Wide Web Consortium",url:"https://www.w3.org/"},discussionUrl:e.issueBase,alternativeHeadline:e.subtitle,isBasedOn:e.prevVersion};if(e.additionalCopyrightHolders){const t=Array.isArray(e.additionalCopyrightHolders)?e.additionalCopyrightHolders:[e.additionalCopyrightHolders];r.copyrightHolder=[r.copyrightHolder,...t.map(e=>({name:e}))]}const o=t.head.querySelector("meta[name=description]");o&&(r.description=o.content);e.editors&&(r.editor=e.editors.map(Cl));e.authors&&(r.contributor=e.authors.map(Cl));const s=[...e.normativeReferences,...e.informativeReferences],i=await Promise.all(s.map(e=>ai(e)));r.citation=i.filter(e=>"object"==typeof e).map(El);const a=t.createElement("script");a.type="application/ld+json",a.textContent=JSON.stringify(r,null,2),t.head.appendChild(a)}(e,document)}});var Tl=String.raw`.hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa} + `}var Sl=Object.freeze({__proto__:null});var _l=Object.freeze({__proto__:null,name:"core/seo",run:function(){const e=document.querySelector("#abstract p:first-of-type");if(!e)return;const t=e.textContent.replace(/\s+/," ").trim(),n=document.createElement("meta");n.name="description",n.content=t,document.head.appendChild(n)}});const Cl="w3c/seo";function El({name:e,url:t,mailto:n,company:r,companyURL:o}){const s={type:"Person",name:e,url:t,"foaf:mbox":n};return(r||o)&&(s.worksFor={name:r,url:o}),s}function Rl(e){const{href:t,title:n,href:r}=e,o={id:t,type:"TechArticle",name:n,url:r};return e.authors&&(o.creator=e.authors.map(e=>({name:e}))),e.rawDate&&(o.publishedDate=e.rawDate),e.isbn&&(o.identifier=e.isbn),e.publisher&&(o.publisher={name:e.publisher}),o}var Tl=Object.freeze({__proto__:null,name:Cl,run:async function(e){if(!e.canonicalURI)switch(e.specStatus){case"CG-DRAFT":case"BG-DRAFT":case"unofficial":return}const t=e.shortName?`https://www.w3.org/TR/${e.shortName}/`:null;switch(e.canonicalURI){case"edDraft":if(e.edDraftURI)e.canonicalURI=new URL(e.edDraftURI,document.location.href).href;else{Cn("Canonical URI set to edDraft, but no edDraftURI is set in configuration",Cl),e.canonicalURI=null}break;case"TR":if(t)e.canonicalURI=t;else{Cn("Canonical URI set to TR, but no shortName is set in configuration",Cl),e.canonicalURI=null}break;default:if(e.canonicalURI)try{e.canonicalURI=new URL(e.canonicalURI,document.location.href).href}catch(t){Cn("CanonicalURI is an invalid URL: "+t.message,Cl),e.canonicalURI=null}else t&&(e.canonicalURI=t)}if(e.canonicalURI){const t=document.createElement("link");t.setAttribute("rel","canonical"),t.setAttribute("href",e.canonicalURI),document.head.appendChild(t)}e.doJsonLd&&await async function(e,t){const n=["TechArticle"];e.rdfStatus&&n.push(e.rdfStatus);const r={"@context":["http://schema.org",{"@vocab":"http://schema.org/","@language":t.documentElement.lang||"en",w3p:"http://www.w3.org/2001/02pd/rec54#",foaf:"http://xmlns.com/foaf/0.1/",datePublished:{"@type":"http://www.w3.org/2001/XMLSchema#date"},inLanguage:{"@language":null},isBasedOn:{"@type":"@id"},license:{"@type":"@id"}}],id:e.canonicalURI||e.thisVersion,type:n,name:document.title,inLanguage:t.documentElement.lang||"en",license:e.licenseInfo.url,datePublished:e.dashDate,copyrightHolder:{name:"World Wide Web Consortium",url:"https://www.w3.org/"},discussionUrl:e.issueBase,alternativeHeadline:e.subtitle,isBasedOn:e.prevVersion};if(e.additionalCopyrightHolders){const t=Array.isArray(e.additionalCopyrightHolders)?e.additionalCopyrightHolders:[e.additionalCopyrightHolders];r.copyrightHolder=[r.copyrightHolder,...t.map(e=>({name:e}))]}const o=t.head.querySelector("meta[name=description]");o&&(r.description=o.content);e.editors&&(r.editor=e.editors.map(El));e.authors&&(r.contributor=e.authors.map(El));const s=[...e.normativeReferences,...e.informativeReferences],i=await Promise.all(s.map(e=>ui(e)));r.citation=i.filter(e=>"object"==typeof e).map(Rl);const a=t.createElement("script");a.type="application/ld+json",a.textContent=JSON.stringify(r,null,2),t.head.appendChild(a)}(e,document)}});var Al=String.raw`.hljs{display:block;overflow-x:auto;padding:.5em;color:#383a42;background:#fafafa} .hljs-comment,.hljs-quote{color:#717277;font-style:italic} .hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4} .hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#ca4706;font-weight:700} @@ -993,21 +993,21 @@ li.caniuse-cell{margin-bottom:1px} .hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#336ae3} .hljs-emphasis{font-style:italic} .hljs-strong{font-weight:700} -.hljs-link{text-decoration:underline}`;async function Al(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-w3c.js",document.baseURI).href));return await t.text()}const Ll=Xt({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(Ll);const Pl=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return $u}))).default}catch{return Al("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",Pl.then(e=>({worker:e})));const Il=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight");async function Dl(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Il(),languages:t},r=await Pl;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(s){const{data:{id:i,language:a,value:c}}=s;i===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:c}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:s}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${s}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=s,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Nl=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Dl);document.head.appendChild(Ht`<style> - ${Tl} - </style>`),await Promise.all(n)}});const Ol=rn({en:{missing_test_suite_uri:"Found tests in your spec, but missing '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.",tests:"tests",test:"test"},ja:{missing_test_suite_uri:"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.",tests:"テスト",test:"テスト"},de:{missing_test_suite_uri:"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.",tests:"Tests",test:"Test"},zh:{missing_test_suite_uri:"本规范中包含测试,但在 ReSpec 配置中缺少 '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。",tests:"测试",test:"测试"}}),jl="core/data-tests";function zl(e){const t=[],[n]=new URL(e).pathname.split("/").reverse(),r=n.split(".");let[o]=r;if(r.find(e=>"https"===e)){const e=document.createElement("span");e.textContent="🔒",e.setAttribute("aria-label","requires a secure connection"),e.setAttribute("title","Test requires HTTPS"),o=o.replace(".https",""),t.push(e)}if(o.split(".").join("-").split("-").find(e=>"manual"===e)){const e=document.createElement("span");e.textContent="💪",e.setAttribute("aria-label","the test must be run manually"),e.setAttribute("title","Manual test"),o=o.replace("-manual",""),t.push(e)}return Ht` +.hljs-link{text-decoration:underline}`;async function Ll(e){const t=await fetch(new URL("../../"+e,document.currentScript&&document.currentScript.src||new URL("respec-w3c.js",document.baseURI).href));return await t.text()}const Pl=Xt({hint:"preload",href:"https://www.w3.org/Tools/respec/respec-highlight",as:"script"});document.head.appendChild(Pl);const Il=async function(){const e=await async function(){try{return(await Promise.resolve().then((function(){return Su}))).default}catch{return Ll("worker/respec-worker.js")}}(),t=URL.createObjectURL(new Blob([e],{type:"application/javascript"}));return new Worker(t)}();n("core/worker",Il.then(e=>({worker:e})));const Dl=function(e,t=0){const n=function*(e,t){for(;;)yield`${e}:${t}`,t++}(e,t);return()=>n.next().value}("highlight");async function Nl(e){e.setAttribute("aria-busy","true");const t=(n=e.classList,Array.from(n).filter(e=>"highlight"!==e&&"nolinks"!==e).map(e=>e.toLowerCase()));var n;let r;try{r=await async function(e,t){const n={action:"highlight",code:e,id:Dl(),languages:t},r=await Il;return r.postMessage(n),new Promise((e,t)=>{const o=setTimeout(()=>{t(new Error("Timed out waiting for highlight."))},4e3);r.addEventListener("message",(function t(s){const{data:{id:i,language:a,value:c}}=s;i===n.id&&(r.removeEventListener("message",t),clearTimeout(o),e({language:a,value:c}))}))})}(e.innerText,t)}catch(e){return void console.error(e)}const{language:o,value:s}=r;switch(e.localName){case"pre":e.classList.remove(o),e.innerHTML=`<code class="hljs${o?" "+o:""}">${s}</code>`,e.classList.length||e.removeAttribute("class");break;case"code":e.innerHTML=s,e.classList.add("hljs"),o&&e.classList.add(o)}e.setAttribute("aria-busy","false")}var Ol=Object.freeze({__proto__:null,name:"core/highlight",run:async function(e){if(e.noHighlightCSS)return;const t=[...document.querySelectorAll("\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n ")].filter(e=>"pre"!==e.localName||!e.querySelector("code"));if(!t.length)return;const n=t.filter(e=>e.textContent.trim()).map(Nl);document.head.appendChild(Ht`<style> + ${Al} + </style>`),await Promise.all(n)}});const jl=rn({en:{missing_test_suite_uri:"Found tests in your spec, but missing '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.",tests:"tests",test:"test"},ja:{missing_test_suite_uri:"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.",tests:"テスト",test:"テスト"},de:{missing_test_suite_uri:"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.",tests:"Tests",test:"Test"},zh:{missing_test_suite_uri:"本规范中包含测试,但在 ReSpec 配置中缺少 '[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。",tests:"测试",test:"测试"}}),zl="core/data-tests";function Wl(e){const t=[],[n]=new URL(e).pathname.split("/").reverse(),r=n.split(".");let[o]=r;if(r.find(e=>"https"===e)){const e=document.createElement("span");e.textContent="🔒",e.setAttribute("aria-label","requires a secure connection"),e.setAttribute("title","Test requires HTTPS"),o=o.replace(".https",""),t.push(e)}if(o.split(".").join("-").split("-").find(e=>"manual"===e)){const e=document.createElement("span");e.textContent="💪",e.setAttribute("aria-label","the test must be run manually"),e.setAttribute("title","Manual test"),o=o.replace("-manual",""),t.push(e)}return Ht` <li> <a href="${e}">${o}</a> ${t} </li> - `}function Wl(e,t){return e.map(e=>{try{return new URL(e,t).href}catch{Cn("Bad URI: "+e,jl)}}).filter(e=>e)}function Ml(e,t){const n=e.filter((e,t,n)=>n.indexOf(e)!==t);if(n.length){const e="Duplicate tests found",r='To fix, remove duplicates from "data-tests": '+n.map(e=>new URL(e).pathname).join(", ");Cn(e,jl,{hint:r,elements:[t]})}}function Ul(e){const t=[...new Set(e)];return Ht` + `}function Ml(e,t){return e.map(e=>{try{return new URL(e,t).href}catch{Cn("Bad URI: "+e,zl)}}).filter(e=>e)}function Ul(e,t){const n=e.filter((e,t,n)=>n.indexOf(e)!==t);if(n.length){const e="Duplicate tests found",r='To fix, remove duplicates from "data-tests": '+n.map(e=>new URL(e).pathname).join(", ");Cn(e,zl,{hint:r,elements:[t]})}}function Fl(e){const t=[...new Set(e)];return Ht` <details class="respec-tests-details removeOnSave"> <summary>tests: ${t.length}</summary> <ul> - ${t.map(zl)} + ${t.map(Wl)} </ul> </details> - `}var Fl=Object.freeze({__proto__:null,name:jl,run:function(e){const t=[...document.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);if(t.length)if(e.testSuiteURI)for(const n of t){const t=Wl(n.dataset.tests.split(/,/gm).map(e=>e.trim()),e.testSuiteURI);Ml(t,n);const r=Ul(t);n.append(r)}else _n(Ol.missing_test_suite_uri,jl)}});const ql="core/list-sorter";function Bl(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function Hl(e,t){return[...e.querySelectorAll(":scope > li")].sort(Bl(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function Gl(e,t){return[...e.querySelectorAll(":scope > dt")].sort(Bl(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:s}=t;for(;s&&s.nextSibling;){o.appendChild(s.cloneNode(!0));const{nodeType:e,nodeName:t}=s.nextSibling;if(e===n&&t===r)break;s=s.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var Vl=Object.freeze({__proto__:null,name:ql,sortListItems:Hl,sortDefinitionTerms:Gl,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=Gl(t,n);break;case"ol":case"ul":e=Hl(t,n);break;default:Cn(`ReSpec can't sort ${t.localName} elements.`,ql,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});var Zl=String.raw`var:hover{text-decoration:underline;cursor:pointer} + `}var ql=Object.freeze({__proto__:null,name:zl,run:function(e){const t=[...document.querySelectorAll("[data-tests]")].filter(e=>e.dataset.tests);if(t.length)if(e.testSuiteURI)for(const n of t){const t=Ml(n.dataset.tests.split(/,/gm).map(e=>e.trim()),e.testSuiteURI);Ul(t,n);const r=Fl(t);n.append(r)}else _n(jl.missing_test_suite_uri,zl)}});const Bl="core/list-sorter";function Hl(e){const t="ascending"===e?1:-1;return({textContent:e},{textContent:n})=>t*e.trim().localeCompare(n.trim())}function Gl(e,t){return[...e.querySelectorAll(":scope > li")].sort(Hl(t)).reduce((e,t)=>(e.appendChild(t),e),document.createDocumentFragment())}function Vl(e,t){return[...e.querySelectorAll(":scope > dt")].sort(Hl(t)).reduce((e,t)=>{const{nodeType:n,nodeName:r}=t,o=document.createDocumentFragment();let{nextSibling:s}=t;for(;s&&s.nextSibling;){o.appendChild(s.cloneNode(!0));const{nodeType:e,nodeName:t}=s.nextSibling;if(e===n&&t===r)break;s=s.nextSibling}return o.prepend(t.cloneNode(!0)),e.appendChild(o),e},document.createDocumentFragment())}var Zl=Object.freeze({__proto__:null,name:Bl,sortListItems:Gl,sortDefinitionTerms:Vl,run:function(){const e=document.querySelectorAll("[data-sort]");for(const t of e){let e;const n=t.dataset.sort||"ascending";switch(t.localName){case"dl":e=Vl(t,n);break;case"ol":case"ul":e=Gl(t,n);break;default:Cn(`ReSpec can't sort ${t.localName} elements.`,Bl,{elements:[t]})}if(e){const n=document.createRange();n.selectNodeContents(t),n.deleteContents(),t.appendChild(e)}}}});var Yl=String.raw`var:hover{text-decoration:underline;cursor:pointer} var.respec-hl{color:var(--color,#000);background-color:var(--bg-color);box-shadow:0 0 0 2px var(--bg-color)} var.respec-hl-c1{--bg-color:#f4d200} var.respec-hl-c2{--bg-color:#ff87a2} @@ -1018,7 +1018,7 @@ var.respec-hl-c6{--bg-color:#82ddff} var.respec-hl-c7{--bg-color:#ffbcf2} @media print{ var.respec-hl{background:0 0;color:#000;box-shadow:unset} -}`;function Yl(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=nn(e.textContent),n=e.closest("section"),r=Kl(e),o=[...n.querySelectorAll("var")].filter(e=>nn(e.textContent)===t&&e.closest("section")===n),s=o[0].classList.contains("respec-hl");if(Jl.set(r,s),s)return o.forEach(e=>Xl(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=Kl(t);n.forEach(t=>Xl(t,e)),[...Jl.keys()].forEach(e=>Jl.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const Jl=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function Kl(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===Jl.get("respec-hl-c1")?"respec-hl-c1":[...Jl.keys()].find(e=>Jl.get(e))||"respec-hl-c1"}function Xl(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var Ql=Object.freeze({__proto__:null,name:"core/highlight-vars",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=Zl,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",Yl)),Ln("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(Xl)})}});var eu=String.raw`dfn{cursor:pointer} +}`;function Jl(e){e.stopPropagation();const{target:t}=e,n=function(e){const t=nn(e.textContent),n=e.closest("section"),r=Xl(e),o=[...n.querySelectorAll("var")].filter(e=>nn(e.textContent)===t&&e.closest("section")===n),s=o[0].classList.contains("respec-hl");if(Kl.set(r,s),s)return o.forEach(e=>Ql(e,r)),[];o.forEach(e=>function(e,t){e.classList.add("respec-hl",t)}(e,r));return o}(t),r=()=>{const e=Xl(t);n.forEach(t=>Ql(t,e)),[...Kl.keys()].forEach(e=>Kl.set(e,!0))};n.length&&document.body.addEventListener("click",r,{once:!0})}const Kl=new Map([["respec-hl-c1",!0],["respec-hl-c2",!0],["respec-hl-c3",!0],["respec-hl-c4",!0],["respec-hl-c5",!0],["respec-hl-c6",!0],["respec-hl-c7",!0]]);function Xl(e){const{value:t}=e.classList,n=/respec-hl-\w+/,r=n.test(t)&&t.match(n);return r?r[0]:!0===Kl.get("respec-hl-c1")?"respec-hl-c1":[...Kl.keys()].find(e=>Kl.get(e))||"respec-hl-c1"}function Ql(e,t){e.classList.remove("respec-hl",t),e.classList.length||e.removeAttribute("class")}var eu=Object.freeze({__proto__:null,name:"core/highlight-vars",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=Yl,t.classList.add("removeOnSave"),document.head.appendChild(t),document.querySelectorAll("var").forEach(e=>e.addEventListener("click",Jl)),Ln("beforesave",e=>{e.querySelectorAll("var.respec-hl").forEach(Ql)})}});var tu=String.raw`dfn{cursor:pointer} .dfn-panel{position:absolute;z-index:35;min-width:300px;max-width:500px;padding:.5em .75em;margin-top:.6em;font:small Helvetica Neue,sans-serif,Droid Sans Fallback;background:#fff;color:#000;box-shadow:0 1em 3em -.4em rgba(0,0,0,.3),0 0 1px 1px rgba(0,0,0,.05);border-radius:2px} .dfn-panel:not(.docked)>.caret{position:absolute;top:-9px} .dfn-panel:not(.docked)>.caret::after,.dfn-panel:not(.docked)>.caret::before{content:"";position:absolute;border:10px solid transparent;border-top:0;border-bottom:10px solid #fff;top:0} @@ -1035,7 +1035,7 @@ var.respec-hl{background:0 0;color:#000;box-shadow:unset} .dfn-panel a[href]:hover{border-bottom-width:1px} .dfn-panel ul{padding:0} .dfn-panel li{margin-left:1em} -.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}`;function tu(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Ht` +.dfn-panel.docked{position:fixed;left:.5em;top:unset;bottom:2em;margin:0 auto;max-width:calc(100vw - .75em * 2 - .5em - .2em * 2);max-height:30vh;overflow:auto}`;function nu(e){const{id:t}=e,n=e.dataset.href||"#"+t,r=document.querySelectorAll(`a[href="${n}"]:not(.index-term)`),o="dfn-panel-for-"+e.id;return Ht` <aside class="dfn-panel" id="${o}" hidden> <span class="caret"></span> <div> @@ -1060,15 +1060,15 @@ var.respec-hl{background:0 0;color:#000;box-shadow:unset} ${[...n].map(o)} </ul>`}(t,r)} </aside> - `}var nu=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){document.head.insertBefore(Ht`<style> - ${eu} - </style>`,document.querySelector("link"));const e=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),t=document.createDocumentFragment();for(const n of e)t.append(tu(n));document.body.append(t);const n=document.createElement("script");n.id="respec-dfn-panel",n.textContent=await async function(){try{return(await Promise.resolve().then((function(){return Su}))).default}catch{return Al("./src/core/dfn-panel.runtime.js")}}(),document.body.append(n)}});var ru=String.raw`var{position:relative;cursor:pointer} + `}var ru=Object.freeze({__proto__:null,name:"core/dfn-panel",run:async function(){document.head.insertBefore(Ht`<style> + ${tu} + </style>`,document.querySelector("link"));const e=document.querySelectorAll("dfn[id], #index-defined-elsewhere .index-term"),t=document.createDocumentFragment();for(const n of e)t.append(nu(n));document.body.append(t);const n=document.createElement("script");n.id="respec-dfn-panel",n.textContent=await async function(){try{return(await Promise.resolve().then((function(){return _u}))).default}catch{return Ll("./src/core/dfn-panel.runtime.js")}}(),document.body.append(n)}});var ou=String.raw`var{position:relative;cursor:pointer} var[data-type]::after,var[data-type]::before{position:absolute;left:50%;top:-6px;opacity:0;transition:opacity .4s;pointer-events:none} var[data-type]::before{content:"";transform:translateX(-50%);border-width:4px 6px 0 6px;border-style:solid;border-color:transparent;border-top-color:#000} var[data-type]::after{content:attr(data-type);transform:translateX(-50%) translateY(-100%);background:#000;text-align:center;font-family:"Dank Mono","Fira Code",monospace;font-style:normal;padding:6px;border-radius:3px;color:#daca88;text-indent:0;font-weight:400} -var[data-type]:hover::after,var[data-type]:hover::before{opacity:1}`;var ou=Object.freeze({__proto__:null,name:"core/data-type",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=ru,document.head.appendChild(t);let n=null;const r=new Map,o=document.querySelectorAll("section var");for(const e of o){const t=e.closest("section");if(n!==t&&(n=t,r.clear()),e.dataset.type){r.set(e.textContent.trim(),e.dataset.type);continue}const o=r.get(e.textContent.trim());o&&(e.dataset.type=o)}}});var su=String.raw`.assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}`;var iu=Object.freeze({__proto__:null,name:"core/algorithms",run:function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=su,document.head.appendChild(e)}}});const au="core/anchor-expander";function cu(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void _n(`Found matching element "${t}", but it has no title or marker.`,au,{title:"Missing title.",elements:[n]})}const o=vn(r);n.append(...o.childNodes),n.classList.add("box-ref")}function lu(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void _n(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,au,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...vn(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const s=r.querySelector(".fig-title");!n.hasAttribute("title")&&s&&(n.title=nn(s.textContent))}function uu(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)du(r,n),pu(r,n);else{n.textContent=n.getAttribute("href");_n("Found matching section, but the section was lacking a heading element.",au,{title:`No matching id in document: "${t}".`,elements:[n]})}}function du(e,t){const n=e.querySelector(".self-link"),r=[...vn(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=hn(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function pu(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var fu=Object.freeze({__proto__:null,name:au,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":du(n,t);break;case"section":uu(n,e,t);break;case"figure":lu(n,e,t);break;case"aside":case"div":cu(n,e,t);break;default:t.textContent=t.getAttribute("href");_n("ReSpec doesn't support expanding this kind of reference.",au,{title:`Can't expand "#${e}".`,elements:[t]})}pu(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");_n(`Couldn't expand inline reference. The id "${e}" is not in the document.`,au,{title:`No matching id in document: ${e}.`,elements:[t]})}}}});const hu="rs-changelog",mu=class extends HTMLElement{constructor(){super(),this.props={from:this.getAttribute("from"),to:this.getAttribute("to")||"HEAD",filter:"function"==typeof window[this.getAttribute("filter")]?window[this.getAttribute("filter")]:()=>!0}}connectedCallback(){const{from:e,to:t,filter:n}=this.props;Ht.bind(this)` +var[data-type]:hover::after,var[data-type]:hover::before{opacity:1}`;var su=Object.freeze({__proto__:null,name:"core/data-type",run:function(e){if(!e.highlightVars)return;const t=document.createElement("style");t.textContent=ou,document.head.appendChild(t);let n=null;const r=new Map,o=document.querySelectorAll("section var");for(const e of o){const t=e.closest("section");if(n!==t&&(n=t,r.clear()),e.dataset.type){r.set(e.textContent.trim(),e.dataset.type);continue}const o=r.get(e.textContent.trim());o&&(e.dataset.type=o)}}});var iu=String.raw`.assert{background:#eee;border-left:.5em solid #aaa;padding:.3em}`;var au=Object.freeze({__proto__:null,name:"core/algorithms",run:function(){if(Array.from(document.querySelectorAll("ol.algorithm li")).filter(e=>e.textContent.trim().startsWith("Assert: ")).forEach(e=>e.classList.add("assert")),document.querySelector(".assert")){const e=document.createElement("style");e.textContent=iu,document.head.appendChild(e)}}});const cu="core/anchor-expander";function lu(e,t,n){const r=e.querySelector(".marker .self-link");if(!r){n.textContent=n.getAttribute("href");return void _n(`Found matching element "${t}", but it has no title or marker.`,cu,{title:"Missing title.",elements:[n]})}const o=vn(r);n.append(...o.childNodes),n.classList.add("box-ref")}function uu(e,t,n){const r=e.querySelector("figcaption");if(!r){n.textContent=n.getAttribute("href");return void _n(`Found matching figure "${t}", but figure is lacking a \`<figcaption>\`.`,cu,{title:"Missing figcaption in referenced figure.",elements:[n]})}const o=[...vn(r).childNodes].filter(e=>!e.classList||!e.classList.contains("fig-title"));o.pop(),n.append(...o),n.classList.add("fig-ref");const s=r.querySelector(".fig-title");!n.hasAttribute("title")&&s&&(n.title=nn(s.textContent))}function du(e,t,n){const r=e.querySelector("h6, h5, h4, h3, h2");if(r)pu(r,n),fu(r,n);else{n.textContent=n.getAttribute("href");_n("Found matching section, but the section was lacking a heading element.",cu,{title:`No matching id in document: "${t}".`,elements:[n]})}}function pu(e,t){const n=e.querySelector(".self-link"),r=[...vn(e).childNodes].filter(e=>!e.classList||!e.classList.contains("self-link"));t.append(...r),n&&t.prepend("§ "),t.classList.add("sec-ref"),t.lastChild.nodeType===Node.TEXT_NODE&&(t.lastChild.textContent=t.lastChild.textContent.trimEnd()),t.querySelectorAll("a").forEach(e=>{const t=hn(e,"span");for(const e of[...t.attributes])t.removeAttributeNode(e)})}function fu(e,t){for(const n of["dir","lang"]){if(t.hasAttribute(n))continue;const r=e.closest(`[${n}]`);if(!r)continue;const o=t.closest(`[${n}]`);o&&o.getAttribute(n)===r.getAttribute(n)||t.setAttribute(n,r.getAttribute(n))}}var hu=Object.freeze({__proto__:null,name:cu,run:function(){const e=[...document.querySelectorAll("a[href^='#']:not(.self-link):not([href$='the-empty-string'])")].filter(e=>""===e.textContent.trim());for(const t of e){const e=t.getAttribute("href").slice(1),n=document.getElementById(e);if(n){switch(n.localName){case"h6":case"h5":case"h4":case"h3":case"h2":pu(n,t);break;case"section":du(n,e,t);break;case"figure":uu(n,e,t);break;case"aside":case"div":lu(n,e,t);break;default:t.textContent=t.getAttribute("href");_n("ReSpec doesn't support expanding this kind of reference.",cu,{title:`Can't expand "#${e}".`,elements:[t]})}fu(n,t),t.normalize()}else{t.textContent=t.getAttribute("href");_n(`Couldn't expand inline reference. The id "${e}" is not in the document.`,cu,{title:`No matching id in document: ${e}.`,elements:[t]})}}}});const mu="rs-changelog",gu=class extends HTMLElement{constructor(){super(),this.props={from:this.getAttribute("from"),to:this.getAttribute("to")||"HEAD",filter:"function"==typeof window[this.getAttribute("filter")]?window[this.getAttribute("filter")]:()=>!0}}connectedCallback(){const{from:e,to:t,filter:n}=this.props;Ht.bind(this)` <ul> - ${{any:gu(e,t,n).then(e=>async function(e){const{repoURL:t}=await ws;return e.map(e=>{const[n,r=null]=e.message.split(/\(#(\d+)\)/,2),o=`${t}commit/${e.hash}`,s=r&&Ht` (<a href="${r?`${t}pull/${r}`:null}">#${r}</a>)`;return Ht`<li><a href="${o}">${n.trim()}</a>${s}</li>`})}(e)).catch(e=>_n(e.message,hu,{elements:[this]})).finally(()=>{this.dispatchEvent(new CustomEvent("done"))}),placeholder:"Loading list of commits..."}} + ${{any:bu(e,t,n).then(e=>async function(e){const{repoURL:t}=await ks;return e.map(e=>{const[n,r=null]=e.message.split(/\(#(\d+)\)/,2),o=`${t}commit/${e.hash}`,s=r&&Ht` (<a href="${r?`${t}pull/${r}`:null}">#${r}</a>)`;return Ht`<li><a href="${o}">${n.trim()}</a>${s}</li>`})}(e)).catch(e=>_n(e.message,mu,{elements:[this]})).finally(()=>{this.dispatchEvent(new CustomEvent("done"))}),placeholder:"Loading list of commits..."}} </ul> - `}};async function gu(e,t,n){let r;try{const o=await ws;if(!o)throw new Error("`respecConfig.github` is not set");const s=new URL("commits",`${o.apiBase}/${o.fullName}/`);s.searchParams.set("from",e),s.searchParams.set("to",t);const i=await fetch(s.href);if(!i.ok)throw new Error(`Request to ${s} failed with status code ${i.status}`);if(r=await i.json(),!r.length)throw new Error(`No commits between ${e}..${t}.`);r=r.filter(n)}catch(e){const t="Error loading commits from GitHub. "+e.message;throw console.error(e),new Error(t)}return r}const bu=[Object.freeze({__proto__:null,name:hu,element:mu})];var wu=Object.freeze({__proto__:null,name:"core/custom-elements/index",run:async function(){bu.forEach(e=>{customElements.define(e.name,e.element)});const e=bu.map(e=>e.name).join(", "),t=[...document.querySelectorAll(e)].map(e=>new Promise(t=>e.addEventListener("done",t,{once:!0})));await Promise.all(t)}});const yu="core/a11y",vu=["color-contrast","landmark-one-main","landmark-unique","region"];function ku(e){const t=[];for(const n of e.split("\n\n")){const[e,...r]=n.split(/^\s{2}/m),o=r.map(e=>"- "+e.trimEnd()).join("\n");t.push(`${e}${o}`)}return t.join("\n\n")}var xu=Object.freeze({__proto__:null,name:yu,run:async function(e){if(!e.a11y)return;const t=!0===e.a11y?{}:e.a11y,n=await async function(e){const{rules:t,...n}=e,r={rules:{...Object.fromEntries(vu.map(e=>[e,{enabled:!1}])),...t},...n,elementRef:!0,resultTypes:["violations"],reporter:"v1"};let o;try{o=await function(){const e=document.createElement("script");return e.classList.add("remove"),e.src="https://unpkg.com/axe-core@3/axe.min.js",document.head.appendChild(e),new Promise((t,n)=>{e.onload=()=>t(window.axe),e.onerror=n})}()}catch(e){return _n("Failed to load a11y linter.",yu),console.error(e),[]}try{return(await o.run(document,r)).violations}catch(e){return _n("Error while looking for a11y issues.",yu),console.error(e),[]}}(t);for(const e of n){const t=new Map;for(const n of e.nodes){const{failureSummary:e,element:r}=n;(t.get(e)||t.set(e,[]).get(e)).push(r)}const{id:n,help:r,description:o,helpUrl:s}=e,i=`a11y/${n}: ${r}`;for(const[e,n]of t){const t=ku(e);Cn(i,yu,{details:`\n\n${o}.\n\n${t}. ([Learn more](${s}))`,elements:n})}}}}),$u=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),Su=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'})}(); + `}};async function bu(e,t,n){let r;try{const o=await ks;if(!o)throw new Error("`respecConfig.github` is not set");const s=new URL("commits",`${o.apiBase}/${o.fullName}/`);s.searchParams.set("from",e),s.searchParams.set("to",t);const i=await fetch(s.href);if(!i.ok)throw new Error(`Request to ${s} failed with status code ${i.status}`);if(r=await i.json(),!r.length)throw new Error(`No commits between ${e}..${t}.`);r=r.filter(n)}catch(e){const t="Error loading commits from GitHub. "+e.message;throw console.error(e),new Error(t)}return r}const wu=[Object.freeze({__proto__:null,name:mu,element:gu})];var yu=Object.freeze({__proto__:null,name:"core/custom-elements/index",run:async function(){wu.forEach(e=>{customElements.define(e.name,e.element)});const e=wu.map(e=>e.name).join(", "),t=[...document.querySelectorAll(e)].map(e=>new Promise(t=>e.addEventListener("done",t,{once:!0})));await Promise.all(t)}});const vu="core/a11y",ku=["color-contrast","landmark-one-main","landmark-unique","region"];function xu(e){const t=[];for(const n of e.split("\n\n")){const[e,...r]=n.split(/^\s{2}/m),o=r.map(e=>"- "+e.trimEnd()).join("\n");t.push(`${e}${o}`)}return t.join("\n\n")}var $u=Object.freeze({__proto__:null,name:vu,run:async function(e){if(!e.a11y)return;const t=!0===e.a11y?{}:e.a11y,n=await async function(e){const{rules:t,...n}=e,r={rules:{...Object.fromEntries(ku.map(e=>[e,{enabled:!1}])),...t},...n,elementRef:!0,resultTypes:["violations"],reporter:"v1"};let o;try{o=await function(){const e=document.createElement("script");return e.classList.add("remove"),e.src="https://unpkg.com/axe-core@3/axe.min.js",document.head.appendChild(e),new Promise((t,n)=>{e.onload=()=>t(window.axe),e.onerror=n})}()}catch(e){return _n("Failed to load a11y linter.",vu),console.error(e),[]}try{return(await o.run(document,r)).violations}catch(e){return _n("Error while looking for a11y issues.",vu),console.error(e),[]}}(t);for(const e of n){const t=new Map;for(const n of e.nodes){const{failureSummary:e,element:r}=n;(t.get(e)||t.set(e,[]).get(e)).push(r)}const{id:n,help:r,description:o,helpUrl:s}=e,i=`a11y/${n}: ${r}`;for(const[e,n]of t){const t=xu(e);Cn(i,vu,{details:`\n\n${o}.\n\n${t}. ([Learn more](${s}))`,elements:n})}}}}),Su=Object.freeze({__proto__:null,default:'// ReSpec Worker v1.0.0\n"use strict";\ntry {\n importScripts("https://www.w3.org/Tools/respec/respec-highlight");\n} catch (err) {\n console.error("Network error loading highlighter", err);\n}\n\nself.addEventListener("message", ({ data: originalData }) => {\n const data = Object.assign({}, originalData);\n switch (data.action) {\n case "highlight-load-lang": {\n const { langURL, propName, lang } = data;\n importScripts(langURL);\n self.hljs.registerLanguage(lang, self[propName]);\n break;\n }\n case "highlight": {\n const { code } = data;\n const langs = data.languages.length ? data.languages : undefined;\n try {\n const { value, language } = self.hljs.highlightAuto(code, langs);\n Object.assign(data, { value, language });\n } catch (err) {\n console.error("Could not transform some code?", err);\n // Post back the original code\n Object.assign(data, { value: code, language: "" });\n }\n break;\n }\n }\n self.postMessage(data);\n});\n'}),_u=Object.freeze({__proto__:null,default:'(() => {\n// @ts-check\nif (document.respec) {\n document.respec.ready.then(dfnPanel);\n} else {\n dfnPanel();\n}\n\nfunction dfnPanel() {\n /** @type {HTMLElement} */\n let panel;\n document.body.addEventListener("click", event => {\n if (!(event.target instanceof HTMLElement)) return;\n\n /** @type {HTMLElement} */\n const el = event.target;\n\n const action = deriveAction(el);\n switch (action) {\n case "show": {\n if (panel) hidePanel(panel);\n /** @type {HTMLElement} */\n const dfn = el.closest("dfn, .index-term");\n panel = document.getElementById(`dfn-panel-for-${dfn.id}`);\n displayPanel(dfn, panel, { x: event.clientX, y: event.clientY });\n break;\n }\n case "dock": {\n panel.style.left = null;\n panel.style.top = null;\n panel.classList.add("docked");\n break;\n }\n case "hide": {\n hidePanel(panel);\n break;\n }\n }\n });\n}\n\n/** @param {HTMLElement} clickTarget */\nfunction deriveAction(clickTarget) {\n const hitALink = !!clickTarget.closest("a");\n if (clickTarget.closest("dfn, .index-term")) {\n return hitALink ? null : "show";\n }\n if (clickTarget.closest(".dfn-panel")) {\n if (hitALink) {\n const clickedSelfLink = clickTarget.classList.contains("self-link");\n return clickedSelfLink ? "hide" : "dock";\n }\n const panel = clickTarget.closest(".dfn-panel");\n return panel.classList.contains("docked") ? "hide" : null;\n }\n if (document.querySelector(".dfn-panel:not([hidden])")) {\n return "hide";\n }\n return null;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {HTMLElement} panel\n * @param {{ x: number, y: number }} clickPosition\n */\nfunction displayPanel(dfn, panel, { x, y }) {\n panel.hidden = false;\n // distance (px) between edge of panel and the pointing triangle (caret)\n const MARGIN = 20;\n\n const dfnRects = dfn.getClientRects();\n // Find the `top` offset when the `dfn` can be spread across multiple lines\n let closestTop = 0;\n let minDiff = Infinity;\n for (const rect of dfnRects) {\n const { top, bottom } = rect;\n const diffFromClickY = Math.abs((top + bottom) / 2 - y);\n if (diffFromClickY < minDiff) {\n minDiff = diffFromClickY;\n closestTop = top;\n }\n }\n\n const top = window.scrollY + closestTop + dfnRects[0].height;\n const left = x - MARGIN;\n panel.style.left = `${left}px`;\n panel.style.top = `${top}px`;\n\n // Find if the panel is flowing out of the window\n const panelRect = panel.getBoundingClientRect();\n const SCREEN_WIDTH = Math.min(window.innerWidth, window.screen.width);\n if (panelRect.right > SCREEN_WIDTH) {\n const newLeft = Math.max(MARGIN, x + MARGIN - panelRect.width);\n const newCaretOffset = left - newLeft;\n panel.style.left = `${newLeft}px`;\n /** @type {HTMLElement} */\n const caret = panel.querySelector(".caret");\n caret.style.left = `${newCaretOffset}px`;\n }\n}\n\n/** @param {HTMLElement} panel */\nfunction hidePanel(panel) {\n panel.hidden = true;\n panel.classList.remove("docked");\n}\n})()'})}(); //# sourceMappingURL=respec-w3c.js.map diff --git a/builds/respec-w3c.js.map b/builds/respec-w3c.js.map index bfa1b334a4..1a8971cc07 100644 --- a/builds/respec-w3c.js.map +++ b/builds/respec-w3c.js.map @@ -1 +1 @@ -{"version":3,"file":"respec-w3c.js","sources":["../profiles/w3c.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/webidl2/lib/error.js","../node_modules/webidl2/lib/productions/base.js","../node_modules/webidl2/lib/validators/helpers.js","../node_modules/webidl2/lib/productions/array-base.js","../node_modules/webidl2/lib/productions/token.js","../node_modules/webidl2/lib/productions/extended-attributes.js","../node_modules/webidl2/lib/productions/type.js","../node_modules/webidl2/lib/productions/default.js","../node_modules/webidl2/lib/productions/argument.js","../node_modules/webidl2/lib/productions/operation.js","../node_modules/webidl2/lib/productions/attribute.js","../node_modules/webidl2/lib/productions/helpers.js","../node_modules/webidl2/lib/tokeniser.js","../node_modules/webidl2/lib/productions/enum.js","../node_modules/webidl2/lib/productions/includes.js","../node_modules/webidl2/lib/productions/typedef.js","../node_modules/webidl2/lib/productions/callback.js","../node_modules/webidl2/lib/productions/container.js","../node_modules/webidl2/lib/productions/constant.js","../node_modules/webidl2/lib/productions/iterable.js","../node_modules/webidl2/lib/productions/constructor.js","../node_modules/webidl2/lib/productions/interface.js","../node_modules/webidl2/lib/validators/interface.js","../node_modules/webidl2/lib/productions/mixin.js","../node_modules/webidl2/lib/productions/field.js","../node_modules/webidl2/lib/productions/dictionary.js","../node_modules/webidl2/lib/productions/namespace.js","../node_modules/webidl2/lib/productions/callback-interface.js","../node_modules/webidl2/lib/webidl2.js","../node_modules/webidl2/lib/writer.js","../node_modules/webidl2/lib/validator.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/styles/ui.css.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/w3c/group.js","../src/core/templates/show-link.js","../src/core/templates/show-logo.js","../src/core/templates/show-people.js","../src/w3c/templates/headers.js","../src/w3c/templates/cgbg-headers.js","../src/w3c/templates/sotd.js","../src/w3c/templates/cgbg-sotd.js","../src/w3c/headers.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/core/linter-rules/wpt-tests-exist.js","../src/w3c/defaults.js","../src/styles/respec.css.js","../src/core/style.js","../src/w3c/style.js","../src/w3c/l10n.js","../src/core/github.js","../src/core/data-include.js","../src/core/title.js","../src/w3c/level.js","../src/w3c/abstract.js","../src/core/data-transform.js","../src/core/data-abbr.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/w3c/conformance.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/styles/examples.css.js","../src/core/examples.js","../src/styles/issues-notes.css.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/dfn-finder.js","../src/core/webidl-clipboard.js","../src/styles/webidl.css.js","../src/core/webidl.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/xref-db.js","../src/core/xref.js","../src/core/webidl-index.js","../src/styles/dfn-index.css.js","../src/core/dfn-index.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/styles/caniuse.css.js","../src/core/caniuse.js","../src/styles/mdn-annotation.css.js","../src/core/mdn-annotation.js","../src/core/exporter.js","../src/ui/save-html.js","../src/ui/search-specref.js","../src/ui/search-xref.js","../src/ui/about-respec.js","../src/core/seo.js","../src/w3c/seo.js","../src/styles/highlight.css.js","../src/core/text-loader.js","../src/core/worker.js","../src/core/highlight.js","../src/core/data-tests.js","../src/core/list-sorter.js","../src/styles/var.css.js","../src/core/highlight-vars.js","../src/styles/dfn-panel.css.js","../src/core/dfn-panel.js","../src/styles/datatype.css.js","../src/core/data-type.js","../src/styles/algorithms.css.js","../src/core/algorithms.js","../src/core/anchor-expander.js","../src/core/custom-elements/rs-changelog.js","../src/core/custom-elements/index.js","../src/core/a11y.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/w3c/group.js\"),\n import(\"../src/w3c/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/w3c/style.js\"),\n import(\"../src/w3c/l10n.js\"),\n import(\"../src/core/github.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/title.js\"),\n import(\"../src/w3c/level.js\"),\n import(\"../src/w3c/headers.js\"),\n import(\"../src/w3c/abstract.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/data-abbr.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/w3c/conformance.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/webidl.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/xref.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/webidl-index.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/dfn-index.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/core/caniuse.js\"),\n import(\"../src/core/mdn-annotation.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/search-specref.js\"),\n import(\"../src/ui/search-xref.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/w3c/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/webidl-clipboard.js\"),\n import(\"../src/core/data-tests.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/data-type.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n import(\"../src/core/custom-elements/index.js\"),\n /* Linters must be the last thing to run */\n import(\"../src/core/linter.js\"),\n import(\"../src/core/a11y.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * @param {string} text\n */\nfunction lastLine(text) {\n const splitted = text.split(\"\\n\");\n return splitted[splitted.length - 1];\n}\n\nfunction appendIfExist(base, target) {\n let result = base;\n if (target) {\n result += ` ${target}`;\n }\n return result;\n}\n\nfunction contextAsText(node) {\n const hierarchy = [node];\n while (node && node.parent) {\n const { parent } = node;\n hierarchy.unshift(parent);\n node = parent;\n }\n return hierarchy.map(n => appendIfExist(n.type, n.name)).join(\" -> \");\n}\n\n/**\n * @typedef {object} WebIDL2ErrorOptions\n * @property {\"error\" | \"warning\"} [level]\n * @property {Function} [autofix]\n *\n * @param {string} message error message\n * @param {\"Syntax\" | \"Validation\"} kind error type\n * @param {WebIDL2ErrorOptions} [options]\n */\nfunction error(source, position, current, message, kind, { level = \"error\", autofix, ruleName } = {}) {\n /**\n * @param {number} count\n */\n function sliceTokens(count) {\n return count > 0 ?\n source.slice(position, position + count) :\n source.slice(Math.max(position + count, 0), position);\n }\n\n function tokensToText(inputs, { precedes } = {}) {\n const text = inputs.map(t => t.trivia + t.value).join(\"\");\n const nextToken = source[position];\n if (nextToken.type === \"eof\") {\n return text;\n }\n if (precedes) {\n return text + nextToken.trivia;\n }\n return text.slice(nextToken.trivia.length);\n }\n\n const maxTokens = 5; // arbitrary but works well enough\n const line =\n source[position].type !== \"eof\" ? source[position].line :\n source.length > 1 ? source[position - 1].line :\n 1;\n\n const precedingLastLine = lastLine(\n tokensToText(sliceTokens(-maxTokens), { precedes: true })\n );\n\n const subsequentTokens = sliceTokens(maxTokens);\n const subsequentText = tokensToText(subsequentTokens);\n const subsequentFirstLine = subsequentText.split(\"\\n\")[0];\n\n const spaced = \" \".repeat(precedingLastLine.length) + \"^\";\n const sourceContext = precedingLastLine + subsequentFirstLine + \"\\n\" + spaced;\n\n const contextType = kind === \"Syntax\" ? \"since\" : \"inside\";\n const inSourceName = source.name ? ` in ${source.name}` : \"\";\n const grammaticalContext = (current && current.name) ? `, ${contextType} \\`${current.partial ? \"partial \" : \"\"}${contextAsText(current)}\\`` : \"\";\n const context = `${kind} error at line ${line}${inSourceName}${grammaticalContext}:\\n${sourceContext}`;\n return {\n message: `${context} ${message}`,\n bareMessage: message,\n context,\n line,\n sourceName: source.name,\n level,\n ruleName,\n autofix,\n input: subsequentText,\n tokens: subsequentTokens\n };\n}\n\n/**\n * @param {string} message error message\n */\nexport function syntaxError(source, position, current, message) {\n return error(source, position, current, message, \"Syntax\");\n}\n\n/**\n * @param {string} message error message\n * @param {WebIDL2ErrorOptions} [options]\n */\nexport function validationError(token, current, ruleName, message, options = {}) {\n options.ruleName = ruleName;\n return error(current.source, token.index, current, message, \"Validation\", options);\n}\n","// @ts-check\n\nexport class Base {\n /**\n * @param {object} initializer\n * @param {Base[\"source\"]} initializer.source\n * @param {Base[\"tokens\"]} initializer.tokens\n */\n constructor({ source, tokens }) {\n Object.defineProperties(this, {\n source: { value: source },\n tokens: { value: tokens, writable: true },\n parent: { value: null, writable: true },\n this: { value: this } // useful when escaping from proxy\n });\n }\n\n toJSON() {\n const json = { type: undefined, name: undefined, inheritance: undefined };\n let proto = this;\n while (proto !== Object.prototype) {\n const descMap = Object.getOwnPropertyDescriptors(proto);\n for (const [key, value] of Object.entries(descMap)) {\n if (value.enumerable || value.get) {\n // @ts-ignore - allow indexing here\n json[key] = this[key];\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n return json;\n }\n}\n","// @ts-check\n\n/**\n * @typedef {import(\"../productions/dictionary.js\").Dictionary} Dictionary\n *\n * @param {*} idlType\n * @param {import(\"../validator.js\").Definitions} defs\n * @param {object} [options]\n * @param {boolean} [options.useNullableInner] use when the input idlType is nullable and you want to use its inner type\n * @return {{ reference: *, dictionary: Dictionary }} the type reference that ultimately includes dictionary.\n */\nexport function idlTypeIncludesDictionary(idlType, defs, { useNullableInner } = {}) {\n if (!idlType.union) {\n const def = defs.unique.get(idlType.idlType);\n if (!def) {\n return;\n }\n if (def.type === \"typedef\") {\n const { typedefIncludesDictionary } = defs.cache;\n if (typedefIncludesDictionary.has(def)) {\n // Note that this also halts when it met indeterminate state\n // to prevent infinite recursion\n return typedefIncludesDictionary.get(def);\n }\n defs.cache.typedefIncludesDictionary.set(def, undefined); // indeterminate state\n const result = idlTypeIncludesDictionary(def.idlType, defs);\n defs.cache.typedefIncludesDictionary.set(def, result);\n if (result) {\n return {\n reference: idlType,\n dictionary: result.dictionary\n };\n }\n }\n if (def.type === \"dictionary\" && (useNullableInner || !idlType.nullable)) {\n return {\n reference: idlType,\n dictionary: def\n };\n }\n }\n for (const subtype of idlType.subtype) {\n const result = idlTypeIncludesDictionary(subtype, defs);\n if (result) {\n if (subtype.union) {\n return result;\n }\n return {\n reference: subtype,\n dictionary: result.dictionary\n };\n }\n }\n}\n\n/**\n * @param {*} dict dictionary type\n * @param {import(\"../validator.js\").Definitions} defs\n * @return {boolean}\n */\nexport function dictionaryIncludesRequiredField(dict, defs) {\n if (defs.cache.dictionaryIncludesRequiredField.has(dict)) {\n return defs.cache.dictionaryIncludesRequiredField.get(dict);\n }\n // Set cached result to indeterminate to short-circuit circular definitions.\n // The final result will be updated to true or false.\n defs.cache.dictionaryIncludesRequiredField.set(dict, undefined);\n let result = dict.members.some(field => field.required);\n if (!result && dict.inheritance) {\n const superdict = defs.unique.get(dict.inheritance);\n if (!superdict) {\n // Assume required members in the supertype if it is unknown.\n result = true;\n } else if (dictionaryIncludesRequiredField(superdict, defs)) {\n result = true;\n }\n }\n defs.cache.dictionaryIncludesRequiredField.set(dict, result);\n return result;\n}\n","// @ts-check\n\nexport class ArrayBase extends Array {\n constructor({ source, tokens }) {\n super();\n Object.defineProperties(this, {\n source: { value: source },\n tokens: { value: tokens },\n parent: { value: null, writable: true }\n });\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { unescape } from \"./helpers.js\";\n\nexport class Token extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} type\n */\n static parser(tokeniser, type) {\n return () => {\n const value = tokeniser.consume(type);\n if (value) {\n return new Token({ source: tokeniser.source, tokens: { value } });\n }\n };\n }\n\n get value() {\n return unescape(this.tokens.value.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { ArrayBase } from \"./array-base.js\";\nimport { Token } from \"./token.js\";\nimport { list, argument_list, autoParenter, unescape } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} tokenName\n */\nfunction tokens(tokeniser, tokenName) {\n return list(tokeniser, {\n parser: Token.parser(tokeniser, tokenName),\n listName: tokenName + \" list\"\n });\n}\n\nconst extAttrValueSyntax = [\"identifier\", \"decimal\", \"integer\", \"string\"];\n\nconst shouldBeLegacyPrefixed = [\n \"NoInterfaceObject\",\n \"LenientSetter\",\n \"LenientThis\",\n \"TreatNonObjectAsNull\",\n \"Unforgeable\",\n];\n\nconst renamedLegacies = new Map([\n ...shouldBeLegacyPrefixed.map(name => [name, `Legacy${name}`]),\n [\"NamedConstructor\", \"LegacyFactoryFunction\"],\n [\"OverrideBuiltins\", \"LegacyOverrideBuiltIns\"],\n [\"TreatNullAs\", \"LegacyNullToEmptyString\"],\n]);\n\n/**\n * This will allow a set of extended attribute values to be parsed.\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction extAttrListItems(tokeniser) {\n for (const syntax of extAttrValueSyntax) {\n const toks = tokens(tokeniser, syntax);\n if (toks.length) {\n return toks;\n }\n }\n tokeniser.error(`Expected identifiers, strings, decimals, or integers but none found`);\n}\n\n\nclass ExtendedAttributeParameters extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const tokens = { assign: tokeniser.consume(\"=\") };\n const ret = autoParenter(new ExtendedAttributeParameters({ source: tokeniser.source, tokens }));\n if (tokens.assign) {\n tokens.secondaryName = tokeniser.consume(...extAttrValueSyntax);\n }\n tokens.open = tokeniser.consume(\"(\");\n if (tokens.open) {\n ret.list = ret.rhsIsList ?\n // [Exposed=(Window,Worker)]\n extAttrListItems(tokeniser) :\n // [LegacyFactoryFunction=Audio(DOMString src)] or [Constructor(DOMString str)]\n argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unexpected token in extended attribute argument list\");\n } else if (ret.hasRhs && !tokens.secondaryName) {\n tokeniser.error(\"No right hand side to extended attribute assignment\");\n }\n return ret.this;\n }\n\n get rhsIsList() {\n return this.tokens.assign && !this.tokens.secondaryName;\n }\n\n get rhsType() {\n if (this.rhsIsList) {\n return this.list[0].tokens.value.type + \"-list\";\n }\n if (this.tokens.secondaryName) {\n return this.tokens.secondaryName.type;\n }\n return null;\n }\n}\n\nexport class SimpleExtendedAttribute extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const name = tokeniser.consume(\"identifier\");\n if (name) {\n return new SimpleExtendedAttribute({\n source: tokeniser.source,\n tokens: { name },\n params: ExtendedAttributeParameters.parse(tokeniser)\n });\n }\n }\n\n constructor({ source, tokens, params }) {\n super({ source, tokens });\n params.parent = this;\n Object.defineProperty(this, \"params\", { value: params });\n }\n\n get type() {\n return \"extended-attribute\";\n }\n get name() {\n return this.tokens.name.value;\n }\n get rhs() {\n const { rhsType: type, tokens, list } = this.params;\n if (!type) {\n return null;\n }\n const value = this.params.rhsIsList ? list : unescape(tokens.secondaryName.value);\n return { type, value };\n }\n get arguments() {\n const { rhsIsList, list } = this.params;\n if (!list || rhsIsList) {\n return [];\n }\n return list;\n }\n\n *validate(defs) {\n const { name } = this;\n if (name === \"LegacyNoInterfaceObject\") {\n const message = `\\`[LegacyNoInterfaceObject]\\` extended attribute is an \\\nundesirable feature that may be removed from Web IDL in the future. Refer to the \\\n[relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more \\\ninformation.`;\n yield validationError(this.tokens.name, this, \"no-nointerfaceobject\", message, { level: \"warning\" });\n } else if (renamedLegacies.has(name)) {\n const message = `\\`[${name}]\\` extended attribute is a legacy feature \\\nthat is now renamed to \\`[${renamedLegacies.get(name)}]\\`. Refer to the \\\n[relevant upstream PR](https://github.com/heycam/webidl/pull/870) for more \\\ninformation.`;\n yield validationError(this.tokens.name, this, \"renamed-legacy\", message, {\n level: \"warning\",\n autofix: renameLegacyExtendedAttribute(this)\n });\n }\n for (const arg of this.arguments) {\n yield* arg.validate(defs);\n }\n }\n}\n\n/**\n * @param {SimpleExtendedAttribute} extAttr\n */\nfunction renameLegacyExtendedAttribute(extAttr) {\n return () => {\n const { name } = extAttr;\n extAttr.tokens.name.value = renamedLegacies.get(name);\n if (name === \"TreatNullAs\") {\n extAttr.params.tokens = {};\n }\n };\n}\n\n// Note: we parse something simpler than the official syntax. It's all that ever\n// seems to be used\nexport class ExtendedAttributes extends ArrayBase {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const tokens = {};\n tokens.open = tokeniser.consume(\"[\");\n if (!tokens.open) return new ExtendedAttributes({});\n const ret = new ExtendedAttributes({ source: tokeniser.source, tokens });\n ret.push(...list(tokeniser, {\n parser: SimpleExtendedAttribute.parse,\n listName: \"extended attribute\"\n }));\n tokens.close = tokeniser.consume(\"]\") || tokeniser.error(\"Unexpected closing token of extended attribute\");\n if (!ret.length) {\n tokeniser.error(\"Found an empty extended attribute\");\n }\n if (tokeniser.probe(\"[\")) {\n tokeniser.error(\"Illegal double extended attribute lists, consider merging them\");\n }\n return ret;\n }\n\n *validate(defs) {\n for (const extAttr of this) {\n yield* extAttr.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { unescape, type_with_extended_attributes, return_type, primitive_type, autoParenter } from \"./helpers.js\";\nimport { stringTypes, typeNameKeywords } from \"../tokeniser.js\";\nimport { validationError } from \"../error.js\";\nimport { idlTypeIncludesDictionary } from \"../validators/helpers.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nfunction generic_type(tokeniser, typeName) {\n const base = tokeniser.consume(\"FrozenArray\", \"ObservableArray\", \"Promise\", \"sequence\", \"record\");\n if (!base) {\n return;\n }\n const ret = autoParenter(new Type({ source: tokeniser.source, tokens: { base } }));\n ret.tokens.open = tokeniser.consume(\"<\") || tokeniser.error(`No opening bracket after ${base.type}`);\n switch (base.type) {\n case \"Promise\": {\n if (tokeniser.probe(\"[\")) tokeniser.error(\"Promise type cannot have extended attribute\");\n const subtype = return_type(tokeniser, typeName) || tokeniser.error(\"Missing Promise subtype\");\n ret.subtype.push(subtype);\n break;\n }\n case \"sequence\":\n case \"FrozenArray\":\n case \"ObservableArray\": {\n const subtype = type_with_extended_attributes(tokeniser, typeName) || tokeniser.error(`Missing ${base.type} subtype`);\n ret.subtype.push(subtype);\n break;\n }\n case \"record\": {\n if (tokeniser.probe(\"[\")) tokeniser.error(\"Record key cannot have extended attribute\");\n const keyType = tokeniser.consume(...stringTypes) || tokeniser.error(`Record key must be one of: ${stringTypes.join(\", \")}`);\n const keyIdlType = new Type({ source: tokeniser.source, tokens: { base: keyType }});\n keyIdlType.tokens.separator = tokeniser.consume(\",\") || tokeniser.error(\"Missing comma after record key type\");\n keyIdlType.type = typeName;\n const valueType = type_with_extended_attributes(tokeniser, typeName) || tokeniser.error(\"Error parsing generic type record\");\n ret.subtype.push(keyIdlType, valueType);\n break;\n }\n }\n if (!ret.idlType) tokeniser.error(`Error parsing generic type ${base.type}`);\n ret.tokens.close = tokeniser.consume(\">\") || tokeniser.error(`Missing closing bracket after ${base.type}`);\n return ret.this;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction type_suffix(tokeniser, obj) {\n const nullable = tokeniser.consume(\"?\");\n if (nullable) {\n obj.tokens.nullable = nullable;\n }\n if (tokeniser.probe(\"?\")) tokeniser.error(\"Can't nullable more than once\");\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nfunction single_type(tokeniser, typeName) {\n let ret = generic_type(tokeniser, typeName) || primitive_type(tokeniser);\n if (!ret) {\n const base = tokeniser.consume(\"identifier\", ...stringTypes, ...typeNameKeywords);\n if (!base) {\n return;\n }\n ret = new Type({ source: tokeniser.source, tokens: { base } });\n if (tokeniser.probe(\"<\")) tokeniser.error(`Unsupported generic type ${base.value}`);\n }\n if (ret.generic === \"Promise\" && tokeniser.probe(\"?\")) {\n tokeniser.error(\"Promise type cannot be nullable\");\n }\n ret.type = typeName || null;\n type_suffix(tokeniser, ret);\n if (ret.nullable && ret.idlType === \"any\") tokeniser.error(\"Type `any` cannot be made nullable\");\n return ret;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} type\n */\nfunction union_type(tokeniser, type) {\n const tokens = {};\n tokens.open = tokeniser.consume(\"(\");\n if (!tokens.open) return;\n const ret = autoParenter(new Type({ source: tokeniser.source, tokens }));\n ret.type = type || null;\n while (true) {\n const typ = type_with_extended_attributes(tokeniser) || tokeniser.error(\"No type after open parenthesis or 'or' in union type\");\n if (typ.idlType === \"any\") tokeniser.error(\"Type `any` cannot be included in a union type\");\n if (typ.generic === \"Promise\") tokeniser.error(\"Type `Promise` cannot be included in a union type\");\n ret.subtype.push(typ);\n const or = tokeniser.consume(\"or\");\n if (or) {\n typ.tokens.separator = or;\n }\n else break;\n }\n if (ret.idlType.length < 2) {\n tokeniser.error(\"At least two types are expected in a union type but found less\");\n }\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated union type\");\n type_suffix(tokeniser, ret);\n return ret.this;\n}\n\nexport class Type extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\n static parse(tokeniser, typeName) {\n return single_type(tokeniser, typeName) || union_type(tokeniser, typeName);\n }\n\n constructor({ source, tokens }) {\n super({ source, tokens });\n Object.defineProperty(this, \"subtype\", { value: [], writable: true });\n this.extAttrs = new ExtendedAttributes({});\n }\n\n get generic() {\n if (this.subtype.length && this.tokens.base) {\n return this.tokens.base.value;\n }\n return \"\";\n }\n get nullable() {\n return Boolean(this.tokens.nullable);\n }\n get union() {\n return Boolean(this.subtype.length) && !this.tokens.base;\n }\n get idlType() {\n if (this.subtype.length) {\n return this.subtype;\n }\n // Adding prefixes/postfixes for \"unrestricted float\", etc.\n const name = [\n this.tokens.prefix,\n this.tokens.base,\n this.tokens.postfix\n ].filter(t => t).map(t => t.value).join(\" \");\n return unescape(name);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n\n if (this.idlType === \"void\") {\n const message = `\\`void\\` is now replaced by \\`undefined\\`. Refer to the \\\n[relevant GitHub issue](https://github.com/heycam/webidl/issues/60) \\\nfor more information.`;\n yield validationError(this.tokens.base, this, \"replace-void\", message, {\n autofix: replaceVoid(this)\n });\n }\n\n /*\n * If a union is nullable, its subunions cannot include a dictionary\n * If not, subunions may include dictionaries if each union is not nullable\n */\n const typedef = !this.union && defs.unique.get(this.idlType);\n const target =\n this.union ? this :\n (typedef && typedef.type === \"typedef\") ? typedef.idlType :\n undefined;\n if (target && this.nullable) {\n // do not allow any dictionary\n const { reference } = idlTypeIncludesDictionary(target, defs) || {};\n if (reference) {\n const targetToken = (this.union ? reference : this).tokens.base;\n const message = \"Nullable union cannot include a dictionary type.\";\n yield validationError(targetToken, this, \"no-nullable-union-dict\", message);\n }\n } else {\n // allow some dictionary\n for (const subtype of this.subtype) {\n yield* subtype.validate(defs);\n }\n }\n }\n}\n\n/**\n * @param {Type} type\n */\nfunction replaceVoid(type) {\n return () => {\n type.tokens.base.value = \"undefined\";\n };\n}\n","import { Base } from \"./base.js\";\nimport { const_data, const_value } from \"./helpers.js\";\n\nexport class Default extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const assign = tokeniser.consume(\"=\");\n if (!assign) {\n return null;\n }\n const def = const_value(tokeniser) || tokeniser.consume(\"string\", \"null\", \"[\", \"{\") || tokeniser.error(\"No value for default\");\n const expression = [def];\n if (def.type === \"[\") {\n const close = tokeniser.consume(\"]\") || tokeniser.error(\"Default sequence value must be empty\");\n expression.push(close);\n } else if (def.type === \"{\") {\n const close = tokeniser.consume(\"}\") || tokeniser.error(\"Default dictionary value must be empty\");\n expression.push(close);\n }\n return new Default({ source: tokeniser.source, tokens: { assign }, expression });\n }\n\n constructor({ source, tokens, expression }) {\n super({ source, tokens });\n expression.parent = this;\n Object.defineProperty(this, \"expression\", { value: expression });\n }\n\n get type() {\n return const_data(this.expression[0]).type;\n }\n get value() {\n return const_data(this.expression[0]).value;\n }\n get negative() {\n return const_data(this.expression[0]).negative;\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { Default } from \"./default.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { unescape, type_with_extended_attributes, autoParenter, getFirstToken } from \"./helpers.js\";\nimport { argumentNameKeywords, Tokeniser } from \"../tokeniser.js\";\nimport { validationError } from \"../error.js\";\nimport { idlTypeIncludesDictionary, dictionaryIncludesRequiredField } from \"../validators/helpers.js\";\n\nexport class Argument extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const start_position = tokeniser.position;\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Argument({ source: tokeniser.source, tokens }));\n ret.extAttrs = ExtendedAttributes.parse(tokeniser);\n tokens.optional = tokeniser.consume(\"optional\");\n ret.idlType = type_with_extended_attributes(tokeniser, \"argument-type\");\n if (!ret.idlType) {\n return tokeniser.unconsume(start_position);\n }\n if (!tokens.optional) {\n tokens.variadic = tokeniser.consume(\"...\");\n }\n tokens.name = tokeniser.consume(\"identifier\", ...argumentNameKeywords);\n if (!tokens.name) {\n return tokeniser.unconsume(start_position);\n }\n ret.default = tokens.optional ? Default.parse(tokeniser) : null;\n return ret.this;\n }\n\n get type() {\n return \"argument\";\n }\n get optional() {\n return !!this.tokens.optional;\n }\n get variadic() {\n return !!this.tokens.variadic;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n /**\n * @param {import(\"../validator.js\").Definitions} defs\n */\n *validate(defs) {\n yield* this.idlType.validate(defs);\n const result = idlTypeIncludesDictionary(this.idlType, defs, { useNullableInner: true });\n if (result) {\n if (this.idlType.nullable) {\n const message = `Dictionary arguments cannot be nullable.`;\n yield validationError(this.tokens.name, this, \"no-nullable-dict-arg\", message);\n } else if (!this.optional) {\n if (this.parent && !dictionaryIncludesRequiredField(result.dictionary, defs) && isLastRequiredArgument(this)) {\n const message = `Dictionary argument must be optional if it has no required fields`;\n yield validationError(this.tokens.name, this, \"dict-arg-optional\", message, {\n autofix: autofixDictionaryArgumentOptionality(this)\n });\n }\n } else if (!this.default) {\n const message = `Optional dictionary arguments must have a default value of \\`{}\\`.`;\n yield validationError(this.tokens.name, this, \"dict-arg-default\", message, {\n autofix: autofixOptionalDictionaryDefaultValue(this)\n });\n }\n }\n }\n}\n\n/**\n * @param {Argument} arg\n */\nfunction isLastRequiredArgument(arg) {\n const list = arg.parent.arguments || arg.parent.list;\n const index = list.indexOf(arg);\n const requiredExists = list.slice(index + 1).some(a => !a.optional);\n return !requiredExists;\n}\n\n/**\n * @param {Argument} arg\n */\nfunction autofixDictionaryArgumentOptionality(arg) {\n return () => {\n const firstToken = getFirstToken(arg.idlType);\n arg.tokens.optional = { type: \"optional\", value: \"optional\", trivia: firstToken.trivia };\n firstToken.trivia = \" \";\n autofixOptionalDictionaryDefaultValue(arg)();\n };\n}\n\n/**\n * @param {Argument} arg\n */\nfunction autofixOptionalDictionaryDefaultValue(arg) {\n return () => {\n arg.default = Default.parse(new Tokeniser(\" = {}\"));\n };\n}\n","import { Base } from \"./base.js\";\nimport { return_type, argument_list, unescape, autoParenter } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\n\nexport class Operation extends Base {\n /**\n * @typedef {import(\"../tokeniser.js\").Token} Token\n *\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {Token} [options.special]\n * @param {Token} [options.regular]\n */\n static parse(tokeniser, { special, regular } = {}) {\n const tokens = { special };\n const ret = autoParenter(new Operation({ source: tokeniser.source, tokens }));\n if (special && special.value === \"stringifier\") {\n tokens.termination = tokeniser.consume(\";\");\n if (tokens.termination) {\n ret.arguments = [];\n return ret;\n }\n }\n if (!special && !regular) {\n tokens.special = tokeniser.consume(\"getter\", \"setter\", \"deleter\");\n }\n ret.idlType = return_type(tokeniser) || tokeniser.error(\"Missing return type\");\n tokens.name = tokeniser.consume(\"identifier\", \"includes\");\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"Invalid operation\");\n ret.arguments = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated operation\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated operation, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"operation\";\n }\n get name() {\n const { name } = this.tokens;\n if (!name) {\n return \"\";\n }\n return unescape(name.value);\n }\n get special() {\n if (!this.tokens.special) {\n return \"\";\n }\n return this.tokens.special.value;\n }\n\n *validate(defs) {\n if (!this.name && [\"\", \"static\"].includes(this.special)) {\n const message = `Regular or static operations must have both a return type and an identifier.`;\n yield validationError(this.tokens.open, this, \"incomplete-op\", message);\n }\n if (this.idlType) {\n yield* this.idlType.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, unescape, autoParenter } from \"./helpers.js\";\n\nexport class Attribute extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser, { special, noInherit = false, readonly = false } = {}) {\n const start_position = tokeniser.position;\n const tokens = { special };\n const ret = autoParenter(new Attribute({ source: tokeniser.source, tokens }));\n if (!special && !noInherit) {\n tokens.special = tokeniser.consume(\"inherit\");\n }\n if (ret.special === \"inherit\" && tokeniser.probe(\"readonly\")) {\n tokeniser.error(\"Inherited attributes cannot be read-only\");\n }\n tokens.readonly = tokeniser.consume(\"readonly\");\n if (readonly && !tokens.readonly && tokeniser.probe(\"attribute\")) {\n tokeniser.error(\"Attributes must be readonly in this context\");\n }\n tokens.base = tokeniser.consume(\"attribute\");\n if (!tokens.base) {\n tokeniser.unconsume(start_position);\n return;\n }\n ret.idlType = type_with_extended_attributes(tokeniser, \"attribute-type\") || tokeniser.error(\"Attribute lacks a type\");\n switch (ret.idlType.generic) {\n case \"sequence\":\n case \"record\": tokeniser.error(`Attributes cannot accept ${ret.idlType.generic} types`);\n }\n tokens.name = tokeniser.consume(\"identifier\", \"async\", \"required\") || tokeniser.error(\"Attribute lacks a name\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated attribute, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"attribute\";\n }\n get special() {\n if (!this.tokens.special) {\n return \"\";\n }\n return this.tokens.special.value;\n }\n get readonly() {\n return !!this.tokens.readonly;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n yield* this.idlType.validate(defs);\n }\n}\n","import { Type } from \"./type.js\";\nimport { Argument } from \"./argument.js\";\nimport { ExtendedAttributes, SimpleExtendedAttribute } from \"./extended-attributes.js\";\nimport { Operation } from \"./operation.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Tokeniser } from \"../tokeniser.js\";\n\n/**\n * @param {string} identifier\n */\nexport function unescape(identifier) {\n return identifier.startsWith('_') ? identifier.slice(1) : identifier;\n}\n\n/**\n * Parses comma-separated list\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} args\n * @param {Function} args.parser parser function for each item\n * @param {boolean} [args.allowDangler] whether to allow dangling comma\n * @param {string} [args.listName] the name to be shown on error messages\n */\nexport function list(tokeniser, { parser, allowDangler, listName = \"list\" }) {\n const first = parser(tokeniser);\n if (!first) {\n return [];\n }\n first.tokens.separator = tokeniser.consume(\",\");\n const items = [first];\n while (first.tokens.separator) {\n const item = parser(tokeniser);\n if (!item) {\n if (!allowDangler) {\n tokeniser.error(`Trailing comma in ${listName}`);\n }\n break;\n }\n item.tokens.separator = tokeniser.consume(\",\");\n items.push(item);\n if (!item.tokens.separator) break;\n }\n return items;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function const_value(tokeniser) {\n return tokeniser.consume(\"true\", \"false\", \"Infinity\", \"-Infinity\", \"NaN\", \"decimal\", \"integer\");\n}\n\n/**\n * @param {object} token\n * @param {string} token.type\n * @param {string} token.value\n */\nexport function const_data({ type, value }) {\n switch (type) {\n case \"true\":\n case \"false\":\n return { type: \"boolean\", value: type === \"true\" };\n case \"Infinity\":\n case \"-Infinity\":\n return { type: \"Infinity\", negative: type.startsWith(\"-\") };\n case \"[\":\n return { type: \"sequence\", value: [] };\n case \"{\":\n return { type: \"dictionary\" };\n case \"decimal\":\n case \"integer\":\n return { type: \"number\", value };\n case \"string\":\n return { type: \"string\", value: value.slice(1, -1) };\n default:\n return { type };\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function primitive_type(tokeniser) {\n function integer_type() {\n const prefix = tokeniser.consume(\"unsigned\");\n const base = tokeniser.consume(\"short\", \"long\");\n if (base) {\n const postfix = tokeniser.consume(\"long\");\n return new Type({ source, tokens: { prefix, base, postfix } });\n }\n if (prefix) tokeniser.error(\"Failed to parse integer type\");\n }\n\n function decimal_type() {\n const prefix = tokeniser.consume(\"unrestricted\");\n const base = tokeniser.consume(\"float\", \"double\");\n if (base) {\n return new Type({ source, tokens: { prefix, base } });\n }\n if (prefix) tokeniser.error(\"Failed to parse float type\");\n }\n\n const { source } = tokeniser;\n const num_type = integer_type(tokeniser) || decimal_type(tokeniser);\n if (num_type) return num_type;\n const base = tokeniser.consume(\"bigint\", \"boolean\", \"byte\", \"octet\", \"undefined\");\n if (base) {\n return new Type({ source, tokens: { base } });\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function argument_list(tokeniser) {\n return list(tokeniser, { parser: Argument.parse, listName: \"arguments list\" });\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nexport function type_with_extended_attributes(tokeniser, typeName) {\n const extAttrs = ExtendedAttributes.parse(tokeniser);\n const ret = Type.parse(tokeniser, typeName);\n if (ret) autoParenter(ret).extAttrs = extAttrs;\n return ret;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nexport function return_type(tokeniser, typeName) {\n const typ = Type.parse(tokeniser, typeName || \"return-type\");\n if (typ) {\n return typ;\n }\n const voidToken = tokeniser.consume(\"void\");\n if (voidToken) {\n const ret = new Type({ source: tokeniser.source, tokens: { base: voidToken } });\n ret.type = \"return-type\";\n return ret;\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function stringifier(tokeniser) {\n const special = tokeniser.consume(\"stringifier\");\n if (!special) return;\n const member = Attribute.parse(tokeniser, { special }) ||\n Operation.parse(tokeniser, { special }) ||\n tokeniser.error(\"Unterminated stringifier\");\n return member;\n}\n\n/**\n * @param {string} str\n */\nexport function getLastIndentation(str) {\n const lines = str.split(\"\\n\");\n // the first line visually binds to the preceding token\n if (lines.length) {\n const match = lines[lines.length - 1].match(/^\\s+/);\n if (match) {\n return match[0];\n }\n }\n return \"\";\n}\n\n/**\n * @param {string} parentTrivia\n */\nexport function getMemberIndentation(parentTrivia) {\n const indentation = getLastIndentation(parentTrivia);\n const indentCh = indentation.includes(\"\\t\") ? \"\\t\" : \" \";\n return indentation + indentCh;\n}\n\n/**\n * @param {object} def\n * @param {import(\"./extended-attributes.js\").ExtendedAttributes} def.extAttrs\n */\nexport function autofixAddExposedWindow(def) {\n return () => {\n if (def.extAttrs.length){\n const tokeniser = new Tokeniser(\"Exposed=Window,\");\n const exposed = SimpleExtendedAttribute.parse(tokeniser);\n exposed.tokens.separator = tokeniser.consume(\",\");\n const existing = def.extAttrs[0];\n if (!/^\\s/.test(existing.tokens.name.trivia)) {\n existing.tokens.name.trivia = ` ${existing.tokens.name.trivia}`;\n }\n def.extAttrs.unshift(exposed);\n } else {\n autoParenter(def).extAttrs = ExtendedAttributes.parse(new Tokeniser(\"[Exposed=Window]\"));\n const trivia = def.tokens.base.trivia;\n def.extAttrs.tokens.open.trivia = trivia;\n def.tokens.base.trivia = `\\n${getLastIndentation(trivia)}`;\n }\n };\n}\n\n/**\n * Get the first syntax token for the given IDL object.\n * @param {*} data\n */\nexport function getFirstToken(data) {\n if (data.extAttrs.length) {\n return data.extAttrs.tokens.open;\n }\n if (data.type === \"operation\" && !data.special) {\n return getFirstToken(data.idlType);\n }\n const tokens = Object.values(data.tokens).sort((x, y) => x.index - y.index);\n return tokens[0];\n}\n\n/**\n * @template T\n * @param {T[]} array\n * @param {(item: T) => boolean} predicate\n */\nexport function findLastIndex(array, predicate) {\n const index = array.slice().reverse().findIndex(predicate);\n if (index === -1) {\n return index;\n }\n return array.length - index - 1;\n}\n\n/**\n * Returns a proxy that auto-assign `parent` field.\n * @template T\n * @param {T} data\n * @param {*} [parent] The object that will be assigned to `parent`.\n * If absent, it will be `data` by default.\n * @return {T}\n */\nexport function autoParenter(data, parent) {\n if (!parent) {\n // Defaults to `data` unless specified otherwise.\n parent = data;\n }\n if (!data) {\n // This allows `autoParenter(undefined)` which again allows\n // `autoParenter(parse())` where the function may return nothing.\n return data;\n }\n return new Proxy(data, {\n get(target, p) {\n const value = target[p];\n if (Array.isArray(value)) {\n // Wraps the array so that any added items will also automatically\n // get their `parent` values.\n return autoParenter(value, target);\n }\n return value;\n },\n set(target, p, value) {\n target[p] = value;\n if (!value) {\n return true;\n } else if (Array.isArray(value)) {\n // Assigning an array will add `parent` to its items.\n for (const item of value) {\n if (typeof item.parent !== \"undefined\") {\n item.parent = parent;\n }\n }\n } else if (typeof value.parent !== \"undefined\") {\n value.parent = parent;\n }\n return true;\n }\n });\n}\n","import { syntaxError } from \"./error.js\";\nimport { unescape } from \"./productions/helpers.js\";\n\n// These regular expressions use the sticky flag so they will only match at\n// the current location (ie. the offset of lastIndex).\nconst tokenRe = {\n // This expression uses a lookahead assertion to catch false matches\n // against integers early.\n \"decimal\": /-?(?=[0-9]*\\.|[0-9]+[eE])(([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/y,\n \"integer\": /-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/y,\n \"identifier\": /[_-]?[A-Za-z][0-9A-Z_a-z-]*/y,\n \"string\": /\"[^\"]*\"/y,\n \"whitespace\": /[\\t\\n\\r ]+/y,\n \"comment\": /((\\/(\\/.*|\\*([^*]|\\*[^/])*\\*\\/)[\\t\\n\\r ]*)+)/y,\n \"other\": /[^\\t\\n\\r 0-9A-Za-z]/y\n};\n\nexport const typeNameKeywords = [\n \"ArrayBuffer\",\n \"DataView\",\n \"Int8Array\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint8Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"Uint8ClampedArray\",\n \"Float32Array\",\n \"Float64Array\",\n \"any\",\n \"object\",\n \"symbol\"\n];\n\nexport const stringTypes = [\n \"ByteString\",\n \"DOMString\",\n \"USVString\"\n];\n\nexport const argumentNameKeywords = [\n \"async\",\n \"attribute\",\n \"callback\",\n \"const\",\n \"constructor\",\n \"deleter\",\n \"dictionary\",\n \"enum\",\n \"getter\",\n \"includes\",\n \"inherit\",\n \"interface\",\n \"iterable\",\n \"maplike\",\n \"namespace\",\n \"partial\",\n \"required\",\n \"setlike\",\n \"setter\",\n \"static\",\n \"stringifier\",\n \"typedef\",\n \"unrestricted\"\n];\n\nconst nonRegexTerminals = [\n \"-Infinity\",\n \"FrozenArray\",\n \"Infinity\",\n \"NaN\",\n \"ObservableArray\",\n \"Promise\",\n \"bigint\",\n \"boolean\",\n \"byte\",\n \"double\",\n \"false\",\n \"float\",\n \"long\",\n \"mixin\",\n \"null\",\n \"octet\",\n \"optional\",\n \"or\",\n \"readonly\",\n \"record\",\n \"sequence\",\n \"short\",\n \"true\",\n \"undefined\",\n \"unsigned\",\n \"void\"\n].concat(argumentNameKeywords, stringTypes, typeNameKeywords);\n\nconst punctuations = [\n \"(\",\n \")\",\n \",\",\n \"...\",\n \":\",\n \";\",\n \"<\",\n \"=\",\n \">\",\n \"?\",\n \"[\",\n \"]\",\n \"{\",\n \"}\"\n];\n\nconst reserved = [\n // \"constructor\" is now a keyword\n \"_constructor\",\n \"toString\",\n \"_toString\",\n];\n\n/**\n * @typedef {ArrayItemType<ReturnType<typeof tokenise>>} Token\n * @param {string} str\n */\nfunction tokenise(str) {\n const tokens = [];\n let lastCharIndex = 0;\n let trivia = \"\";\n let line = 1;\n let index = 0;\n while (lastCharIndex < str.length) {\n const nextChar = str.charAt(lastCharIndex);\n let result = -1;\n\n if (/[\\t\\n\\r ]/.test(nextChar)) {\n result = attemptTokenMatch(\"whitespace\", { noFlushTrivia: true });\n } else if (nextChar === '/') {\n result = attemptTokenMatch(\"comment\", { noFlushTrivia: true });\n }\n\n if (result !== -1) {\n const currentTrivia = tokens.pop().value;\n line += (currentTrivia.match(/\\n/g) || []).length;\n trivia += currentTrivia;\n index -= 1;\n } else if (/[-0-9.A-Z_a-z]/.test(nextChar)) {\n result = attemptTokenMatch(\"decimal\");\n if (result === -1) {\n result = attemptTokenMatch(\"integer\");\n }\n if (result === -1) {\n result = attemptTokenMatch(\"identifier\");\n const lastIndex = tokens.length - 1;\n const token = tokens[lastIndex];\n if (result !== -1) {\n if (reserved.includes(token.value)) {\n const message = `${unescape(token.value)} is a reserved identifier and must not be used.`;\n throw new WebIDLParseError(syntaxError(tokens, lastIndex, null, message));\n } else if (nonRegexTerminals.includes(token.value)) {\n token.type = token.value;\n }\n }\n }\n } else if (nextChar === '\"') {\n result = attemptTokenMatch(\"string\");\n }\n\n for (const punctuation of punctuations) {\n if (str.startsWith(punctuation, lastCharIndex)) {\n tokens.push({ type: punctuation, value: punctuation, trivia, line, index });\n trivia = \"\";\n lastCharIndex += punctuation.length;\n result = lastCharIndex;\n break;\n }\n }\n\n // other as the last try\n if (result === -1) {\n result = attemptTokenMatch(\"other\");\n }\n if (result === -1) {\n throw new Error(\"Token stream not progressing\");\n }\n lastCharIndex = result;\n index += 1;\n }\n\n // remaining trivia as eof\n tokens.push({\n type: \"eof\",\n value: \"\",\n trivia\n });\n\n return tokens;\n\n /**\n * @param {keyof typeof tokenRe} type\n * @param {object} options\n * @param {boolean} [options.noFlushTrivia]\n */\n function attemptTokenMatch(type, { noFlushTrivia } = {}) {\n const re = tokenRe[type];\n re.lastIndex = lastCharIndex;\n const result = re.exec(str);\n if (result) {\n tokens.push({ type, value: result[0], trivia, line, index });\n if (!noFlushTrivia) {\n trivia = \"\";\n }\n return re.lastIndex;\n }\n return -1;\n }\n}\n\nexport class Tokeniser {\n /**\n * @param {string} idl\n */\n constructor(idl) {\n this.source = tokenise(idl);\n this.position = 0;\n }\n\n /**\n * @param {string} message\n * @return {never}\n */\n error(message) {\n throw new WebIDLParseError(syntaxError(this.source, this.position, this.current, message));\n }\n\n /**\n * @param {string} type\n */\n probe(type) {\n return this.source.length > this.position && this.source[this.position].type === type;\n }\n\n /**\n * @param {...string} candidates\n */\n consume(...candidates) {\n for (const type of candidates) {\n if (!this.probe(type)) continue;\n const token = this.source[this.position];\n this.position++;\n return token;\n }\n }\n\n /**\n * @param {number} position\n */\n unconsume(position) {\n this.position = position;\n }\n}\n\nexport class WebIDLParseError extends Error {\n /**\n * @param {object} options\n * @param {string} options.message\n * @param {string} options.bareMessage\n * @param {string} options.context\n * @param {number} options.line\n * @param {*} options.sourceName\n * @param {string} options.input\n * @param {*[]} options.tokens\n */\n constructor({ message, bareMessage, context, line, sourceName, input, tokens }) {\n super(message);\n\n this.name = \"WebIDLParseError\"; // not to be mangled\n this.bareMessage = bareMessage;\n this.context = context;\n this.line = line;\n this.sourceName = sourceName;\n this.input = input;\n this.tokens = tokens;\n }\n}\n","import { list, unescape, autoParenter } from \"./helpers.js\";\nimport { Token } from \"./token.js\";\nimport { Base } from \"./base.js\";\n\nclass EnumValue extends Token {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const value = tokeniser.consume(\"string\");\n if (value) {\n return new EnumValue({ source: tokeniser.source, tokens: { value } });\n }\n }\n\n get type() {\n return \"enum-value\";\n }\n get value() {\n return super.value.slice(1, -1);\n }\n}\n\nexport class Enum extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n tokens.base = tokeniser.consume(\"enum\");\n if (!tokens.base) {\n return;\n }\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"No name for enum\");\n const ret = autoParenter(new Enum({ source: tokeniser.source, tokens }));\n tokeniser.current = ret.this;\n tokens.open = tokeniser.consume(\"{\") || tokeniser.error(\"Bodyless enum\");\n ret.values = list(tokeniser, {\n parser: EnumValue.parse,\n allowDangler: true,\n listName: \"enumeration\"\n });\n if (tokeniser.probe(\"string\")) {\n tokeniser.error(\"No comma between enum values\");\n }\n tokens.close = tokeniser.consume(\"}\") || tokeniser.error(\"Unexpected value in enum\");\n if (!ret.values.length) {\n tokeniser.error(\"No value in enum\");\n }\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No semicolon after enum\");\n return ret.this;\n }\n\n get type() {\n return \"enum\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { unescape } from \"./helpers.js\";\n\nexport class Includes extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const target = tokeniser.consume(\"identifier\");\n if (!target) {\n return;\n }\n const tokens = { target };\n tokens.includes = tokeniser.consume(\"includes\");\n if (!tokens.includes) {\n tokeniser.unconsume(target.index);\n return;\n }\n tokens.mixin = tokeniser.consume(\"identifier\") || tokeniser.error(\"Incomplete includes statement\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No terminating ; for includes statement\");\n return new Includes({ source: tokeniser.source, tokens });\n }\n\n get type() {\n return \"includes\";\n }\n get target() {\n return unescape(this.tokens.target.value);\n }\n get includes() {\n return unescape(this.tokens.mixin.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, unescape, autoParenter } from \"./helpers.js\";\n\nexport class Typedef extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Typedef({ source: tokeniser.source, tokens }));\n tokens.base = tokeniser.consume(\"typedef\");\n if (!tokens.base) {\n return;\n }\n ret.idlType = type_with_extended_attributes(tokeniser, \"typedef-type\") || tokeniser.error(\"Typedef lacks a type\");\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Typedef lacks a name\");\n tokeniser.current = ret.this;\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated typedef, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"typedef\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.idlType.validate(defs);\n }\n}\n","import { Base } from \"./base.js\";\nimport { return_type, argument_list, unescape, autoParenter } from \"./helpers.js\";\n\nexport class CallbackFunction extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser, base) {\n const tokens = { base };\n const ret = autoParenter(new CallbackFunction({ source: tokeniser.source, tokens }));\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Callback lacks a name\");\n tokeniser.current = ret.this;\n tokens.assign = tokeniser.consume(\"=\") || tokeniser.error(\"Callback lacks an assignment\");\n ret.idlType = return_type(tokeniser) || tokeniser.error(\"Callback lacks a return type\");\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"Callback lacks parentheses for arguments\");\n ret.arguments = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated callback\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated callback, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"callback\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n yield* this.idlType.validate(defs);\n }\n}\n","import { Base } from \"./base.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { unescape, autoParenter } from \"./helpers.js\";\n\n/**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\nfunction inheritance(tokeniser) {\n const colon = tokeniser.consume(\":\");\n if (!colon) {\n return {};\n }\n const inheritance = tokeniser.consume(\"identifier\") || tokeniser.error(\"Inheritance lacks a type\");\n return { colon, inheritance };\n}\n\nexport class Container extends Base {\n /**\n * @template T\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {T} instance\n * @param {*} args\n */\n static parse(tokeniser, instance, { type, inheritable, allowedMembers }) {\n const { tokens } = instance;\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(`Missing name in ${instance.type}`);\n tokeniser.current = instance;\n instance = autoParenter(instance);\n if (inheritable) {\n Object.assign(tokens, inheritance(tokeniser));\n }\n tokens.open = tokeniser.consume(\"{\") || tokeniser.error(`Bodyless ${type}`);\n instance.members = [];\n while (true) {\n tokens.close = tokeniser.consume(\"}\");\n if (tokens.close) {\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(`Missing semicolon after ${type}`);\n return instance.this;\n }\n const ea = ExtendedAttributes.parse(tokeniser);\n let mem;\n for (const [parser, ...args] of allowedMembers) {\n mem = autoParenter(parser(tokeniser, ...args));\n if (mem) {\n break;\n }\n }\n if (!mem) {\n tokeniser.error(\"Unknown member\");\n }\n mem.extAttrs = ea;\n instance.members.push(mem.this);\n }\n }\n\n get partial() {\n return !!this.tokens.partial;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get inheritance() {\n if (!this.tokens.inheritance) {\n return null;\n }\n return unescape(this.tokens.inheritance.value);\n }\n\n *validate(defs) {\n for (const member of this.members) {\n if (member.validate) {\n yield* member.validate(defs);\n }\n }\n }\n }\n","import { Base } from \"./base.js\";\nimport { Type } from \"./type.js\";\nimport { const_data, const_value, primitive_type, autoParenter, unescape } from \"./helpers.js\";\n\nexport class Constant extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n tokens.base = tokeniser.consume(\"const\");\n if (!tokens.base) {\n return;\n }\n let idlType = primitive_type(tokeniser);\n if (!idlType) {\n const base = tokeniser.consume(\"identifier\") || tokeniser.error(\"Const lacks a type\");\n idlType = new Type({ source: tokeniser.source, tokens: { base } });\n }\n if (tokeniser.probe(\"?\")) {\n tokeniser.error(\"Unexpected nullable constant type\");\n }\n idlType.type = \"const-type\";\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Const lacks a name\");\n tokens.assign = tokeniser.consume(\"=\") || tokeniser.error(\"Const lacks value assignment\");\n tokens.value = const_value(tokeniser) || tokeniser.error(\"Const lacks a value\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated const, expected `;`\");\n const ret = new Constant({ source: tokeniser.source, tokens });\n autoParenter(ret).idlType = idlType;\n return ret;\n }\n\n get type() {\n return \"const\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get value() {\n return const_data(this.tokens.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, autoParenter, argument_list } from \"./helpers.js\";\n\nexport class IterableLike extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const start_position = tokeniser.position;\n const tokens = {};\n const ret = autoParenter(new IterableLike({ source: tokeniser.source, tokens }));\n tokens.readonly = tokeniser.consume(\"readonly\");\n if (!tokens.readonly) {\n tokens.async = tokeniser.consume(\"async\");\n }\n tokens.base =\n tokens.readonly ? tokeniser.consume(\"maplike\", \"setlike\") :\n tokens.async ? tokeniser.consume(\"iterable\") :\n tokeniser.consume(\"iterable\", \"maplike\", \"setlike\");\n if (!tokens.base) {\n tokeniser.unconsume(start_position);\n return;\n }\n\n const { type } = ret;\n const secondTypeRequired = type === \"maplike\";\n const secondTypeAllowed = secondTypeRequired || type === \"iterable\";\n const argumentAllowed = ret.async && type === \"iterable\";\n\n tokens.open = tokeniser.consume(\"<\") || tokeniser.error(`Missing less-than sign \\`<\\` in ${type} declaration`);\n const first = type_with_extended_attributes(tokeniser) || tokeniser.error(`Missing a type argument in ${type} declaration`);\n ret.idlType = [first];\n ret.arguments = [];\n\n if (secondTypeAllowed) {\n first.tokens.separator = tokeniser.consume(\",\");\n if (first.tokens.separator) {\n ret.idlType.push(type_with_extended_attributes(tokeniser));\n }\n else if (secondTypeRequired) {\n tokeniser.error(`Missing second type argument in ${type} declaration`);\n }\n }\n\n tokens.close = tokeniser.consume(\">\") || tokeniser.error(`Missing greater-than sign \\`>\\` in ${type} declaration`);\n\n if (tokeniser.probe(\"(\")) {\n if (argumentAllowed) {\n tokens.argsOpen = tokeniser.consume(\"(\");\n ret.arguments.push(...argument_list(tokeniser));\n tokens.argsClose = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated async iterable argument list\");\n } else {\n tokeniser.error(`Arguments are only allowed for \\`async iterable\\``);\n }\n }\n\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(`Missing semicolon after ${type} declaration`);\n\n return ret.this;\n }\n\n get type() {\n return this.tokens.base.value;\n }\n get readonly() {\n return !!this.tokens.readonly;\n }\n get async() {\n return !!this.tokens.async;\n }\n\n *validate(defs) {\n for (const type of this.idlType) {\n yield* type.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { argument_list, autoParenter } from \"./helpers.js\";\n\nexport class Constructor extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const base = tokeniser.consume(\"constructor\");\n if (!base) {\n return;\n }\n /** @type {Base[\"tokens\"]} */\n const tokens = { base };\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"No argument list in constructor\");\n const args = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated constructor\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No semicolon after constructor\");\n const ret = new Constructor({ source: tokeniser.source, tokens });\n autoParenter(ret).arguments = args;\n return ret;\n }\n\n get type() {\n return \"constructor\";\n }\n\n *validate(defs) {\n if (this.idlType) {\n yield* this.idlType.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Container } from \"./container.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { Constant } from \"./constant.js\";\nimport { IterableLike } from \"./iterable.js\";\nimport { stringifier, autofixAddExposedWindow, getMemberIndentation, getLastIndentation, getFirstToken, findLastIndex, autoParenter } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\nimport { checkInterfaceMemberDuplication } from \"../validators/interface.js\";\nimport { Constructor } from \"./constructor.js\";\nimport { Tokeniser } from \"../tokeniser.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction static_member(tokeniser) {\n const special = tokeniser.consume(\"static\");\n if (!special) return;\n const member = Attribute.parse(tokeniser, { special }) ||\n Operation.parse(tokeniser, { special }) ||\n tokeniser.error(\"No body in static member\");\n return member;\n}\n\nexport class Interface extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser, base, { partial = null } = {}) {\n const tokens = { partial, base };\n return Container.parse(tokeniser, new Interface({ source: tokeniser.source, tokens }), {\n type: \"interface\",\n inheritable: !partial,\n allowedMembers: [\n [Constant.parse],\n [Constructor.parse],\n [static_member],\n [stringifier],\n [IterableLike.parse],\n [Attribute.parse],\n [Operation.parse]\n ]\n });\n }\n\n get type() {\n return \"interface\";\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n if (\n !this.partial &&\n this.extAttrs.every(extAttr => extAttr.name !== \"Exposed\")\n ) {\n const message = `Interfaces must have \\`[Exposed]\\` extended attribute. \\\nTo fix, add, for example, \\`[Exposed=Window]\\`. Please also consider carefully \\\nif your interface should also be exposed in a Worker scope. Refer to the \\\n[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \\\nfor more information.`;\n yield validationError(this.tokens.name, this, \"require-exposed\", message, {\n autofix: autofixAddExposedWindow(this)\n });\n }\n const oldConstructors = this.extAttrs.filter(extAttr => extAttr.name === \"Constructor\");\n for (const constructor of oldConstructors) {\n const message = `Constructors should now be represented as a \\`constructor()\\` operation on the interface \\\ninstead of \\`[Constructor]\\` extended attribute. Refer to the \\\n[WebIDL spec section on constructor operations](https://heycam.github.io/webidl/#idl-constructors) \\\nfor more information.`;\n yield validationError(constructor.tokens.name, this, \"constructor-member\", message, {\n autofix: autofixConstructor(this, constructor)\n });\n }\n\n const isGlobal = this.extAttrs.some(extAttr => extAttr.name === \"Global\");\n if (isGlobal) {\n const factoryFunctions = this.extAttrs.filter(extAttr => extAttr.name === \"LegacyFactoryFunction\");\n for (const named of factoryFunctions) {\n const message = `Interfaces marked as \\`[Global]\\` cannot have factory functions.`;\n yield validationError(named.tokens.name, this, \"no-constructible-global\", message);\n }\n\n const constructors = this.members.filter(member => member.type === \"constructor\");\n for (const named of constructors) {\n const message = `Interfaces marked as \\`[Global]\\` cannot have constructors.`;\n yield validationError(named.tokens.base, this, \"no-constructible-global\", message);\n }\n }\n\n yield* super.validate(defs);\n if (!this.partial) {\n yield* checkInterfaceMemberDuplication(defs, this);\n }\n }\n}\n\nfunction autofixConstructor(interfaceDef, constructorExtAttr) {\n interfaceDef = autoParenter(interfaceDef);\n return () => {\n const indentation = getLastIndentation(interfaceDef.extAttrs.tokens.open.trivia);\n const memberIndent = interfaceDef.members.length ?\n getLastIndentation(getFirstToken(interfaceDef.members[0]).trivia) :\n getMemberIndentation(indentation);\n const constructorOp = Constructor.parse(new Tokeniser(`\\n${memberIndent}constructor();`));\n constructorOp.extAttrs = new ExtendedAttributes({});\n autoParenter(constructorOp).arguments = constructorExtAttr.arguments;\n\n const existingIndex = findLastIndex(interfaceDef.members, m => m.type === \"constructor\");\n interfaceDef.members.splice(existingIndex + 1, 0, constructorOp);\n\n const { close } = interfaceDef.tokens;\n if (!close.trivia.includes(\"\\n\")) {\n close.trivia += `\\n${indentation}`;\n }\n\n const { extAttrs } = interfaceDef;\n const index = extAttrs.indexOf(constructorExtAttr);\n const removed = extAttrs.splice(index, 1);\n if (!extAttrs.length) {\n extAttrs.tokens.open = extAttrs.tokens.close = undefined;\n } else if (extAttrs.length === index) {\n extAttrs[index - 1].tokens.separator = undefined;\n } else if (!extAttrs[index].tokens.name.trivia.trim()) {\n extAttrs[index].tokens.name.trivia = removed[0].tokens.name.trivia;\n }\n };\n}\n","// @ts-check\n\nimport { validationError } from \"../error.js\";\n\nexport function* checkInterfaceMemberDuplication(defs, i) {\n const opNames = new Set(getOperations(i).map(op => op.name));\n const partials = defs.partials.get(i.name) || [];\n const mixins = defs.mixinMap.get(i.name) || [];\n for (const ext of [...partials, ...mixins]) {\n const additions = getOperations(ext);\n yield* forEachExtension(additions, opNames, ext, i);\n for (const addition of additions) {\n opNames.add(addition.name);\n }\n }\n\n function* forEachExtension(additions, existings, ext, base) {\n for (const addition of additions) {\n const { name } = addition;\n if (name && existings.has(name)) {\n const message = `The operation \"${name}\" has already been defined for the base interface \"${base.name}\" either in itself or in a mixin`;\n yield validationError(addition.tokens.name, ext, \"no-cross-overload\", message);\n }\n }\n }\n\n function getOperations(i) {\n return i.members\n .filter(({type}) => type === \"operation\");\n }\n}\n","import { Container } from \"./container.js\";\nimport { Constant } from \"./constant.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { stringifier } from \"./helpers.js\";\n\nexport class Mixin extends Container {\n /**\n * @typedef {import(\"../tokeniser.js\").Token} Token\n *\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {Token} base\n * @param {object} [options]\n * @param {Token} [options.partial]\n */\n static parse(tokeniser, base, { partial } = {}) {\n const tokens = { partial, base };\n tokens.mixin = tokeniser.consume(\"mixin\");\n if (!tokens.mixin) {\n return;\n }\n return Container.parse(tokeniser, new Mixin({ source: tokeniser.source, tokens }), {\n type: \"interface mixin\",\n allowedMembers: [\n [Constant.parse],\n [stringifier],\n [Attribute.parse, { noInherit: true }],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"interface mixin\";\n }\n}\n","import { Base } from \"./base.js\";\nimport { unescape, type_with_extended_attributes, autoParenter } from \"./helpers.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { Default } from \"./default.js\";\n\nexport class Field extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Field({ source: tokeniser.source, tokens }));\n ret.extAttrs = ExtendedAttributes.parse(tokeniser);\n tokens.required = tokeniser.consume(\"required\");\n ret.idlType = type_with_extended_attributes(tokeniser, \"dictionary-type\") || tokeniser.error(\"Dictionary member lacks a type\");\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Dictionary member lacks a name\");\n ret.default = Default.parse(tokeniser);\n if (tokens.required && ret.default) tokeniser.error(\"Required member must not have a default\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated dictionary member, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"field\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get required() {\n return !!this.tokens.required;\n }\n\n *validate(defs) {\n yield* this.idlType.validate(defs);\n }\n}\n","// @ts-check\n\nimport { Container } from \"./container.js\";\nimport { Field } from \"./field.js\";\n\nexport class Dictionary extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {import(\"../tokeniser.js\").Token} [options.partial]\n */\n static parse(tokeniser, { partial } = {}) {\n const tokens = { partial };\n tokens.base = tokeniser.consume(\"dictionary\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new Dictionary({ source: tokeniser.source, tokens }), {\n type: \"dictionary\",\n inheritable: !partial,\n allowedMembers: [\n [Field.parse],\n ]\n });\n }\n\n get type() {\n return \"dictionary\";\n }\n}\n","import { Container } from \"./container.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { validationError } from \"../error.js\";\nimport { autofixAddExposedWindow } from \"./helpers.js\";\n\nexport class Namespace extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {import(\"../tokeniser.js\").Token} [options.partial]\n */\n static parse(tokeniser, { partial } = {}) {\n const tokens = { partial };\n tokens.base = tokeniser.consume(\"namespace\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new Namespace({ source: tokeniser.source, tokens }), {\n type: \"namespace\",\n allowedMembers: [\n [Attribute.parse, { noInherit: true, readonly: true }],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"namespace\";\n }\n\n *validate(defs) {\n if (!this.partial && this.extAttrs.every(extAttr => extAttr.name !== \"Exposed\")) {\n const message = `Namespaces must have [Exposed] extended attribute. \\\nTo fix, add, for example, [Exposed=Window]. Please also consider carefully \\\nif your namespace should also be exposed in a Worker scope. Refer to the \\\n[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \\\nfor more information.`;\n yield validationError(this.tokens.name, this, \"require-exposed\", message, {\n autofix: autofixAddExposedWindow(this)\n });\n }\n yield* super.validate(defs);\n }\n}\n","// @ts-check\n\nimport { Container } from \"./container.js\";\nimport { Operation } from \"./operation.js\";\nimport { Constant } from \"./constant.js\";\n\nexport class CallbackInterface extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser, callback, { partial = null } = {}) {\n const tokens = { callback };\n tokens.base = tokeniser.consume(\"interface\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new CallbackInterface({ source: tokeniser.source, tokens }), {\n type: \"callback interface\",\n inheritable: !partial,\n allowedMembers: [\n [Constant.parse],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"callback interface\";\n }\n}\n","\"use strict\";\n\nimport { Tokeniser } from \"./tokeniser.js\";\nimport { Enum } from \"./productions/enum.js\";\nimport { Includes } from \"./productions/includes.js\";\nimport { ExtendedAttributes } from \"./productions/extended-attributes.js\";\nimport { Typedef } from \"./productions/typedef.js\";\nimport { CallbackFunction } from \"./productions/callback.js\";\nimport { Interface } from \"./productions/interface.js\";\nimport { Mixin } from \"./productions/mixin.js\";\nimport { Dictionary } from \"./productions/dictionary.js\";\nimport { Namespace } from \"./productions/namespace.js\";\nimport { CallbackInterface } from \"./productions/callback-interface.js\";\nimport { autoParenter } from \"./productions/helpers.js\";\n\n/**\n * @param {Tokeniser} tokeniser\n * @param {object} options\n * @param {boolean} [options.concrete]\n */\nfunction parseByTokens(tokeniser, options) {\n const source = tokeniser.source;\n\n function error(str) {\n tokeniser.error(str);\n }\n\n function consume(...candidates) {\n return tokeniser.consume(...candidates);\n }\n\n function callback() {\n const callback = consume(\"callback\");\n if (!callback) return;\n if (tokeniser.probe(\"interface\")) {\n return CallbackInterface.parse(tokeniser, callback);\n }\n return CallbackFunction.parse(tokeniser, callback);\n }\n\n function interface_(opts) {\n const base = consume(\"interface\");\n if (!base) return;\n const ret = Mixin.parse(tokeniser, base, opts) ||\n Interface.parse(tokeniser, base, opts) ||\n error(\"Interface has no proper body\");\n return ret;\n }\n\n function partial() {\n const partial = consume(\"partial\");\n if (!partial) return;\n return Dictionary.parse(tokeniser, { partial }) ||\n interface_({ partial }) ||\n Namespace.parse(tokeniser, { partial }) ||\n error(\"Partial doesn't apply to anything\");\n }\n\n function definition() {\n return callback() ||\n interface_() ||\n partial() ||\n Dictionary.parse(tokeniser) ||\n Enum.parse(tokeniser) ||\n Typedef.parse(tokeniser) ||\n Includes.parse(tokeniser) ||\n Namespace.parse(tokeniser);\n }\n\n function definitions() {\n if (!source.length) return [];\n const defs = [];\n while (true) {\n const ea = ExtendedAttributes.parse(tokeniser);\n const def = definition();\n if (!def) {\n if (ea.length) error(\"Stray extended attributes\");\n break;\n }\n autoParenter(def).extAttrs = ea;\n defs.push(def);\n }\n const eof = consume(\"eof\");\n if (options.concrete) {\n defs.push(eof);\n }\n return defs;\n }\n const res = definitions();\n if (tokeniser.position < source.length) error(\"Unrecognised tokens\");\n return res;\n}\n\n/**\n * @param {string} str\n * @param {object} [options]\n * @param {*} [options.sourceName]\n * @param {boolean} [options.concrete]\n */\nexport function parse(str, options = {}) {\n const tokeniser = new Tokeniser(str);\n if (typeof options.sourceName !== \"undefined\") {\n tokeniser.source.name = options.sourceName;\n }\n return parseByTokens(tokeniser, options);\n}\n","\"use strict\";\n\nfunction noop(arg) {\n return arg;\n}\n\nconst templates = {\n wrap: items => items.join(\"\"),\n trivia: noop,\n name: noop,\n reference: noop,\n type: noop,\n generic: noop,\n nameless: noop,\n inheritance: noop,\n definition: noop,\n extendedAttribute: noop,\n extendedAttributeReference: noop\n};\n\nexport function write(ast, { templates: ts = templates } = {}) {\n ts = Object.assign({}, templates, ts);\n\n function reference(raw, { unescaped, context }) {\n if (!unescaped) {\n unescaped = raw.startsWith(\"_\") ? raw.slice(1) : raw;\n }\n return ts.reference(raw, unescaped, context);\n }\n\n function token(t, wrapper = noop, ...args) {\n if (!t) {\n return \"\";\n }\n const value = wrapper(t.value, ...args);\n return ts.wrap([ts.trivia(t.trivia), value]);\n }\n\n function reference_token(t, context) {\n return token(t, reference, { context });\n }\n\n function name_token(t, arg) {\n return token(t, ts.name, arg);\n }\n\n function type_body(it) {\n if (it.union || it.generic) {\n return ts.wrap([\n token(it.tokens.base, ts.generic),\n token(it.tokens.open),\n ...it.subtype.map(type),\n token(it.tokens.close)\n ]);\n }\n const firstToken = it.tokens.prefix || it.tokens.base;\n const prefix = it.tokens.prefix ? [\n it.tokens.prefix.value,\n ts.trivia(it.tokens.base.trivia)\n ] : [];\n const ref = reference(ts.wrap([\n ...prefix,\n it.tokens.base.value,\n token(it.tokens.postfix)\n ]), { unescaped: it.idlType, context: it });\n return ts.wrap([ts.trivia(firstToken.trivia), ref]);\n }\n function type(it) {\n return ts.wrap([\n extended_attributes(it.extAttrs),\n type_body(it),\n token(it.tokens.nullable),\n token(it.tokens.separator)\n ]);\n }\n function default_(def) {\n if (!def) {\n return \"\";\n }\n return ts.wrap([\n token(def.tokens.assign),\n ...def.expression.map(t => token(t))\n ]);\n }\n function argument(arg) {\n return ts.wrap([\n extended_attributes(arg.extAttrs),\n token(arg.tokens.optional),\n ts.type(type(arg.idlType)),\n token(arg.tokens.variadic),\n name_token(arg.tokens.name, { data: arg }),\n default_(arg.default),\n token(arg.tokens.separator)\n ]);\n }\n function extended_attribute_listitem(str) {\n return ts.wrap([\n token(str.tokens.value),\n token(str.tokens.separator)\n ]);\n }\n function identifier(id, context) {\n return ts.wrap([\n reference_token(id.tokens.value, context),\n token(id.tokens.separator)\n ]);\n }\n function make_ext_at(it) {\n const { rhsType } = it.params;\n return ts.wrap([\n ts.trivia(it.tokens.name.trivia),\n ts.extendedAttribute(ts.wrap([\n ts.extendedAttributeReference(it.name),\n token(it.params.tokens.assign),\n reference_token(it.params.tokens.secondaryName, it),\n token(it.params.tokens.open),\n ...!it.params.list ? [] :\n it.params.list.map(\n rhsType === \"identifier-list\" ? id => identifier(id, it) :\n rhsType && rhsType.endsWith(\"-list\") ? extended_attribute_listitem :\n argument\n ),\n token(it.params.tokens.close)\n ])),\n token(it.tokens.separator)\n ]);\n }\n function extended_attributes(eats) {\n if (!eats.length) return \"\";\n return ts.wrap([\n token(eats.tokens.open),\n ...eats.map(make_ext_at),\n token(eats.tokens.close)\n ]);\n }\n\n function operation(it, parent) {\n const body = it.idlType ? [\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.open),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.close),\n ] : [];\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n it.tokens.name ? token(it.tokens.special) : token(it.tokens.special, ts.nameless, { data: it, parent }),\n ...body,\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function attribute(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.special),\n token(it.tokens.readonly),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function constructor(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base, ts.nameless, { data: it, parent }),\n token(it.tokens.open),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function inheritance(inh) {\n if (!inh.tokens.inheritance) {\n return \"\";\n }\n return ts.wrap([\n token(inh.tokens.colon),\n ts.trivia(inh.tokens.inheritance.trivia),\n ts.inheritance(reference(inh.tokens.inheritance.value, { context: inh }))\n ]);\n }\n\n function container(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.callback),\n token(it.tokens.partial),\n token(it.tokens.base),\n token(it.tokens.mixin),\n name_token(it.tokens.name, { data: it }),\n inheritance(it),\n token(it.tokens.open),\n iterate(it.members, it),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it });\n }\n\n function field(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.required),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n default_(it.default),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function const_(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.assign),\n token(it.tokens.value),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function typedef(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function includes(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n reference_token(it.tokens.target, it),\n token(it.tokens.includes),\n reference_token(it.tokens.mixin, it),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function callback(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.assign),\n ts.type(type(it.idlType)),\n token(it.tokens.open),\n ...it.arguments.map(argument),\n token(it.tokens.close),\n token(it.tokens.termination),\n ]), { data: it });\n }\n function enum_(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.open),\n iterate(it.values, it),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function enum_value(v, parent) {\n return ts.wrap([\n ts.trivia(v.tokens.value.trivia),\n ts.definition(\n ts.wrap(['\"', ts.name(v.value, { data: v, parent }), '\"']),\n { data: v, parent }\n ),\n token(v.tokens.separator)\n ]);\n }\n function iterable_like(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.readonly),\n token(it.tokens.async),\n token(it.tokens.base, ts.generic),\n token(it.tokens.open),\n ts.wrap(it.idlType.map(type)),\n token(it.tokens.close),\n token(it.tokens.argsOpen),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.argsClose),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function eof(it) {\n return ts.trivia(it.trivia);\n }\n\n const table = {\n interface: container,\n \"interface mixin\": container,\n namespace: container,\n operation,\n attribute,\n constructor,\n dictionary: container,\n field,\n const: const_,\n typedef,\n includes,\n callback,\n enum: enum_,\n \"enum-value\": enum_value,\n iterable: iterable_like,\n maplike: iterable_like,\n setlike: iterable_like,\n \"callback interface\": container,\n eof\n };\n function dispatch(it, parent) {\n const dispatcher = table[it.type];\n if (!dispatcher) {\n throw new Error(`Type \"${it.type}\" is unsupported`);\n }\n return table[it.type](it, parent);\n }\n function iterate(things, parent) {\n if (!things) return;\n const results = things.map(thing => dispatch(thing, parent));\n return ts.wrap(results);\n }\n return iterate(ast);\n}\n","\"use strict\";\n\nimport { validationError as error } from \"./error.js\";\n\nfunction getMixinMap(all, unique) {\n const map = new Map();\n const includes = all.filter(def => def.type === \"includes\");\n for (const include of includes) {\n const mixin = unique.get(include.includes);\n if (!mixin) {\n continue;\n }\n const array = map.get(include.target);\n if (array) {\n array.push(mixin);\n } else {\n map.set(include.target, [mixin]);\n }\n }\n return map;\n}\n\n/**\n * @typedef {ReturnType<typeof groupDefinitions>} Definitions\n */\nfunction groupDefinitions(all) {\n const unique = new Map();\n const duplicates = new Set();\n const partials = new Map();\n for (const def of all) {\n if (def.partial) {\n const array = partials.get(def.name);\n if (array) {\n array.push(def);\n } else {\n partials.set(def.name, [def]);\n }\n continue;\n }\n if (!def.name) {\n continue;\n }\n if (!unique.has(def.name)) {\n unique.set(def.name, def);\n } else {\n duplicates.add(def);\n }\n }\n return {\n all,\n unique,\n partials,\n duplicates,\n mixinMap: getMixinMap(all, unique),\n cache: {\n typedefIncludesDictionary: new WeakMap(),\n dictionaryIncludesRequiredField: new WeakMap()\n },\n };\n}\n\nfunction* checkDuplicatedNames({ unique, duplicates }) {\n for (const dup of duplicates) {\n const { name } = dup;\n const message = `The name \"${name}\" of type \"${unique.get(name).type}\" was already seen`;\n yield error(dup.tokens.name, dup, \"no-duplicate\", message);\n }\n}\n\nfunction* validateIterable(ast) {\n const defs = groupDefinitions(ast);\n for (const def of defs.all) {\n if (def.validate) {\n yield* def.validate(defs);\n }\n }\n yield* checkDuplicatedNames(defs);\n}\n\n// Remove this once all of our support targets expose `.flat()` by default\nfunction flatten(array) {\n if (array.flat) {\n return array.flat();\n }\n return [].concat(...array);\n}\n\n/**\n * @param {*} ast AST or array of ASTs\n */\nexport function validate(ast) {\n return [...validateIterable(flatten(ast))];\n}\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/* global define */\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.respec-modal .close-button {\n position: absolute;\n z-index: inherit;\n padding: 0.2em;\n font-weight: bold;\n cursor: pointer;\n margin-left: 5px;\n border: none;\n background: transparent;\n}\n\n#respec-ui {\n position: fixed;\n display: flex;\n flex-direction: row-reverse;\n top: 20px;\n right: 20px;\n width: 202px;\n text-align: right;\n z-index: 9000;\n}\n\n#respec-pill,\n.respec-info-button {\n background: #fff;\n height: 2.5em;\n color: rgb(120, 120, 120);\n border: 1px solid #ccc;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n}\n\n.respec-info-button {\n border: none;\n opacity: 0.75;\n border-radius: 2em;\n margin-right: 1em;\n min-width: 3.5em;\n}\n\n.respec-info-button:focus,\n.respec-info-button:hover {\n opacity: 1;\n transition: opacity 0.2s;\n}\n\n#respec-pill:disabled {\n font-size: 2.8px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(40, 40, 40, 0.2);\n border-right: 1.1em solid rgba(40, 40, 40, 0.2);\n border-bottom: 1.1em solid rgba(40, 40, 40, 0.2);\n border-left: 1.1em solid #ffffff;\n transform: translateZ(0);\n animation: respec-spin 0.5s infinite linear;\n box-shadow: none;\n}\n\n#respec-pill:disabled,\n#respec-pill:disabled:after {\n border-radius: 50%;\n width: 10em;\n height: 10em;\n}\n\n@keyframes respec-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.respec-hidden {\n visibility: hidden;\n opacity: 0;\n transition: visibility 0s 0.2s, opacity 0.2s linear;\n}\n\n.respec-visible {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.2s linear;\n}\n\n#respec-pill:hover,\n#respec-pill:focus {\n color: rgb(0, 0, 0);\n background-color: rgb(245, 245, 245);\n transition: color 0.2s;\n}\n\n#respec-menu {\n position: absolute;\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n background: #fff;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n width: 200px;\n display: none;\n text-align: left;\n margin-top: 32px;\n font-size: 0.8em;\n}\n\n#respec-menu:not([hidden]) {\n display: block;\n}\n\n#respec-menu li {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n.respec-save-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(47%, 2fr));\n grid-gap: 0.5cm;\n padding: 0.5cm;\n}\n\n.respec-save-button:link {\n padding-top: 16px;\n color: rgb(240, 240, 240);\n background: rgb(42, 90, 168);\n justify-self: stretch;\n height: 1cm;\n text-decoration: none;\n text-align: center;\n font-size: inherit;\n border: none;\n border-radius: 0.2cm;\n}\n\n.respec-save-button:link:hover {\n color: white;\n background: rgb(42, 90, 168);\n padding: 0;\n margin: 0;\n border: 0;\n padding-top: 16px;\n}\n\n.respec-save-button:link:focus {\n background: #193766;\n}\n\n#respec-ui button:focus,\n#respec-pill:focus,\n.respec-option:focus {\n outline: 0;\n outline-style: none;\n}\n\n#respec-pill-error {\n background-color: red;\n color: white;\n}\n\n#respec-pill-warning {\n background-color: orange;\n color: white;\n}\n\n.respec-warning-list,\n.respec-error-list {\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: sans-serif;\n background-color: rgb(255, 251, 230);\n font-size: 0.85em;\n}\n\n.respec-warning-list > li,\n.respec-error-list > li {\n padding: 0.4em 0.7em;\n}\n\n.respec-warning-list > li::before {\n content: \"⚠️\";\n padding-right: 0.5em;\n}\n.respec-warning-list p,\n.respec-error-list p {\n padding: 0;\n margin: 0;\n}\n\n.respec-warning-list li {\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 245, 194);\n}\n\n.respec-error-list,\n.respec-error-list li {\n background-color: rgb(255, 240, 240);\n}\n\n.respec-error-list li::before {\n content: \"💥\";\n padding-right: 0.5em;\n}\n\n.respec-error-list li {\n padding: 0.4em 0.7em;\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 215, 215);\n}\n\n.respec-error-list li > p {\n margin: 0;\n padding: 0;\n display: inline-block;\n}\n\n.respec-error-list li > p:first-child,\n.respec-warning-list li > p:first-child {\n display: inline;\n}\n\n.respec-warning-list > li li,\n.respec-error-list > li li {\n margin: 0;\n list-style: disc;\n}\n\n#respec-overlay {\n display: block;\n position: fixed;\n z-index: 10000;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n background: #000;\n}\n\n.respec-show-overlay {\n transition: opacity 0.2s linear;\n opacity: 0.5;\n}\n\n.respec-hide-overlay {\n transition: opacity 0.2s linear;\n opacity: 0;\n}\n\n.respec-modal {\n display: block;\n position: fixed;\n z-index: 11000;\n margin: auto;\n top: 10%;\n background: #fff;\n border: 5px solid #666;\n min-width: 20%;\n width: 79%;\n padding: 0;\n max-height: 80%;\n overflow-y: auto;\n margin: 0 -0.5cm;\n}\n\n@media screen and (min-width: 78em) {\n .respec-modal {\n width: 62%;\n }\n}\n\n.respec-modal h3 {\n margin: 0;\n padding: 0.2em;\n text-align: center;\n color: black;\n background: linear-gradient(\n to bottom,\n rgba(238, 238, 238, 1) 0%,\n rgba(238, 238, 238, 1) 50%,\n rgba(204, 204, 204, 1) 100%\n );\n font-size: 1em;\n}\n\n.respec-modal .inside div p {\n padding-left: 1cm;\n}\n\n#respec-menu button.respec-option {\n background: white;\n padding: 0 0.2cm;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n padding: 1.2em 1.2em;\n}\n\n#respec-menu button.respec-option:hover,\n#respec-menu button:focus {\n background-color: #eeeeee;\n}\n\n.respec-cmd-icon {\n padding-right: 0.5em;\n}\n\n#respec-ui button.respec-option:last-child {\n border: none;\n border-radius: inherit;\n}\n\n.respec-button-copy-paste {\n position: absolute;\n height: 28px;\n width: 40px;\n cursor: pointer;\n background-image: linear-gradient(#fcfcfc, #eee);\n border: 1px solid rgb(144, 184, 222);\n border-left: 0;\n border-radius: 0px 0px 3px 0;\n -webkit-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n top: 0;\n left: 127px;\n}\n\n@media print {\n #respec-ui {\n display: none;\n }\n}\n\n.respec-iframe {\n width: 100%;\n min-height: 550px;\n height: 100%;\n overflow: hidden;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n.respec-iframe:not(.ready) {\n background: url(\"https://respec.org/xref/loader.gif\") no-repeat center;\n}\n\n.respec-iframe + a[href] {\n font-size: 0.9rem;\n float: right;\n margin: 0 0.5em 0.5em;\n border-bottom-width: 1px;\n}\n`;\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport css from \"../styles/ui.css.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @module w3c/group\n *\n * `group` is a shorthand configuration option for specifying `wg`, `wgId`,\n * `wgURI`, and `wgPatentURI` options.\n */\n\nimport {\n fetchAndCache,\n joinAnd,\n showError,\n showWarning,\n} from \"../core/utils.js\";\n\nexport const name = \"w3c/group\";\n\nconst W3C_GROUPS_API = \"https://respec.org/w3c/groups/\";\nconst LEGACY_OPTIONS = [\"wg\", \"wgURI\", \"wgId\", \"wgPatentURI\", \"wgPatentPolicy\"];\n\nexport async function run(conf) {\n const usedLegacyOptions = LEGACY_OPTIONS.filter(opt => conf[opt]);\n\n if (!conf.group) {\n if (usedLegacyOptions.length) {\n const outdatedOptionsStr = joinAnd(LEGACY_OPTIONS, s => `\\`${s}\\``);\n const msg = `Configuration options ${outdatedOptionsStr} are deprecated.`;\n const hint = `Please use the [\\`group\\`](https://respec.org/docs/#group) option instead.`;\n showWarning(msg, name, { hint });\n }\n return;\n }\n\n if (usedLegacyOptions.length) {\n const outdatedOptionsStr = joinAnd(usedLegacyOptions, s => `\\`${s}\\``);\n const msg = `Configuration options ${outdatedOptionsStr} are superseded by \\`group\\` and will be overridden by ReSpec.`;\n const hint = \"Please remove them from `respecConfig`.\";\n showWarning(msg, name, { hint });\n }\n\n const { group } = conf;\n const groupDetails = Array.isArray(group)\n ? await getMultipleGroupDetails(group)\n : await getGroupDetails(group);\n Object.assign(conf, groupDetails);\n}\n\n/** @param {string[]} groups */\nasync function getMultipleGroupDetails(groups) {\n const details = await Promise.all(groups.map(getGroupDetails));\n /** @type {{ [key in keyof GroupDetails]: GroupDetails[key][] }} */\n const result = {\n wg: [],\n wgId: [],\n wgURI: [],\n wgPatentURI: [],\n wgPatentPolicy: [],\n groupType: [],\n };\n for (const groupDetails of details.filter(o => o)) {\n for (const key of Object.keys(result)) {\n result[key].push(groupDetails[key]);\n }\n }\n return result;\n}\n\n/**\n * @param {string} group\n * @typedef {{ wgId: number, wg: string, wgURI: string, wgPatentURI: string, wgPatentPolicy: string, groupType: W3CGroupType }} GroupDetails\n * @returns {Promise<GroupDetails|undefined>}\n */\nasync function getGroupDetails(group) {\n let type = \"\";\n let shortname = group;\n if (group.includes(\"/\")) {\n [type, shortname] = group.split(\"/\", 2);\n }\n const url = new URL(`${shortname}/${type}`, W3C_GROUPS_API);\n const res = await fetchAndCache(url.href);\n if (res.ok) {\n const json = await res.json();\n const {\n id: wgId,\n name: wg,\n URI: wgURI,\n patentURI: wgPatentURI,\n patentPolicy: wgPatentPolicy,\n type: groupType,\n } = json;\n return { wg, wgId, wgURI, wgPatentURI, wgPatentPolicy, groupType };\n }\n\n const text = await res.text();\n const message = `Failed to fetch group details (HTTP: ${res.status}). ${text}`;\n const hint =\n res.status === 404\n ? \"See [supported group names](https://respec.org/w3c/groups/) to use with the \" +\n \"[`group`](https://respec.org/docs/#group) configuration option.\"\n : undefined;\n showError(message, name, { hint });\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-link\";\n\n/**\n * @param {object} link\n * @param {string} link.key\n * @param {string} [link.class]\n * @param {LinkData[]} [link.data]\n */\nexport default function showLink(link) {\n if (!link.key) {\n const msg =\n \"Found a link without `key` attribute in the configuration. See dev console.\";\n showWarning(msg, name);\n console.warn(msg, link);\n return;\n }\n return html`\n <dt class=\"${link.class ? link.class : null}\">${link.key}</dt>\n ${link.data ? link.data.map(showLinkData) : showLinkData(link)}\n `;\n}\n\n/**\n * @typedef {object} LinkData\n * @property {string} [LinkData.class]\n * @property {string} [LinkData.href]\n * @property {string} [LinkData.value]\n * @param {LinkData} data\n */\nfunction showLinkData(data) {\n return html`<dd class=\"${data.class ? data.class : null}\">\n ${data.href\n ? html`<a href=\"${data.href}\">${data.value || data.href}</a>`\n : data.value}\n </dd>`;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-logo\";\n\n/**\n * @param {object} logo\n * @param {string} logo.src\n * @param {string} logo.url\n * @param {string} logo.alt\n * @param {string} [logo.id]\n * @param {number} [logo.width]\n * @param {number} [logo.height]\n */\nexport default function showLogo(logo) {\n /** @type {HTMLAnchorElement} */\n const a = html`<a href=\"${logo.url || \"\"}\" class=\"logo\"></a>`;\n if (!logo.alt) {\n const msg = \"Found spec logo without an `alt` attribute.\";\n showWarning(msg, name, { elements: [a] });\n }\n /** @type {HTMLImageElement} */\n const img = html`<img\n id=\"${logo.id}\"\n alt=\"${logo.alt}\"\n width=\"${logo.width}\"\n height=\"${logo.height}\"\n />`;\n // avoid triggering 404 requests from dynamically generated\n // hyperHTML attribute values\n img.src = logo.src;\n a.append(img);\n return a;\n}\n","// @ts-check\nimport { humanDate, showError, toShortIsoDate } from \"../../core/utils.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst name = \"core/templates/show-people\";\n\nconst localizationStrings = {\n en: {\n until(date) {\n return html` Until ${date} `;\n },\n },\n es: {\n until(date) {\n return html` Hasta ${date} `;\n },\n },\n ko: {\n until(date) {\n return html` ${date} 이전 `;\n },\n },\n ja: {\n until(date) {\n return html` ${date} 以前 `;\n },\n },\n de: {\n until(date) {\n return html` bis ${date} `;\n },\n },\n zh: {\n until(date) {\n return html` 直到 ${date} `;\n },\n },\n};\n\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nconst orcidIcon = html`<svg\n width=\"16\"\n height=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n>\n <style>\n .st1 {\n fill: #fff;\n }\n </style>\n <path\n d=\"M256 128c0 70.7-57.3 128-128 128S0 198.7 0 128 57.3 0 128 0s128 57.3 128 128z\"\n fill=\"#a6ce39\"\n />\n <path\n class=\"st1\"\n d=\"M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z\"\n />\n</svg>`;\n\n/**\n * @typedef {object} Person\n * @property {string} [Person.name]\n * @property {string} [Person.company]\n * @property {string|number} [Person.w3cid]\n * @property {string} [Person.mailto]\n * @property {string} [Person.url]\n * @property {string} [Person.orcid]\n * @property {string} [Person.company]\n * @property {string} [Person.companyURL]\n * @property {string} [Person.note]\n * @property {string} [Person.retiredDate]\n * @property {PersonExtras} [Person.extras]\n *\n * @typedef {object} PersonExtras\n * @property {string} PersonExtras.name\n * @property {string} [PersonExtras.class]\n * @property {string} [PersonExtras.href]\n *\n * @param {Person[]} persons\n */\nexport default function showPeople(persons = []) {\n const l10n = localizationStrings[lang];\n return persons.map(getItem);\n\n function getItem(p) {\n const personName = [p.name]; // treated as opt-in HTML by hyperHTML\n const company = [p.company];\n const editorid = p.w3cid ? parseInt(p.w3cid, 10) : null;\n /** @type {HTMLElement} */\n const dd = html`<dd\n class=\"p-author h-card vcard\"\n data-editor-id=\"${editorid}\"\n ></dd>`;\n const span = document.createDocumentFragment();\n const contents = [];\n if (p.mailto) {\n contents.push(html`<a\n class=\"ed_mailto u-email email p-name\"\n href=\"${`mailto:${p.mailto}`}\"\n >${personName}</a\n >`);\n } else if (p.url) {\n contents.push(\n html`<a class=\"u-url url p-name fn\" href=\"${p.url}\">${personName}</a>`\n );\n } else {\n contents.push(html`<span class=\"p-name fn\">${personName}</span>`);\n }\n if (p.orcid) {\n contents.push(\n html`<a class=\"p-name orcid\" href=\"${p.orcid}\"\n >${orcidIcon.cloneNode(true)}\n </a>`\n );\n }\n if (p.company) {\n if (p.companyURL) {\n contents.push(\n html`\n (<a class=\"p-org org h-org h-card\" href=\"${p.companyURL}\"\n >${company}</a\n >)\n `\n );\n } else {\n contents.push(html` (${company}) `);\n }\n }\n if (p.note) contents.push(document.createTextNode(` (${p.note})`));\n if (p.extras) {\n const results = p.extras\n // Remove empty names\n .filter(extra => extra.name && extra.name.trim())\n // Convert to HTML\n .map(getExtra);\n for (const result of results) {\n contents.push(document.createTextNode(\", \"), result);\n }\n }\n if (p.retiredDate) {\n const retiredDate = new Date(p.retiredDate);\n const isValidDate = retiredDate.toString() !== \"Invalid Date\";\n const timeElem = document.createElement(\"time\");\n timeElem.textContent = isValidDate\n ? humanDate(retiredDate)\n : \"Invalid Date\"; // todo: Localise invalid date\n if (!isValidDate) {\n const msg = \"The date is invalid. The expected format is YYYY-MM-DD.\";\n const title = \"Invalid date\";\n showError(msg, name, { title, elements: [timeElem] });\n }\n timeElem.dateTime = toShortIsoDate(retiredDate);\n contents.push(html` - ${l10n.until(timeElem)} `);\n }\n\n // @ts-ignore: hyperhtml types only support Element but we use a DocumentFragment here\n html.bind(span)`${contents}`;\n dd.appendChild(span);\n return dd;\n }\n\n function getExtra(extra) {\n const span = html`<span class=\"${extra.class || null}\"></span>`;\n let textContainer = span;\n if (extra.href) {\n textContainer = html`<a href=\"${extra.href}\"></a>`;\n span.appendChild(textContainer);\n }\n textContainer.textContent = extra.name;\n return span;\n }\n}\n","// @ts-check\nimport { getIntlData, humanDate, showWarning } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nconst name = \"w3c/templates/headers\";\n\nconst ccLicense = \"https://creativecommons.org/licenses/by/4.0/legalcode\";\nconst w3cLicense = \"https://www.w3.org/Consortium/Legal/copyright-documents\";\nconst legalDisclaimer =\n \"https://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer\";\nconst w3cTrademark =\n \"https://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks\";\n\nconst localizationStrings = {\n en: {\n author: \"Author:\",\n authors: \"Authors:\",\n editor: \"Editor:\",\n editors: \"Editors:\",\n former_editor: \"Former editor:\",\n former_editors: \"Former editors:\",\n latest_editors_draft: \"Latest editor's draft:\",\n latest_published_version: \"Latest published version:\",\n edited_in_place: \"edited in place\",\n this_version: \"This version:\",\n test_suite: \"Test suite:\",\n implementation_report: \"Implementation report:\",\n prev_editor_draft: \"Previous editor's draft:\",\n prev_version: \"Previous version:\",\n prev_recommendation: \"Previous Recommendation:\",\n latest_recommendation: \"Latest Recommendation:\",\n },\n ko: {\n author: \"저자:\",\n authors: \"저자:\",\n editor: \"편집자:\",\n editors: \"편집자:\",\n former_editor: \"이전 편집자:\",\n former_editors: \"이전 편집자:\",\n latest_editors_draft: \"최신 편집 초안:\",\n latest_published_version: \"최신 버전:\",\n this_version: \"현재 버전:\",\n },\n zh: {\n author: \"作者:\",\n authors: \"作者:\",\n editor: \"编辑:\",\n editors: \"编辑:\",\n former_editor: \"原编辑:\",\n former_editors: \"原编辑:\",\n latest_editors_draft: \"最新编辑草稿:\",\n latest_published_version: \"最新发布版本:\",\n this_version: \"本版本:\",\n test_suite: \"测试套件:\",\n implementation_report: \"实现报告:\",\n prev_editor_draft: \"上一版编辑草稿:\",\n prev_version: \"上一版:\",\n prev_recommendation: \"上一版正式推荐标准:\",\n latest_recommendation: \"最新发布的正式推荐标准:\",\n },\n ja: {\n author: \"著者:\",\n authors: \"著者:\",\n editor: \"編者:\",\n editors: \"編者:\",\n former_editor: \"以前の版の編者:\",\n former_editors: \"以前の版の編者:\",\n latest_editors_draft: \"最新の編集用草案:\",\n latest_published_version: \"最新バージョン:\",\n this_version: \"このバージョン:\",\n test_suite: \"テストスイート:\",\n implementation_report: \"実装レポート:\",\n },\n nl: {\n author: \"Auteur:\",\n authors: \"Auteurs:\",\n editor: \"Redacteur:\",\n editors: \"Redacteurs:\",\n latest_editors_draft: \"Laatste werkversie:\",\n latest_published_version: \"Laatst gepubliceerde versie:\",\n this_version: \"Deze versie:\",\n },\n es: {\n author: \"Autor:\",\n authors: \"Autores:\",\n editor: \"Editor:\",\n editors: \"Editores:\",\n latest_editors_draft: \"Borrador de editor mas reciente:\",\n latest_published_version: \"Versión publicada mas reciente:\",\n this_version: \"Ésta versión:\",\n },\n de: {\n author: \"Autor/in:\",\n authors: \"Autor/innen:\",\n editor: \"Redaktion:\",\n editors: \"Redaktion:\",\n former_editor: \"Frühere Mitwirkende:\",\n former_editors: \"Frühere Mitwirkende:\",\n latest_editors_draft: \"Letzter Entwurf:\",\n latest_published_version: \"Letzte publizierte Fassung:\",\n this_version: \"Diese Fassung:\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nfunction getSpecSubTitleElem(conf) {\n let specSubTitleElem = document.querySelector(\"h2#subtitle\");\n\n if (specSubTitleElem && specSubTitleElem.parentElement) {\n specSubTitleElem.remove();\n conf.subtitle = specSubTitleElem.textContent.trim();\n } else if (conf.subtitle) {\n specSubTitleElem = document.createElement(\"h2\");\n specSubTitleElem.textContent = conf.subtitle;\n specSubTitleElem.id = \"subtitle\";\n }\n if (specSubTitleElem) {\n specSubTitleElem.classList.add(\"subtitle\");\n }\n return specSubTitleElem;\n}\n\nexport default (conf, options) => {\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${document.querySelector(\"h1#title\")}\n ${getSpecSubTitleElem(conf)}\n <h2>\n ${conf.prependW3C ? \"W3C \" : \"\"}${conf.isCR\n ? `${conf.longStatus}`\n : `${conf.textStatus}`}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >${conf.modificationDate\n ? html`, ${l10n.edited_in_place}${\" \"}\n ${inPlaceModificationDate(conf.modificationDate)}`\n : \"\"}\n </h2>\n <dl>\n ${!conf.isNoTrack\n ? html`\n <dt>${l10n.this_version}</dt>\n <dd>\n <a class=\"u-url\" href=\"${conf.thisVersion}\"\n >${conf.thisVersion}</a\n >\n </dd>\n <dt>${l10n.latest_published_version}</dt>\n <dd>\n ${conf.latestVersion\n ? html`<a href=\"${conf.latestVersion}\"\n >${conf.latestVersion}</a\n >`\n : \"none\"}\n </dd>\n `\n : \"\"}\n ${conf.edDraftURI\n ? html`\n <dt>${l10n.latest_editors_draft}</dt>\n <dd><a href=\"${conf.edDraftURI}\">${conf.edDraftURI}</a></dd>\n `\n : \"\"}\n ${conf.testSuiteURI\n ? html`\n <dt>${l10n.test_suite}</dt>\n <dd><a href=\"${conf.testSuiteURI}\">${conf.testSuiteURI}</a></dd>\n `\n : \"\"}\n ${conf.implementationReportURI\n ? html`\n <dt>${l10n.implementation_report}</dt>\n <dd>\n <a href=\"${conf.implementationReportURI}\"\n >${conf.implementationReportURI}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.isED && conf.prevED\n ? html`\n <dt>${l10n.prev_editor_draft}</dt>\n <dd><a href=\"${conf.prevED}\">${conf.prevED}</a></dd>\n `\n : \"\"}\n ${conf.showPreviousVersion\n ? html`\n <dt>${l10n.prev_version}</dt>\n <dd><a href=\"${conf.prevVersion}\">${conf.prevVersion}</a></dd>\n `\n : \"\"}\n ${!conf.prevRecURI\n ? \"\"\n : conf.isRec\n ? html`\n <dt>${l10n.prev_recommendation}</dt>\n <dd><a href=\"${conf.prevRecURI}\">${conf.prevRecURI}</a></dd>\n `\n : html`\n <dt>${l10n.latest_recommendation}</dt>\n <dd><a href=\"${conf.prevRecURI}\">${conf.prevRecURI}</a></dd>\n `}\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${conf.errata\n ? html`<p>\n Please check the\n <a href=\"${conf.errata}\"><strong>errata</strong></a> for any errors or\n issues reported since publication.\n </p>`\n : \"\"}\n ${conf.isRec\n ? html`<p>\n See also\n <a\n href=\"${`http://www.w3.org/2003/03/Translations/byTechnology?technology=${conf.shortName}`}\"\n >\n <strong>translations</strong></a\n >.\n </p>`\n : \"\"}\n ${conf.alternateFormats\n ? html`<p>\n ${options.multipleAlternates\n ? \"This document is also available in these non-normative formats:\"\n : \"This document is also available in this non-normative format:\"}\n ${options.alternatesHTML}\n </p>`\n : \"\"}\n ${renderCopyright(conf)}\n <hr title=\"Separator for header\" />\n </div>`;\n};\n\n/**\n * @param {string} date document in-place edit date as YYYY-MM-DD\n * @returns {HTMLTimeElement}\n */\nfunction inPlaceModificationDate(date) {\n const modificationHumanDate = humanDate(new Date(date));\n return html`<time class=\"dt-modified\" datetime=\"${date}\"\n >${modificationHumanDate}</time\n >`;\n}\n\n/**\n * @param {string} text\n * @param {string} url\n * @param {string=} cssClass\n */\nfunction linkLicense(text, url, cssClass) {\n return html`<a rel=\"license\" href=\"${url}\" class=\"${cssClass}\">${text}</a>`;\n}\n\nfunction renderCopyright(conf) {\n // If there is already a copyright, let's relocate it.\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n return existingCopyright;\n }\n if (conf.hasOwnProperty(\"overrideCopyright\")) {\n const msg = \"The `overrideCopyright` configuration option is deprecated.\";\n const hint =\n 'Please add a `<p class=\"copyright\">` element directly to your document instead';\n showWarning(msg, name, { hint });\n return html`${[conf.overrideCopyright]}`;\n }\n if (conf.isUnofficial && conf.licenseInfo) {\n return html`<p class=\"copyright\">\n This document is licensed under a\n ${linkLicense(conf.licenseInfo.name, conf.licenseInfo.url, \"subfoot\")}\n (${conf.licenseInfo.short}).\n </p>`;\n }\n return renderOfficialCopyright(conf);\n}\n\nfunction renderOfficialCopyright(conf) {\n return html`<p class=\"copyright\">\n <a href=\"https://www.w3.org/Consortium/Legal/ipr-notice#Copyright\"\n >Copyright</a\n >\n ©\n ${conf.copyrightStart ? `${conf.copyrightStart}-` : \"\"}${conf.publishYear}\n ${conf.additionalCopyrightHolders\n ? html` ${[conf.additionalCopyrightHolders]} & `\n : \"\"}\n <a href=\"https://www.w3.org/\"\n ><abbr title=\"World Wide Web Consortium\">W3C</abbr></a\n ><sup>®</sup> (<a href=\"https://www.csail.mit.edu/\"\n ><abbr title=\"Massachusetts Institute of Technology\">MIT</abbr></a\n >,\n <a href=\"https://www.ercim.eu/\"\n ><abbr\n title=\"European Research Consortium for Informatics and Mathematics\"\n >ERCIM</abbr\n ></a\n >, <a href=\"https://www.keio.ac.jp/\">Keio</a>,\n <a href=\"https://ev.buaa.edu.cn/\">Beihang</a>). ${noteIfDualLicense(conf)}\n W3C <a href=\"${legalDisclaimer}\">liability</a>,\n <a href=\"${w3cTrademark}\">trademark</a> and ${linkDocumentUse(conf)} rules\n apply.\n </p>`;\n}\n\nfunction noteIfDualLicense(conf) {\n if (!conf.isCCBY) {\n return;\n }\n return html`\n Some Rights Reserved: this document is dual-licensed,\n ${linkLicense(\"CC-BY\", ccLicense)} and\n ${linkLicense(\"W3C Document License\", w3cLicense)}.\n `;\n}\n\nfunction linkDocumentUse(conf) {\n if (conf.isCCBY) {\n return linkLicense(\n \"document use\",\n \"https://www.w3.org/Consortium/Legal/2013/copyright-documents-dual.html\"\n );\n }\n if (conf.isW3CSoftAndDocLicense) {\n return linkLicense(\n \"permissive document license\",\n \"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\"\n );\n }\n return linkLicense(\"document use\", w3cLicense);\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { l10n } from \"./headers.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nexport default (conf, options) => {\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n }\n\n const specTitleElem = document.querySelector(\"h1#title\");\n const specTitleElemClone = specTitleElem.cloneNode(true);\n\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${specTitleElem}\n ${conf.subtitle ? html`<h2 id=\"subtitle\">${conf.subtitle}</h2>` : \"\"}\n <h2>\n ${conf.longStatus}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >\n </h2>\n <dl>\n ${conf.thisVersion\n ? html`\n <dt>${l10n.this_version}</dt>\n <dd>\n <a class=\"u-url\" href=\"${conf.thisVersion}\"\n >${conf.thisVersion}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.latestVersion\n ? html`\n <dt>${l10n.latest_published_version}</dt>\n <dd>\n <a href=\"${conf.latestVersion}\">${conf.latestVersion}</a>\n </dd>\n `\n : \"\"}\n ${conf.edDraftURI\n ? html`\n <dt>${l10n.latest_editors_draft}</dt>\n <dd><a href=\"${conf.edDraftURI}\">${conf.edDraftURI}</a></dd>\n `\n : \"\"}\n ${conf.testSuiteURI\n ? html`\n <dt>Test suite:</dt>\n <dd><a href=\"${conf.testSuiteURI}\">${conf.testSuiteURI}</a></dd>\n `\n : \"\"}\n ${conf.implementationReportURI\n ? html`\n <dt>Implementation report:</dt>\n <dd>\n <a href=\"${conf.implementationReportURI}\"\n >${conf.implementationReportURI}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.prevVersion\n ? html`\n <dt>Previous version:</dt>\n <dd><a href=\"${conf.prevVersion}\">${conf.prevVersion}</a></dd>\n `\n : \"\"}\n ${!conf.isCGFinal\n ? html`\n ${conf.prevED\n ? html`\n <dt>Previous editor's draft:</dt>\n <dd><a href=\"${conf.prevED}\">${conf.prevED}</a></dd>\n `\n : \"\"}\n `\n : \"\"}\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${conf.alternateFormats\n ? html`<p>\n ${options.multipleAlternates\n ? \"This document is also available in these non-normative formats:\"\n : \"This document is also available in this non-normative format:\"}\n ${options.alternatesHTML}\n </p>`\n : \"\"}\n ${existingCopyright\n ? existingCopyright\n : html`<p class=\"copyright\">\n <a href=\"https://www.w3.org/Consortium/Legal/ipr-notice#Copyright\"\n >Copyright</a\n >\n ©\n ${conf.copyrightStart\n ? `${conf.copyrightStart}-`\n : \"\"}${conf.publishYear}\n ${conf.additionalCopyrightHolders\n ? html` ${[conf.additionalCopyrightHolders]} & `\n : \"\"}\n the Contributors to the ${specTitleElemClone.childNodes}\n Specification, published by the\n <a href=\"${conf.wgURI}\">${conf.wg}</a> under the\n ${conf.isCGFinal\n ? html`\n <a href=\"https://www.w3.org/community/about/agreements/fsa/\"\n >W3C Community Final Specification Agreement (FSA)</a\n >. A human-readable\n <a\n href=\"https://www.w3.org/community/about/agreements/fsa-deed/\"\n >summary</a\n >\n is available.\n `\n : html`\n <a href=\"https://www.w3.org/community/about/agreements/cla/\"\n >W3C Community Contributor License Agreement (CLA)</a\n >. A human-readable\n <a\n href=\"https://www.w3.org/community/about/agreements/cla-deed/\"\n >summary</a\n >\n is available.\n `}\n </p>`}\n <hr title=\"Separator for header\" />\n </div>`;\n};\n","// @ts-check\nimport { getIntlData } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst localizationStrings = {\n en: {\n sotd: \"Status of This Document\",\n },\n ko: {\n sotd: \"현재 문서의 상태\",\n },\n zh: {\n sotd: \"关于本文档\",\n },\n ja: {\n sotd: \"この文書の位置付け\",\n },\n nl: {\n sotd: \"Status van dit document\",\n },\n es: {\n sotd: \"Estado de este Document\",\n },\n de: {\n sotd: \"Status dieses Dokuments\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nexport default (conf, opts) => {\n return html`\n <h2>${l10n.sotd}</h2>\n ${conf.isPreview ? renderPreview(conf) : \"\"}\n ${conf.isUnofficial\n ? renderIsUnofficial(opts)\n : conf.isTagFinding\n ? opts.additionalContent\n : conf.isNoTrack\n ? renderIsNoTrack(conf, opts)\n : html`\n <p><em>${conf.l10n.status_at_publication}</em></p>\n ${conf.isSubmission\n ? noteForSubmission(conf, opts)\n : html`\n ${!conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${!conf.overrideStatus\n ? html`\n ${linkToWorkingGroup(conf)} ${linkToCommunity(conf, opts)}\n `\n : \"\"}\n ${conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${conf.isRec ? renderIsRec(conf) : renderNotRec(conf)}\n ${renderDeliverer(conf)}\n <p>\n This document is governed by the\n <a\n id=\"w3c_process_revision\"\n href=\"https://www.w3.org/2020/Process-20200915/\"\n >15 September 2020 W3C Process Document</a\n >.\n </p>\n ${conf.addPatentNote\n ? html`<p>${[conf.addPatentNote]}</p>`\n : \"\"}\n `}\n `}\n ${opts.additionalSections}\n `;\n};\n\nexport function renderPreview(conf) {\n const { prUrl, prNumber, edDraftURI } = conf;\n return html`<details class=\"annoying-warning\" open=\"\">\n <summary>\n This is a\n preview${prUrl && prNumber\n ? html`\n of pull request\n <a href=\"${prUrl}\">#${prNumber}</a>\n `\n : \"\"}\n </summary>\n <p>\n Do not attempt to implement this version of the specification. Do not\n reference this version as authoritative in any way.\n ${edDraftURI\n ? html`\n Instead, see\n <a href=\"${edDraftURI}\">${edDraftURI}</a> for the Editor's draft.\n `\n : \"\"}\n </p>\n </details>`;\n}\n\nfunction renderIsUnofficial(opts) {\n const { additionalContent } = opts;\n return html`\n <p>\n This document is a draft of a potential specification. It has no official\n standing of any kind and does not represent the support or consensus of\n any standards organization.\n </p>\n ${additionalContent}\n `;\n}\n\nfunction renderIsNoTrack(conf, opts) {\n const { isMO } = conf;\n const { additionalContent } = opts;\n return html`\n <p>\n This document is merely a W3C-internal\n ${isMO ? \"member-confidential\" : \"\"} document. It has no official standing\n of any kind and does not represent consensus of the W3C Membership.\n </p>\n ${additionalContent}\n `;\n}\n\nfunction renderNotRec(conf) {\n let statusExplanation = \"\";\n let updatePolicy = html`This is a draft document and may be updated, replaced\n or obsoleted by other documents at any time. It is inappropriate to cite this\n document as other than work in progress.\n ${conf.updateableRec\n ? html`Future updates to this specification may incorporate\n <a href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}`;\n let reviewPolicy = \"\";\n if (conf.specStatus === \"CRD\") {\n statusExplanation =\n \"A Candidate Recommendation Draft integrates changes from the previous Candidate Recommendation that the Working Group intends to include in a subsequent Candidate Recommendation Snapshot.\";\n if (conf.pubMode === \"LS\") {\n updatePolicy =\n \"This document is maintained and updated at any time. Some parts of this document are work in progress. \";\n }\n } else if (conf.specStatus === \"CR\") {\n statusExplanation = html`A Candidate Recommendation Snapshot has received\n <a href=\"https://www.w3.org/2020/Process-20200915/#dfn-wide-review\"\n >wide review</a\n >\n and is intended to gather\n <a href=\"${conf.implementationReportURI}\">implementation experience</a>.`;\n updatePolicy = html`${conf.updateableRec\n ? html`Future updates to this specification may incorporate\n <a href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}`;\n if (conf.pubMode === \"LS\") {\n reviewPolicy = `Comments are welcome at any time but most especially before ${conf.humanCREnd}.`;\n } else {\n reviewPolicy = `This Candidate Recommendation is not expected to advance to Proposed Recommendation any earlier than ${conf.humanCREnd}.`;\n }\n } else if (conf.isPR) {\n reviewPolicy = html` The W3C Membership and other interested parties are\n invited to review the document and send comments through\n ${conf.humanPREnd}. Advisory Committee Representatives should consult\n their\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >. Note that substantive technical comments were expected during the\n Candidate Recommendation review period that ended ${conf.humanCREnd}.`;\n } else if (conf.isPER) {\n reviewPolicy = html` W3C Advisory Committee Members are invited to send\n formal review comments on this Proposed Edited Recommendation to the W3C\n Team until ${conf.humanPEREnd}. Members of the Advisory Committee will\n find the appropriate review form for this document by consulting their\n list of current\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >.`;\n }\n return html`<p>\n Publication as ${conf.anOrA} ${conf.textStatus} does not imply endorsement\n by the W3C Membership. ${statusExplanation}\n </p>\n ${updatePolicy ? html`<p>${updatePolicy}</p>` : \"\"}\n <p>${reviewPolicy}</p>`;\n}\n\nfunction renderIsRec({\n updateableRec,\n revisionTypes = [],\n humanRevisedRecEnd,\n}) {\n let reviewTarget = \"\";\n if (revisionTypes.includes(\"addition\")) {\n reviewTarget = \"additions\";\n }\n if (revisionTypes.includes(\"correction\") && !reviewTarget) {\n reviewTarget = \"corrections\";\n }\n return html`<p>\n A W3C Recommendation is a specification that, after extensive\n consensus-building, has received the endorsement of the W3C and its\n Members. W3C recommends the wide deployment of this specification as a\n standard for the Web.\n ${updateableRec\n ? html`Future updates to this Recommendation may incorporate\n <a\n href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}\n </p>\n ${revisionTypes.includes(\"addition\")\n ? html`<p class=\"addition\">\n Proposed additions are marked in the document.\n </p>`\n : \"\"}\n ${revisionTypes.includes(\"correction\")\n ? html`<p class=\"correction\">\n Proposed corrections are marked in the document.\n </p>`\n : \"\"}\n ${reviewTarget\n ? html`<p>\n The W3C Membership and other interested parties are invited to review\n the proposed ${reviewTarget} and send comments through\n ${humanRevisedRecEnd}. Advisory Committee Representatives should\n consult their\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >.\n </p>`\n : \"\"} `;\n}\n\nfunction renderDeliverer(conf) {\n const {\n isNote,\n wgId,\n isIGNote,\n multipleWGs,\n recNotExpected,\n wgPatentHTML,\n wgPatentURI,\n charterDisclosureURI,\n wgPatentPolicy,\n } = conf;\n\n const patentPolicyURL =\n wgPatentPolicy === \"PP2017\"\n ? \"https://www.w3.org/Consortium/Patent-Policy-20170801/\"\n : \"https://www.w3.org/Consortium/Patent-Policy/\";\n\n const producers = !isIGNote\n ? html`\n This document was produced by ${multipleWGs ? \"groups\" : \"a group\"}\n operating under the\n <a href=\"${patentPolicyURL}\"\n >${wgPatentPolicy === \"PP2017\" ? \"1 August 2017 \" : \"\"}W3C Patent\n Policy</a\n >.\n `\n : \"\";\n const wontBeRec = recNotExpected\n ? \"The group does not expect this document to become a W3C Recommendation.\"\n : \"\";\n return html`<p data-deliverer=\"${isNote || isIGNote ? wgId : null}\">\n ${producers} ${wontBeRec}\n ${!isNote && !isIGNote\n ? html`\n ${multipleWGs\n ? html` W3C maintains ${wgPatentHTML} `\n : html`\n W3C maintains a\n <a href=\"${[wgPatentURI]}\" rel=\"disclosure\"\n >public list of any patent disclosures</a\n >\n `}\n made in connection with the deliverables of\n ${multipleWGs\n ? \"each group; these pages also include\"\n : \"the group; that page also includes\"}\n instructions for disclosing a patent. An individual who has actual\n knowledge of a patent which the individual believes contains\n <a href=\"${patentPolicyURL}#def-essential\">Essential Claim(s)</a>\n must disclose the information in accordance with\n <a href=\"${patentPolicyURL}#sec-Disclosure\"\n >section 6 of the W3C Patent Policy</a\n >.\n `\n : \"\"}\n ${isIGNote\n ? html`\n The disclosure obligations of the Participants of this group are\n described in the\n <a href=\"${charterDisclosureURI}\">charter</a>.\n `\n : \"\"}\n </p>`;\n}\n\nfunction noteForSubmission(conf, opts) {\n return html`\n ${opts.additionalContent}\n ${conf.isMemberSubmission\n ? noteForMemberSubmission(conf)\n : conf.isTeamSubmission\n ? noteForTeamSubmission(conf, opts)\n : \"\"}\n `;\n}\n\nfunction noteForMemberSubmission(conf) {\n const teamComment = `https://www.w3.org/Submission/${conf.publishDate.getUTCFullYear()}/${\n conf.submissionCommentNumber\n }/Comment/`;\n\n const patentPolicyURL =\n conf.wgPatentPolicy === \"PP2017\"\n ? \"https://www.w3.org/Consortium/Patent-Policy-20170801/\"\n : \"https://www.w3.org/Consortium/Patent-Policy/\";\n\n return html`<p>\n By publishing this document, W3C acknowledges that the\n <a href=\"${conf.thisVersion}\">Submitting Members</a> have made a formal\n Submission request to W3C for discussion. Publication of this document by\n W3C indicates no endorsement of its content by W3C, nor that W3C has, is, or\n will be allocating any resources to the issues addressed by it. This\n document is not the product of a chartered W3C group, but is published as\n potential input to the\n <a href=\"https://www.w3.org/Consortium/Process\">W3C Process</a>. A\n <a href=\"${teamComment}\">W3C Team Comment</a> has been published in\n conjunction with this Member Submission. Publication of acknowledged Member\n Submissions at the W3C site is one of the benefits of\n <a href=\"https://www.w3.org/Consortium/Prospectus/Joining\">\n W3C Membership</a\n >. Please consult the requirements associated with Member Submissions of\n <a href=\"${patentPolicyURL}#sec-submissions\"\n >section 3.3 of the W3C Patent Policy</a\n >. Please consult the complete\n <a href=\"https://www.w3.org/Submission\"\n >list of acknowledged W3C Member Submissions</a\n >.\n </p>`;\n}\n\nfunction noteForTeamSubmission(conf, opts) {\n return html`\n ${renderPublicList(conf, opts)}\n <p>\n Please consult the complete\n <a href=\"https://www.w3.org/TeamSubmission/\">list of Team Submissions</a>.\n </p>\n `;\n}\n\nexport function renderPublicList(conf, opts) {\n const {\n mailToWGPublicListWithSubject,\n mailToWGPublicListSubscription,\n } = opts;\n const { wgPublicList, subjectPrefix } = conf;\n const archivesURL = `https://lists.w3.org/Archives/Public/${wgPublicList}/`;\n return html`<p>\n If you wish to make comments regarding this document, please send them to\n <a href=\"${mailToWGPublicListWithSubject}\">${wgPublicList}@w3.org</a>\n (<a href=\"${mailToWGPublicListSubscription}\">subscribe</a>,\n <a href=\"${archivesURL}\">archives</a>)${subjectPrefix\n ? html` with <code>${subjectPrefix}</code> at the start of your email's\n subject`\n : \"\"}.\n </p>`;\n}\n\nfunction linkToWorkingGroup(conf) {\n if (!conf.wg) {\n return;\n }\n let proposedChanges = null;\n if (conf.isRec && conf.revisionTypes && conf.revisionTypes.length) {\n if (conf.revisionTypes.includes(\"addition\")) {\n if (conf.revisionTypes.includes(\"correction\")) {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-changes\"\n >proposed changes</a\n >, introducing substantive changes and new features since the previous\n Recommentation.`;\n } else {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-addition\"\n >proposed additions</a\n >, introducing new features since the previous Recommentation.`;\n }\n } else if (conf.revisionTypes.includes(\"correction\")) {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-correction\"\n >proposed corrections</a\n >.`;\n }\n }\n return html`<p>\n This document was published by ${conf.wgHTML} as ${conf.anOrA}\n ${conf.longStatus}. ${proposedChanges}\n ${conf.notYetRec\n ? \"This document is intended to become a W3C Recommendation.\"\n : \"\"}\n </p>`;\n}\n\nexport function linkToCommunity(conf, opts) {\n if (!conf.github && !conf.wgPublicList) {\n return;\n }\n return html`<p>\n ${conf.github\n ? html`\n <a href=\"${conf.issueBase}\">GitHub Issues</a> are preferred for\n discussion of this specification.\n `\n : \"\"}\n ${conf.wgPublicList\n ? html`\n ${conf.github && conf.wgPublicList\n ? \"Alternatively, you can send comments to our mailing list.\"\n : \"Comments regarding this document are welcome.\"}\n Please send them to\n <a href=\"${opts.mailToWGPublicListWithSubject}\"\n >${conf.wgPublicList}@w3.org</a\n >\n (<a href=\"${opts.mailToWGPublicListSubscription}\">subscribe</a>,\n <a\n href=\"${`https://lists.w3.org/Archives/Public/${conf.wgPublicList}/`}\"\n >archives</a\n >)${conf.subjectPrefix\n ? html` with <code>${conf.subjectPrefix}</code> at the start of your\n email's subject`\n : \"\"}.\n `\n : \"\"}\n </p>`;\n}\n","// @ts-check\nimport {\n l10n,\n linkToCommunity,\n renderPreview,\n renderPublicList,\n} from \"./sotd.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nexport default (conf, opts) => {\n return html`\n <h2>${l10n.sotd}</h2>\n ${conf.isPreview ? renderPreview(conf) : \"\"}\n <p>\n This specification was published by the\n <a href=\"${conf.wgURI}\">${conf.wg}</a>. It is not a W3C Standard nor is it\n on the W3C Standards Track.\n ${conf.isCGFinal\n ? html`\n Please note that under the\n <a href=\"https://www.w3.org/community/about/agreements/final/\"\n >W3C Community Final Specification Agreement (FSA)</a\n >\n other conditions apply.\n `\n : html`\n Please note that under the\n <a href=\"https://www.w3.org/community/about/agreements/cla/\"\n >W3C Community Contributor License Agreement (CLA)</a\n >\n there is a limited opt-out and other conditions apply.\n `}\n Learn more about\n <a href=\"https://www.w3.org/community/\"\n >W3C Community and Business Groups</a\n >.\n </p>\n ${!conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${!conf.github && conf.wgPublicList ? renderPublicList(conf, opts) : \"\"}\n ${conf.github ? linkToCommunity(conf, opts) : \"\"}\n ${conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${opts.additionalSections}\n `;\n};\n","// @ts-check\n// Module w3c/headers\n// Generate the headers material based on the provided configuration.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n// - shortName: the small name that is used after /TR/ in published reports (required)\n// - editors: an array of people editing the document (at least one is required). People\n// are defined using:\n// - name: the person's name (required)\n// - url: URI for the person's home page\n// - company: the person's company\n// - companyURL: the URI for the person's company\n// - mailto: the person's email\n// - note: a note on the person (e.g. former editor)\n// - authors: an array of people who are contributing authors of the document.\n// - formerEditors: an array of people that had earlier edited the document but no longer edit.\n// - subtitle: a subtitle for the specification\n// - publishDate: the date to use for the publication, default to document.lastModified, and\n// failing that to now. The format is YYYY-MM-DD or a Date object.\n// - previousPublishDate: the date on which the previous version was published.\n// - previousMaturity: the specStatus of the previous version\n// - errata: the URI of the errata document, if any\n// - alternateFormats: a list of alternate formats for the document, each of which being\n// defined by:\n// - uri: the URI to the alternate\n// - label: a label for the alternate\n// - lang: optional language\n// - type: optional MIME type\n// - logos: a list of logos to use instead of the W3C logo, each of which being defined by:\n// - src: the URI to the logo (target of <img src=>)\n// - alt: alternate text for the image (<img alt=>), defaults to \"Logo\" or \"Logo 1\", \"Logo 2\", ...\n// if src is not specified, this is the text of the \"logo\"\n// - height: optional height of the logo (<img height=>)\n// - width: optional width of the logo (<img width=>)\n// - url: the URI to the organization represented by the logo (target of <a href=>)\n// - id: optional id for the logo, permits custom CSS (wraps logo in <span id=>)\n// - each logo element must specify either src or alt\n// - testSuiteURI: the URI to the test suite, if any\n// - implementationReportURI: the URI to the implementation report, if any\n// - noRecTrack: set to true if this document is not intended to be on the Recommendation track\n// - edDraftURI: the URI of the Editor's Draft for this document, if any. Required if\n// specStatus is set to \"ED\".\n// - additionalCopyrightHolders: a copyright owner in addition to W3C (or the only one if specStatus\n// is unofficial)\n// - overrideCopyright: provides markup to completely override the copyright\n// - copyrightStart: the year from which the copyright starts running\n// - prevED: the URI of the previous Editor's Draft if it has moved\n// - prevRecShortname: the short name of the previous Recommendation, if the name has changed\n// - prevRecURI: the URI of the previous Recommendation if not directly generated from\n// prevRecShortname.\n// - wg: the name of the WG in charge of the document. This may be an array in which case wgURI\n// and wgPatentURI need to be arrays as well, of the same length and in the same order\n// - wgURI: the URI to the group's page, or an array of such\n// - wgPatentURI: the URI to the group's patent information page, or an array of such. NOTE: this\n// is VERY IMPORTANT information to provide and get right, do not just paste this without checking\n// that you're doing it right\n// - wgPublicList: the name of the mailing list where discussion takes place. Note that this cannot\n// be an array as it is assumed that there is a single list to discuss the document, even if it\n// is handled by multiple groups\n// - charterDisclosureURI: used for IGs (when publishing IG-NOTEs) to provide a link to the IPR commitment\n// defined in their charter.\n// - addPatentNote: used to add patent-related information to the SotD, for instance if there's an open\n// PAG on the document.\n// - thisVersion: the URI to the dated current version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - latestVersion: the URI to the latest (undated) version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - prevVersion: the URI to the previous (dated) version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - subjectPrefix: the string that is expected to be used as a subject prefix when posting to the mailing\n// list of the group.\n// - otherLinks: an array of other links that you might want in the header (e.g., link github, twitter, etc).\n// Example of usage: [{key: \"foo\", href:\"https://b\"}, {key: \"bar\", href:\"https://\"}].\n// Allowed values are:\n// - key: the key for the <dt> (e.g., \"Bug Tracker\"). Required.\n// - value: The value that will appear in the <dd> (e.g., \"GitHub\"). Optional.\n// - href: a URL for the value (e.g., \"https://foo.com/issues\"). Optional.\n// - class: a string representing CSS classes. Optional.\n// - license: can be one of the following\n// - \"cc-by\", which is experimentally available in some groups (but likely to be phased out).\n// Note that this is a dual licensing regime.\n// - \"cc0\", an extremely permissive license. It is only recommended if you are working on a document that is\n// intended to be pushed to the WHATWG.\n// - \"w3c-software\", a permissive and attributions license (but GPL-compatible).\n// - \"w3c-software-doc\", (default) the W3C Software and Document License\n// https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\nimport {\n ISODate,\n concatDate,\n docLink,\n htmlJoinAnd,\n showError,\n showWarning,\n} from \"../core/utils.js\";\nimport cgbgHeadersTmpl from \"./templates/cgbg-headers.js\";\nimport cgbgSotdTmpl from \"./templates/cgbg-sotd.js\";\nimport headersTmpl from \"./templates/headers.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { pub } from \"../core/pubsubhub.js\";\nimport sotdTmpl from \"./templates/sotd.js\";\n\nexport const name = \"w3c/headers\";\n\nconst W3CDate = new Intl.DateTimeFormat([\"en-AU\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n});\n\nconst status2maturity = {\n LS: \"WD\",\n LD: \"WD\",\n FPWD: \"WD\",\n LC: \"WD\",\n FPLC: \"WD\",\n \"FPWD-NOTE\": \"NOTE\",\n \"WD-NOTE\": \"WD\",\n \"LC-NOTE\": \"LC\",\n \"IG-NOTE\": \"NOTE\",\n \"WG-NOTE\": \"NOTE\",\n};\n\nconst status2rdf = {\n NOTE: \"w3p:NOTE\",\n WD: \"w3p:WD\",\n LC: \"w3p:LastCall\",\n CR: \"w3p:CR\",\n CRD: \"w3p:CRD\",\n PR: \"w3p:PR\",\n REC: \"w3p:REC\",\n PER: \"w3p:PER\",\n RSCND: \"w3p:RSCND\",\n};\nconst status2text = {\n NOTE: \"Working Group Note\",\n \"WG-NOTE\": \"Working Group Note\",\n \"CG-NOTE\": \"Co-ordination Group Note\",\n \"IG-NOTE\": \"Interest Group Note\",\n \"Member-SUBM\": \"Member Submission\",\n \"Team-SUBM\": \"Team Submission\",\n MO: \"Member-Only Document\",\n ED: \"Editor's Draft\",\n LS: \"Living Standard\",\n LD: \"Living Document\",\n FPWD: \"First Public Working Draft\",\n WD: \"Working Draft\",\n \"FPWD-NOTE\": \"Working Group Note\",\n \"WD-NOTE\": \"Working Draft\",\n \"LC-NOTE\": \"Working Draft\",\n FPLC: \"First Public and Last Call Working Draft\",\n LC: \"Last Call Working Draft\",\n CR: \"Candidate Recommendation\",\n CRD: \"Candidate Recommendation\",\n PR: \"Proposed Recommendation\",\n PER: \"Proposed Edited Recommendation\",\n REC: \"Recommendation\",\n RSCND: \"Rescinded Recommendation\",\n unofficial: \"Unofficial Draft\",\n base: \"Document\",\n finding: \"TAG Finding\",\n \"draft-finding\": \"Draft TAG Finding\",\n \"CG-DRAFT\": \"Draft Community Group Report\",\n \"CG-FINAL\": \"Final Community Group Report\",\n \"BG-DRAFT\": \"Draft Business Group Report\",\n \"BG-FINAL\": \"Final Business Group Report\",\n};\nconst status2long = {\n ...status2text,\n CR: \"Candidate Recommendation Snapshot\",\n CRD: \"Candidate Recommendation Draft\",\n \"FPWD-NOTE\": \"First Public Working Group Note\",\n \"LC-NOTE\": \"Last Call Working Draft\",\n};\nconst maybeRecTrack = [\"FPWD\", \"WD\"];\nconst recTrackStatus = [\"FPLC\", \"LC\", \"CR\", \"CRD\", \"PR\", \"PER\", \"REC\"];\nexport const cgStatus = [\"CG-DRAFT\", \"CG-FINAL\"];\nexport const bgStatus = [\"BG-DRAFT\", \"BG-FINAL\"];\nexport const cgbgStatus = [...cgStatus, ...bgStatus];\nconst noTrackStatus = [\n \"base\",\n ...cgStatus,\n ...bgStatus,\n \"draft-finding\",\n \"finding\",\n \"MO\",\n \"unofficial\",\n];\nconst precededByAn = [\"ED\", \"IG-NOTE\"];\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"w3c-software\",\n {\n name: \"W3C Software Notice and License\",\n short: \"W3C Software\",\n url:\n \"https://www.w3.org/Consortium/Legal/2002/copyright-software-20021231\",\n },\n ],\n [\n \"w3c-software-doc\",\n {\n name: \"W3C Software and Document Notice and License\",\n short: \"W3C Software and Document\",\n url:\n \"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n]);\n\nconst patentPolicies = [\"PP2017\", \"PP2020\"];\n\nconst baseLogo = Object.freeze({\n id: \"\",\n alt: \"\",\n href: \"\",\n src: \"\",\n height: \"48\",\n width: \"72\",\n});\n\n/**\n * @param {*} conf\n * @param {string} prop\n * @param {string | number | Date} fallbackDate\n */\nfunction validateDateAndRecover(conf, prop, fallbackDate = new Date()) {\n const date = conf[prop] ? new Date(conf[prop]) : new Date(fallbackDate);\n // if date is valid\n if (Number.isFinite(date.valueOf())) {\n const formattedDate = ISODate.format(date);\n return new Date(formattedDate);\n }\n const msg =\n `[\\`${prop}\\`](https://github.com/w3c/respec/wiki/${prop}) ` +\n `is not a valid date: \"${conf[prop]}\". Expected format 'YYYY-MM-DD'.`;\n showError(msg, name);\n return new Date(ISODate.format(new Date()));\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = `Missing required configuration: ${docLink(\"specStatus\")}.`;\n const hint = `Please select an appropriate status from ${docLink(\n \"specStatus\"\n )} based on your W3C group. If in doubt, use \\`\"unofficial\"\\`.`;\n showError(msg, name, { hint });\n }\n conf.isUnofficial = conf.specStatus === \"unofficial\";\n if (conf.isUnofficial && !Array.isArray(conf.logos)) {\n conf.logos = [];\n }\n if (conf.isUnofficial) {\n if (conf.license && !licenses.has(conf.license)) {\n const msg = `The ${docLink(\n \"license\"\n )} configuration option has an invalid value: \"\\`${\n conf.license\n }\\`\". Defaulting to \"cc-by\".`;\n const licensesKeys = [...licenses.keys()]\n .map(key => `\\`\"${key}\"\\``)\n .join(\", \");\n const hint = `Please explicitly set ${docLink(\n \"license\"\n )} to one of: ${licensesKeys}.`;\n showError(msg, name, { hint });\n conf.license = \"cc-by\";\n }\n // default it to cc-by\n if (conf.license === undefined) {\n conf.license = \"cc-by\";\n }\n }\n\n conf.isCCBY = conf.license === \"cc-by\";\n conf.isW3CSoftAndDocLicense = conf.license === \"w3c-software-doc\";\n if (!conf.isUnofficial && [\"cc-by\"].includes(conf.license)) {\n const msg = `You cannot use license \"\\`${conf.license}\\`\" with W3C Specs.`;\n const hint = `Please set ${docLink(\n \"license\"\n )} to \"w3c-software-doc\" instead.`;\n showError(msg, name, { hint });\n }\n conf.licenseInfo = licenses.get(conf.license);\n conf.isCGBG = cgbgStatus.includes(conf.specStatus);\n conf.isCGFinal = conf.isCGBG && conf.specStatus.endsWith(\"G-FINAL\");\n conf.isBasic = conf.specStatus === \"base\";\n conf.isRegular = !conf.isCGBG && !conf.isBasic;\n\n if (conf.isRegular && !conf.shortName) {\n const msg = \"Missing required configuration: `shortName`\";\n showError(msg, name);\n }\n if (conf.testSuiteURI) {\n const url = new URL(conf.testSuiteURI, location.href);\n const { host, pathname } = url;\n if (\n host === \"github.com\" &&\n pathname.startsWith(\"/w3c/web-platform-tests/\")\n ) {\n const msg =\n \"Web Platform Tests have moved to a new Github Organization at https://github.com/web-platform-tests. \";\n const hint =\n `Please update your ${docLink(\"testSuiteURI\")} to point to the ` +\n `new tests repository (e.g., https://github.com/web-platform-tests/wpt/tree/master/${conf.shortName} ).`;\n showWarning(msg, name, { hint });\n }\n }\n if (!conf.subtitle) conf.subtitle = \"\";\n conf.publishDate = validateDateAndRecover(\n conf,\n \"publishDate\",\n document.lastModified\n );\n conf.publishYear = conf.publishDate.getUTCFullYear();\n conf.publishHumanDate = W3CDate.format(conf.publishDate);\n conf.isNoTrack = noTrackStatus.includes(conf.specStatus);\n conf.isRecTrack = conf.noRecTrack\n ? false\n : recTrackStatus.concat(maybeRecTrack).includes(conf.specStatus);\n conf.isMemberSubmission = conf.specStatus === \"Member-SUBM\";\n if (conf.isMemberSubmission) {\n const memSubmissionLogo = {\n alt: \"W3C Member Submission\",\n href: \"https://www.w3.org/Submission/\",\n src: \"https://www.w3.org/Icons/member_subm-v.svg\",\n width: \"211\",\n };\n conf.logos.push({ ...baseLogo, ...memSubmissionLogo });\n }\n conf.isTeamSubmission = conf.specStatus === \"Team-SUBM\";\n if (conf.isTeamSubmission) {\n const teamSubmissionLogo = {\n alt: \"W3C Team Submission\",\n href: \"https://www.w3.org/TeamSubmission/\",\n src: \"https://www.w3.org/Icons/team_subm-v.svg\",\n width: \"211\",\n };\n conf.logos.push({ ...baseLogo, ...teamSubmissionLogo });\n }\n conf.isSubmission = conf.isMemberSubmission || conf.isTeamSubmission;\n conf.anOrA = precededByAn.includes(conf.specStatus) ? \"an\" : \"a\";\n conf.isTagFinding =\n conf.specStatus === \"finding\" || conf.specStatus === \"draft-finding\";\n\n if (conf.isRecTrack && !hasGitHubIssuesLink(conf)) {\n const msg = `Rec-track documents must link to Github issues from their head.`;\n const hint = `Please use the [\\`github\\`](https://respec.org/docs/#github) configuration option.`;\n showError(msg, name, { hint });\n }\n if (!conf.edDraftURI) {\n conf.edDraftURI = \"\";\n if (conf.specStatus === \"ED\") {\n const msg = \"Editor's Drafts should set edDraftURI.\";\n showWarning(msg, name);\n }\n }\n conf.maturity = status2maturity[conf.specStatus]\n ? status2maturity[conf.specStatus]\n : conf.specStatus;\n let publishSpace = \"TR\";\n if (conf.specStatus === \"Member-SUBM\") publishSpace = \"Submission\";\n else if (conf.specStatus === \"Team-SUBM\") publishSpace = \"TeamSubmission\";\n if (conf.isRegular)\n conf.thisVersion = `https://www.w3.org/${publishSpace}/${conf.publishDate.getUTCFullYear()}/${\n conf.maturity\n }-${conf.shortName}-${concatDate(conf.publishDate)}/`;\n if (conf.specStatus === \"ED\") conf.thisVersion = conf.edDraftURI;\n const skipLatestVersion =\n conf.specStatus === \"ED\" && conf.latestVersion === null;\n if (conf.isRegular && !skipLatestVersion)\n conf.latestVersion = `https://www.w3.org/${publishSpace}/${conf.shortName}/`;\n if (conf.isTagFinding) {\n conf.latestVersion = `https://www.w3.org/2001/tag/doc/${conf.shortName}`;\n conf.thisVersion = `${conf.latestVersion}-${ISODate.format(\n conf.publishDate\n )}`;\n }\n if (conf.previousPublishDate) {\n if (!conf.previousMaturity && !conf.isTagFinding) {\n const msg = \"`previousPublishDate` is set, but not `previousMaturity`.\";\n showError(msg, name);\n }\n\n conf.previousPublishDate = validateDateAndRecover(\n conf,\n \"previousPublishDate\"\n );\n\n const pmat = status2maturity[conf.previousMaturity]\n ? status2maturity[conf.previousMaturity]\n : conf.previousMaturity;\n if (conf.isTagFinding) {\n conf.prevVersion = `${conf.latestVersion}-${ISODate.format(\n conf.previousPublishDate\n )}`;\n } else if (conf.isCGBG) {\n conf.prevVersion = conf.prevVersion || \"\";\n } else if (conf.isBasic) {\n conf.prevVersion = \"\";\n } else {\n conf.prevVersion = `https://www.w3.org/TR/${conf.previousPublishDate.getUTCFullYear()}/${pmat}-${\n conf.shortName\n }-${concatDate(conf.previousPublishDate)}/`;\n }\n } else {\n if (\n !conf.specStatus.endsWith(\"NOTE\") &&\n conf.specStatus !== \"FPWD\" &&\n conf.specStatus !== \"FPLC\" &&\n conf.specStatus !== \"ED\" &&\n !conf.noRecTrack &&\n !conf.isNoTrack &&\n !conf.isSubmission\n ) {\n const msg = \"Document on track but no previous version.\";\n const hint =\n \"Add [`previousMaturity`](https://respec.org/docs/#previousMaturity) \" +\n \"and [`previousPublishDate`](https://respec.org/docs/#previousPublishDate) to ReSpec's config.\";\n showError(msg, name, { hint });\n }\n if (!conf.prevVersion) conf.prevVersion = \"\";\n }\n if (conf.prevRecShortname && !conf.prevRecURI)\n conf.prevRecURI = `https://www.w3.org/TR/${conf.prevRecShortname}`;\n const peopCheck = function (it) {\n if (!it.name) {\n const msg = \"All authors and editors must have a `name` property.\";\n const hint =\n \"See [Person](https://respec.org/docs/#person) configuration for available options.\";\n\n showError(msg, name, { hint });\n }\n if (it.orcid) {\n try {\n it.orcid = normalizeOrcid(it.orcid);\n } catch (e) {\n const msg = `\"${it.orcid}\" is not an ORCID. ${e.message}`;\n showError(msg, name);\n // A failed orcid link could link to something outside of orcid,\n // which would be misleading.\n delete it.orcid;\n }\n }\n };\n if (!conf.formerEditors) conf.formerEditors = [];\n if (conf.editors) {\n conf.editors.forEach(peopCheck);\n // Move any editors with retiredDate to formerEditors.\n for (let i = 0; i < conf.editors.length; i++) {\n const editor = conf.editors[i];\n if (\"retiredDate\" in editor) {\n conf.formerEditors.push(editor);\n conf.editors.splice(i--, 1);\n }\n }\n }\n if (!conf.editors || conf.editors.length === 0) {\n const msg = \"At least one editor is required\";\n showError(msg, name);\n }\n if (conf.formerEditors.length) {\n conf.formerEditors.forEach(peopCheck);\n }\n if (conf.authors) {\n conf.authors.forEach(peopCheck);\n }\n conf.multipleEditors = conf.editors && conf.editors.length > 1;\n conf.multipleFormerEditors = conf.formerEditors.length > 1;\n conf.multipleAuthors = conf.authors && conf.authors.length > 1;\n (conf.alternateFormats || []).forEach(it => {\n if (!it.uri || !it.label) {\n const msg = \"All alternate formats must have a uri and a label.\";\n showError(msg, name);\n }\n });\n if (conf.copyrightStart && conf.copyrightStart == conf.publishYear)\n conf.copyrightStart = \"\";\n conf.longStatus = status2long[conf.specStatus];\n conf.textStatus = status2text[conf.specStatus];\n if (status2rdf[conf.specStatus]) {\n conf.rdfStatus = status2rdf[conf.specStatus];\n }\n conf.showThisVersion = !conf.isNoTrack || conf.isTagFinding;\n conf.showPreviousVersion =\n conf.specStatus !== \"FPWD\" &&\n conf.specStatus !== \"FPLC\" &&\n conf.specStatus !== \"ED\" &&\n !conf.isNoTrack &&\n !conf.isSubmission;\n if (conf.specStatus.endsWith(\"NOTE\") && !conf.prevVersion)\n conf.showPreviousVersion = false;\n if (conf.isTagFinding)\n conf.showPreviousVersion = conf.previousPublishDate ? true : false;\n conf.notYetRec = conf.isRecTrack && conf.specStatus !== \"REC\";\n conf.isRec = conf.isRecTrack && conf.specStatus === \"REC\";\n if (conf.isRec && !conf.errata) {\n const msg = \"Recommendations must have an errata link.\";\n const hint =\n \"Add an [`errata`](https://respec.org/docs/#errata) URL to your respecConfig.\";\n showError(msg, name, { hint });\n }\n conf.prependW3C = !conf.isUnofficial;\n conf.isED = conf.specStatus === \"ED\";\n conf.isCR = conf.specStatus === \"CR\" || conf.specStatus === \"CRD\";\n conf.isCRDraft = conf.specStatus === \"CRD\";\n conf.isPR = conf.specStatus === \"PR\";\n conf.isPER = conf.specStatus === \"PER\";\n conf.isMO = conf.specStatus === \"MO\";\n conf.isNote = [\"FPWD-NOTE\", \"WG-NOTE\"].includes(conf.specStatus);\n conf.isIGNote = conf.specStatus === \"IG-NOTE\";\n conf.dashDate = ISODate.format(conf.publishDate);\n conf.publishISODate = conf.publishDate.toISOString();\n conf.shortISODate = ISODate.format(conf.publishDate);\n validatePatentPolicies(conf);\n\n if (conf.hasOwnProperty(\"wgPatentURI\") && !Array.isArray(conf.wgPatentURI)) {\n Object.defineProperty(conf, \"wgId\", {\n get() {\n // it's always at \"pp-impl\" + 1\n const urlParts = this.wgPatentURI.split(\"/\");\n const pos = urlParts.findIndex(item => item === \"pp-impl\") + 1;\n return urlParts[pos] || \"\";\n },\n });\n } else {\n conf.wgId = conf.wgId ? conf.wgId : \"\";\n }\n // configuration done - yay!\n\n const options = {\n get multipleAlternates() {\n return conf.alternateFormats && conf.alternateFormats.length > 1;\n },\n get alternatesHTML() {\n return (\n conf.alternateFormats &&\n htmlJoinAnd(conf.alternateFormats, alt => {\n const lang = alt.hasOwnProperty(\"lang\") && alt.lang ? alt.lang : null;\n const type = alt.hasOwnProperty(\"type\") && alt.type ? alt.type : null;\n return html`<a\n rel=\"alternate\"\n href=\"${alt.uri}\"\n hreflang=\"${lang}\"\n type=\"${type}\"\n >${alt.label}</a\n >`;\n })\n );\n },\n };\n\n // insert into document\n const header = (conf.isCGBG ? cgbgHeadersTmpl : headersTmpl)(conf, options);\n document.body.prepend(header);\n document.body.classList.add(\"h-entry\");\n\n // handle SotD\n const sotd =\n document.getElementById(\"sotd\") || document.createElement(\"section\");\n if ((conf.isCGBG || !conf.isNoTrack || conf.isTagFinding) && !sotd.id) {\n const msg =\n \"A custom SotD paragraph is required for your type of document.\";\n showError(msg, name);\n }\n sotd.id = sotd.id || \"sotd\";\n sotd.classList.add(\"introductory\");\n // NOTE:\n // When arrays, wg and wgURI have to be the same length (and in the same order).\n // Technically wgURI could be longer but the rest is ignored.\n // However wgPatentURI can be shorter. This covers the case where multiple groups\n // publish together but some aren't used for patent policy purposes (typically this\n // happens when one is foolish enough to do joint work with the TAG). In such cases,\n // the groups whose patent policy applies need to be listed first, and wgPatentURI\n // can be shorter — but it still needs to be an array.\n const wgPotentialArray = [conf.wg, conf.wgURI, conf.wgPatentURI];\n if (\n wgPotentialArray.some(item => Array.isArray(item)) &&\n !wgPotentialArray.every(item => Array.isArray(item))\n ) {\n const msg =\n \"If one of '`wg`', '`wgURI`', or '`wgPatentURI`' is an array, they all have to be.\";\n showError(msg, name);\n }\n if (conf.isCGBG && !conf.wg) {\n const msg =\n \"[`wg`](https://github.com/w3c/respec/wiki/wg)\" +\n \" configuration option is required for this kind of document.\";\n showError(msg, name);\n }\n if (Array.isArray(conf.wg)) {\n conf.multipleWGs = conf.wg.length > 1;\n conf.wgHTML = htmlJoinAnd(conf.wg, (wg, idx) => {\n return html`the <a href=\"${conf.wgURI[idx]}\">${wg}</a>`;\n });\n const pats = [];\n for (let i = 0, n = conf.wg.length; i < n; i++) {\n pats.push(\n html`a\n <a href=\"${conf.wgPatentURI[i]}\" rel=\"disclosure\"\n >public list of any patent disclosures (${conf.wg[i]})</a\n >`\n );\n }\n conf.wgPatentHTML = htmlJoinAnd(pats);\n } else {\n conf.multipleWGs = false;\n if (conf.wg) {\n conf.wgHTML = html`the <a href=\"${conf.wgURI}\">${conf.wg}</a>`;\n }\n }\n if (conf.specStatus === \"PR\" && !conf.crEnd) {\n const msg =\n '`specStatus` is \"PR\" but no `crEnd` is specified (needed to indicate end of previous CR).';\n showError(msg, name);\n }\n\n if (conf.specStatus === \"CR\" && !conf.crEnd) {\n const msg =\n '`specStatus` is \"CR\", but no `crEnd` is specified in Respec config.';\n showError(msg, name);\n }\n conf.crEnd = validateDateAndRecover(conf, \"crEnd\");\n conf.humanCREnd = W3CDate.format(conf.crEnd);\n\n if (conf.specStatus === \"PR\" && !conf.prEnd) {\n const msg = `\\`specStatus\\` is \"PR\" but no \\`prEnd\\` is specified.`;\n showError(msg, name);\n }\n conf.prEnd = validateDateAndRecover(conf, \"prEnd\");\n conf.humanPREnd = W3CDate.format(conf.prEnd);\n\n if (conf.specStatus === \"PER\" && !conf.perEnd) {\n const msg = \"Status is PER but no perEnd is specified\";\n showError(msg, name);\n }\n conf.perEnd = validateDateAndRecover(conf, \"perEnd\");\n conf.humanPEREnd = W3CDate.format(conf.perEnd);\n\n const revisionTypes = [\"addition\", \"correction\"];\n if (\n conf.specStatus === \"REC\" &&\n conf.revisionTypes &&\n conf.revisionTypes.length > 0\n ) {\n const unknownRevisionType = conf.revisionTypes.find(\n x => !revisionTypes.includes(x)\n );\n if (unknownRevisionType) {\n const msg = `\\`specStatus\\` is \"REC\" with unknown revision type '${unknownRevisionType}'`;\n showError(msg, name);\n }\n if (conf.revisionTypes.includes(\"addition\") && !conf.updateableRec) {\n const msg = `\\`specStatus\\` is \"REC\" with proposed additions but the Rec is not marked as a allowing new features.`;\n showError(msg, name);\n }\n }\n\n if (\n conf.specStatus === \"REC\" &&\n conf.updateableRec &&\n conf.revisionTypes &&\n conf.revisionTypes.length > 0 &&\n !conf.revisedRecEnd\n ) {\n const msg = `\\`specStatus\\` is \"REC\" with proposed corrections or additions but no \\`revisedRecEnd\\` is specified.`;\n showError(msg, name);\n }\n conf.revisedRecEnd = validateDateAndRecover(conf, \"revisedRecEnd\");\n conf.humanRevisedRecEnd = W3CDate.format(conf.revisedRecEnd);\n\n conf.recNotExpected =\n conf.noRecTrack || conf.recNotExpected\n ? true\n : !conf.isRecTrack &&\n conf.maturity == \"WD\" &&\n conf.specStatus !== \"FPWD-NOTE\";\n if (conf.noRecTrack && recTrackStatus.includes(conf.specStatus)) {\n const msg = `Document configured as [\\`noRecTrack\\`](https://github.com/w3c/respec/wiki/noRecTrack), but its status (\"${conf.specStatus}\") puts it on the W3C Rec Track.`;\n const hint = `Status cannot be any of: ${recTrackStatus.join(\", \")}.`;\n showError(msg, name, { hint });\n }\n if (conf.isIGNote && !conf.charterDisclosureURI) {\n const msg =\n \"IG-NOTEs must link to charter's disclosure section using `charterDisclosureURI`.\";\n showError(msg, name);\n }\n if (!sotd.classList.contains(\"override\")) {\n html.bind(sotd)`${populateSoTD(conf, sotd)}`;\n }\n\n if (!conf.implementationReportURI && conf.isCR) {\n const msg =\n \"CR documents must have an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).\";\n showError(msg, name);\n }\n if (!conf.implementationReportURI && conf.isPR) {\n const msg =\n \"PR documents should include an \" +\n \" [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).\";\n showWarning(msg, name);\n }\n\n // Requested by https://github.com/w3c/respec/issues/504\n // Makes a record of a few auto-generated things.\n pub(\"amend-user-config\", {\n publishISODate: conf.publishISODate,\n generatedSubtitle: `${conf.longStatus} ${conf.publishHumanDate}`,\n });\n}\n\nfunction validatePatentPolicies(conf) {\n if (!conf.hasOwnProperty(\"wgPatentPolicy\")) return;\n\n const policies = new Set([].concat(conf.wgPatentPolicy));\n if (\n policies.size &&\n ![...policies].every(policy => patentPolicies.includes(policy))\n ) {\n const msg = `Invalid [\\`wgPatentPolicy\\`](https://respec.org/docs#wgPatentPolicy) value: \"${conf.wgPatentPolicy}\".`;\n const hint = `Please use one of: ${patentPolicies\n .map(p => `\\`${p}\\``)\n .join(\", \")} .`;\n showError(msg, name, { hint });\n }\n if (policies.size !== 1) {\n const msg =\n \"When collaborating across multiple groups, they must use the same patent policy.\";\n const hint = `Please check the patent policies of each group. The patent policies were: ${[\n ...policies,\n ].join(\", \")}.`;\n showError(msg, name, { hint });\n }\n // We take the first policy\n conf.wgPatentPolicy = [...policies][0];\n}\n\n/**\n * @param {*} conf\n * @param {HTMLElement} sotd\n */\nfunction populateSoTD(conf, sotd) {\n const options = {\n ...collectSotdContent(sotd, conf),\n\n get mailToWGPublicList() {\n return `mailto:${conf.wgPublicList}@w3.org`;\n },\n get mailToWGPublicListWithSubject() {\n const fragment = conf.subjectPrefix\n ? `?subject=${encodeURIComponent(conf.subjectPrefix)}`\n : \"\";\n return this.mailToWGPublicList + fragment;\n },\n get mailToWGPublicListSubscription() {\n return `mailto:${conf.wgPublicList}-request@w3.org?subject=subscribe`;\n },\n };\n const template = conf.isCGBG ? cgbgSotdTmpl : sotdTmpl;\n return template(conf, options);\n}\n\n/**\n * @param {HTMLElement} sotd\n */\nfunction collectSotdContent(sotd, { isTagFinding = false }) {\n const sotdClone = sotd.cloneNode(true);\n const additionalContent = document.createDocumentFragment();\n // we collect everything until we hit a section,\n // that becomes the custom content.\n while (sotdClone.hasChildNodes()) {\n if (\n isElement(sotdClone.firstChild) &&\n sotdClone.firstChild.localName === \"section\"\n ) {\n break;\n }\n additionalContent.appendChild(sotdClone.firstChild);\n }\n if (isTagFinding && !additionalContent.hasChildNodes()) {\n const msg = `ReSpec does not support automated SotD generation for TAG findings.`;\n const hint = `Please add the prerequisite content in the 'sotd' section.`;\n showWarning(msg, name, { hint });\n }\n return {\n additionalContent,\n // Whatever sections are left, we throw at the end.\n additionalSections: sotdClone.childNodes,\n };\n}\n\n/**\n * @param {string} orcid Either an ORCID URL or just the 16-digit ID which comes after the /\n * @return {string} the full ORCID URL. Throws an error if the ID is invalid.\n */\nfunction normalizeOrcid(orcid) {\n const orcidUrl = new URL(orcid, \"https://orcid.org/\");\n if (orcidUrl.origin !== \"https://orcid.org\") {\n throw new Error(\n `The origin should be \"https://orcid.org\", not \"${orcidUrl.origin}\".`\n );\n }\n\n // trailing slash would mess up checksum\n const orcidId = orcidUrl.pathname.slice(1).replace(/\\/$/, \"\");\n if (!/^\\d{4}-\\d{4}-\\d{4}-\\d{3}(\\d|X)$/.test(orcidId)) {\n throw new Error(\n `ORCIDs have the format \"1234-1234-1234-1234\", not \"${orcidId}\"`\n );\n }\n\n // calculate checksum as per https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier\n const lastDigit = orcidId[orcidId.length - 1];\n const remainder = orcidId\n .split(\"\")\n .slice(0, -1)\n .filter(c => /\\d/.test(c))\n .map(Number)\n .reduce((acc, c) => (acc + c) * 2, 0);\n const lastDigitInt = (12 - (remainder % 11)) % 11;\n const lastDigitShould = lastDigitInt === 10 ? \"X\" : String(lastDigitInt);\n if (lastDigit !== lastDigitShould) {\n throw new Error(`\"${orcidId}\" has an invalid checksum.`);\n }\n\n return orcidUrl.href;\n}\n\n/**\n * @param {Node} node\n * @return {node is Element}\n */\nfunction isElement(node) {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\nfunction hasGitHubIssuesLink(conf) {\n return (\n conf.github ||\n (conf.otherLinks &&\n conf.otherLinks.find(linkGroup =>\n linkGroup.data.find(\n l =>\n l.href &&\n l.href.toString().match(/^https:\\/\\/github\\.com\\/.*\\/issues/)\n )\n ))\n );\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Linter rule \"wpt-tests-exist\".\n * Warns about nonexistent web platform tests.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { showWarning } from \"../utils.js\";\n\nconst name = \"wpt-tests-exist\";\n\nconst meta = {\n en: {\n description: \"Non-existent Web Platform Tests\",\n howToFix: \"Please fix the tests mentioned.\",\n help: \"See developer console.\",\n },\n};\n\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {Promise<import(\"../LinterRule\").LinterResult>}\n */\nasync function linterFunction(conf, doc) {\n const filesInWPT = await getFilesInWPT(conf.testSuiteURI, conf.githubAPI);\n if (!filesInWPT) {\n return;\n }\n\n const offendingElements = [];\n const offendingTests = new Set();\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = doc.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n for (const elem of testables) {\n const tests = elem.dataset.tests\n .split(/,/gm)\n .map(test => test.trim().split(\"#\")[0])\n .filter(test => test);\n\n const missingTests = tests.filter(test => !filesInWPT.has(test));\n if (missingTests.length) {\n offendingElements.push(elem);\n missingTests.forEach(test => offendingTests.add(test));\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n\n const missingTests = [...offendingTests].map(test => `\\`${test}\\``);\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n description: `${meta[lang].description}: ${missingTests.join(\", \")}.`,\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\n/**\n * @param {string} testSuiteURI\n * @param {string} githubAPIBase\n */\nasync function getFilesInWPT(testSuiteURI, githubAPIBase) {\n let wptDirectory;\n try {\n const testSuiteURL = new URL(testSuiteURI);\n if (\n testSuiteURL.pathname.startsWith(\"/web-platform-tests/wpt/tree/master/\")\n ) {\n const re = /web-platform-tests\\/wpt\\/tree\\/master\\/(.+)/;\n wptDirectory = testSuiteURL.pathname.match(re)[1].replace(/\\//g, \"\");\n } else {\n wptDirectory = testSuiteURL.pathname.replace(/\\//g, \"\");\n }\n } catch (error) {\n const msg = \"Failed to parse WPT directory from testSuiteURI\";\n showWarning(msg, `linter/${name}`);\n console.error(error);\n return null;\n }\n\n const url = new URL(\"web-platform-tests/wpt/files\", `${githubAPIBase}/`);\n url.searchParams.set(\"path\", wptDirectory);\n\n const response = await fetch(url);\n if (!response.ok) {\n const error = await response.text();\n const msg =\n \"Failed to fetch files from WPT repository. \" +\n `Request failed with error: ${error} (${response.status})`;\n showWarning(msg, `linter/${name}`);\n return null;\n }\n /** @type {{ entries: string[] }} */\n const { entries } = await response.json();\n const files = entries.filter(entry => !entry.endsWith(\"/\"));\n return new Set(files);\n}\n","// @ts-check\n/**\n * Sets the defaults for W3C specs\n */\nexport const name = \"w3c/defaults\";\nimport { bgStatus, cgStatus, cgbgStatus } from \"./headers.js\";\nimport { docLink, showError } from \"../core/utils.js\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\nimport { rule as wptTestsExist } from \"../core/linter-rules/wpt-tests-exist.js\";\n\nlinter.register(privsecSectionRule, wptTestsExist);\n\nconst w3cLogo = {\n src: \"https://www.w3.org/StyleSheets/TR/2016/logos/W3C\",\n alt: \"W3C\",\n height: 48,\n width: 72,\n url: \"https://www.w3.org/\",\n};\n\nconst w3cDefaults = {\n lint: {\n \"privsec-section\": true,\n \"wpt-tests-exist\": false,\n },\n doJsonLd: false,\n logos: [],\n xref: true,\n};\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...w3cDefaults.lint,\n ...conf.lint,\n };\n\n if (conf.specStatus && conf.specStatus.toLowerCase() !== \"unofficial\") {\n w3cDefaults.logos.push(w3cLogo);\n if (!conf.hasOwnProperty(\"license\")) {\n w3cDefaults.license = \"w3c-software-doc\";\n }\n }\n\n Object.assign(conf, {\n ...coreDefaults,\n ...w3cDefaults,\n ...conf,\n lint,\n });\n\n if (conf.groupType && conf.specStatus) {\n validateStatusForGroup(conf);\n }\n}\n\nfunction validateStatusForGroup(conf) {\n const { specStatus, groupType } = conf;\n switch (groupType) {\n case \"cg\": {\n if (![...cgbgStatus, \"unofficial\"].includes(specStatus)) {\n const msg = `W3C Community Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please use one of: ${toMDCode(\n cgStatus\n )}. Automatically falling back to \\`\"CG-DRAFT\"\\`.`;\n showError(msg, name, { hint });\n conf.specStatus = \"CG-DRAFT\";\n }\n break;\n }\n case \"bg\": {\n if (![...bgStatus, \"unofficial\"].includes(specStatus)) {\n const msg = `W3C Business Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please use one of: ${toMDCode(\n bgStatus\n )}. Automatically falling back to \\`\"BG-DRAFT\"\\`.`;\n showError(msg, name, { hint });\n conf.specStatus = \"BG-DRAFT\";\n }\n break;\n }\n case \"wg\": {\n if (cgbgStatus.includes(specStatus)) {\n const msg = `W3C Working Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please see ${docLink(\n \"specStatus\"\n )} for appropriate values for this type of group.`;\n showError(msg, name, { hint });\n }\n break;\n }\n }\n}\n\nfunction toMDCode(list) {\n return list.map(item => `\\`\"${item}\"\\``).join(\", \");\n}\n","/* ReSpec specific CSS */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n@keyframes pop {\n 0% {\n transform: scale(1, 1);\n }\n 25% {\n transform: scale(1.25, 1.25);\n opacity: 0.75;\n }\n 100% {\n transform: scale(1, 1);\n }\n}\n\n/* Override code highlighter background */\n.hljs {\n background: transparent !important;\n}\n\n/* --- INLINES --- */\nh1 abbr,\nh2 abbr,\nh3 abbr,\nh4 abbr,\nh5 abbr,\nh6 abbr,\na abbr {\n border: none;\n}\n\ndfn {\n font-weight: bold;\n}\n\na.internalDFN {\n color: inherit;\n border-bottom: 1px solid #99c;\n text-decoration: none;\n}\n\na.externalDFN {\n color: inherit;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\na.bibref {\n text-decoration: none;\n}\n\n.respec-offending-element:target {\n animation: pop 0.25s ease-in-out 0s 1;\n}\n\n.respec-offending-element,\na[href].respec-offending-element {\n text-decoration: red wavy underline;\n}\n@supports not (text-decoration: red wavy underline) {\n .respec-offending-element:not(pre) {\n display: inline-block;\n }\n .respec-offending-element {\n /* Red squiggly line */\n background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=)\n bottom repeat-x;\n }\n}\n\n#references :target {\n background: #eaf3ff;\n animation: pop 0.4s ease-in-out 0s 1;\n}\n\ncite .bibref {\n font-style: normal;\n}\n\ncode {\n color: #c63501;\n}\n\nth code {\n color: inherit;\n}\n\na[href].orcid {\n padding-left: 4px;\n padding-right: 4px;\n}\n\na[href].orcid > svg {\n margin-bottom: -2px;\n}\n\n/* --- TOC --- */\n\n.toc a,\n.tof a {\n text-decoration: none;\n}\n\na .secno,\na .figno {\n color: #000;\n}\n\nul.tof,\nol.tof {\n list-style: none outside none;\n}\n\n.caption {\n margin-top: 0.5em;\n font-style: italic;\n}\n\n/* --- TABLE --- */\n\ntable.simple {\n border-spacing: 0;\n border-collapse: collapse;\n border-bottom: 3px solid #005a9c;\n}\n\n.simple th {\n background: #005a9c;\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th a {\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th[scope=\"row\"] {\n background: inherit;\n color: inherit;\n border-top: 1px solid #ddd;\n}\n\n.simple td {\n padding: 3px 10px;\n border-top: 1px solid #ddd;\n}\n\n.simple tr:nth-child(even) {\n background: #f0f6ff;\n}\n\n/* --- DL --- */\n\n.section dd > p:first-child {\n margin-top: 0;\n}\n\n.section dd > p:last-child {\n margin-bottom: 0;\n}\n\n.section dd {\n margin-bottom: 1em;\n}\n\n.section dl.attrs dd,\n.section dl.eldef dd {\n margin-bottom: 0;\n}\n\n#issue-summary > ul {\n column-count: 2;\n}\n\n#issue-summary li {\n list-style: none;\n display: inline-block;\n}\n\ndetails.respec-tests-details {\n margin-left: 1em;\n display: inline-block;\n vertical-align: top;\n}\n\ndetails.respec-tests-details > * {\n padding-right: 2em;\n}\n\ndetails.respec-tests-details[open] {\n z-index: 999999;\n position: absolute;\n border: thin solid #cad3e2;\n border-radius: 0.3em;\n background-color: white;\n padding-bottom: 0.5em;\n}\n\ndetails.respec-tests-details[open] > summary {\n border-bottom: thin solid #cad3e2;\n padding-left: 1em;\n margin-bottom: 1em;\n line-height: 2em;\n}\n\ndetails.respec-tests-details > ul {\n width: 100%;\n margin-top: -0.3em;\n}\n\ndetails.respec-tests-details > li {\n padding-left: 1em;\n}\n\na[href].self-link:hover {\n opacity: 1;\n text-decoration: none;\n background-color: transparent;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n position: relative;\n}\n\naside.example .marker > a.self-link {\n color: inherit;\n}\n\nh2 > a.self-link,\nh3 > a.self-link,\nh4 > a.self-link,\nh5 > a.self-link,\nh6 > a.self-link {\n border: none;\n color: inherit;\n font-size: 83%;\n height: 2em;\n left: -1.6em;\n opacity: 0.5;\n position: absolute;\n text-align: center;\n text-decoration: none;\n top: 0;\n transition: opacity 0.2s;\n width: 2em;\n}\n\nh2 > a.self-link::before,\nh3 > a.self-link::before,\nh4 > a.self-link::before,\nh5 > a.self-link::before,\nh6 > a.self-link::before {\n content: \"§\";\n display: block;\n}\n\n@media (max-width: 767px) {\n dd {\n margin-left: 0;\n }\n\n /* Don't position self-link in headings off-screen */\n h2 > a.self-link,\n h3 > a.self-link,\n h4 > a.self-link,\n h5 > a.self-link,\n h6 > a.self-link {\n left: auto;\n top: auto;\n }\n}\n\n@media print {\n .removeOnSave {\n display: none;\n }\n}\n`;\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport css from \"../styles/respec.css.js\";\n\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = css;\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport function run(conf) {\n if (conf.noReSpecCSS) {\n styleElement.remove();\n }\n}\n","// @ts-check\n// Module w3c/style\n// Inserts a link to the appropriate W3C style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"w3c/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n if (location.hash) {\n script.addEventListener(\n \"load\",\n () => {\n window.location.href = location.hash;\n },\n { once: true }\n );\n }\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createBaseStyle() {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = \"https://www.w3.org/StyleSheets/TR/2016/base.css\";\n link.classList.add(\"removeOnSave\");\n return link;\n}\n\nfunction selectStyleVersion(styleVersion) {\n let version = \"\";\n switch (styleVersion) {\n case null:\n case true:\n version = \"2016\";\n break;\n default:\n if (styleVersion && !isNaN(styleVersion)) {\n version = styleVersion.toString().trim();\n }\n }\n return version;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C styles and scripts.\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preload\", // all specs include on base.css.\n href: \"https://www.w3.org/StyleSheets/TR/2016/base.css\",\n as: \"style\",\n },\n {\n hint: \"preload\", // all specs show the logo.\n href: \"https://www.w3.org/StyleSheets/TR/2016/logos/W3C\",\n as: \"image\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// Opportunistically apply base style\nelements.appendChild(createBaseStyle());\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\nfunction styleMover(linkURL) {\n return exportDoc => {\n const w3cStyle = exportDoc.querySelector(`head link[href=\"${linkURL}\"]`);\n exportDoc.querySelector(\"head\").append(w3cStyle);\n };\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'base'.\";\n conf.specStatus = \"base\";\n showWarning(msg, name);\n }\n\n let styleFile = \"W3C-\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"CG-DRAFT\":\n case \"CG-FINAL\":\n case \"BG-DRAFT\":\n case \"BG-FINAL\":\n styleFile = conf.specStatus.toLowerCase();\n break;\n case \"FPWD\":\n case \"LC\":\n case \"WD-NOTE\":\n case \"LC-NOTE\":\n styleFile += \"WD\";\n break;\n case \"WG-NOTE\":\n case \"FPWD-NOTE\":\n styleFile += \"WG-NOTE.css\";\n break;\n case \"UNOFFICIAL\":\n styleFile += \"UD\";\n break;\n case \"FINDING\":\n case \"FINDING-DRAFT\":\n case \"BASE\":\n styleFile = \"base.css\";\n break;\n default:\n styleFile += conf.specStatus;\n }\n\n // Select between released styles and experimental style.\n const version = selectStyleVersion(conf.useExperimentalStyles || \"2016\");\n // Attach W3C fixup script after we are done.\n if (version && !conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, version);\n },\n { once: true }\n );\n }\n const finalVersionPath = version ? `${version}/` : \"\";\n const finalStyleURL = `https://www.w3.org/StyleSheets/TR/${finalVersionPath}${styleFile}`;\n linkCSS(document, finalStyleURL);\n // Make sure the W3C stylesheet is the last stylesheet, as required by W3C Pub Rules.\n const moveStyle = styleMover(finalStyleURL);\n sub(\"beforesave\", moveStyle);\n}\n","// @ts-check\n// Module w3c/l10n\n// Looks at the lang attribute on the root element and uses it to manage the config.l10n object so\n// that other parts of the system can localise their text\nimport { html } from \"../core/import-maps.js\";\nimport { l10n } from \"../core/l10n.js\";\nexport const name = \"w3c/l10n\";\nconst additions = {\n en: {\n status_at_publication: html`This section describes the status of this\n document at the time of its publication. Other documents may supersede\n this document. A list of current W3C publications and the latest revision\n of this technical report can be found in the\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> at\n https://www.w3.org/TR/.`,\n },\n ko: {\n status_at_publication: html`이 부분은 현재 문서의 발행 당시 상태에 대해\n 기술합니다. 다른 문서가 이 문서를 대체할 수 있습니다. W3C 발행 문서의 최신\n 목록 및 테크니컬 리포트 최신판을 https://www.w3.org/TR/ 의\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> 에서\n 열람할 수 있습니다.`,\n },\n zh: {\n status_at_publication: html`本章节描述了本文档的发布状态。其它更新版本可能会覆盖本文档。W3C的文档列\n 表和最新版本可通过<a href=\"https://www.w3.org/TR/\">W3C技术报告</a\n >索引访问。`,\n },\n ja: {\n status_at_publication: html`この節には、公開時点でのこの文書の位置づけが記されている。他の文書によって置き換えられる可能性がある。現時点でのW3Cの発行文書とこのテクニカルレポートの最新版は、下記から参照できる。\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a>\n (https://www.w3.org/TR/)`,\n },\n es: {\n status_at_publication: html`Esta sección describe el estado del presente\n documento al momento de su publicación. El presente documento puede ser\n remplazado por otros. Una lista de las publicaciones actuales del W3C y la\n última revisión del presente informe técnico puede hallarse en\n http://www.w3.org/TR/\n <a href=\"https://www.w3.org/TR/\">el índice de informes técnicos</a> del\n W3C.`,\n },\n de: {\n status_at_publication: html`Dieser Abschnitt beschreibt den Status des\n Dokuments zum Zeitpunkt der Publikation. Neuere Dokumente können dieses\n Dokument obsolet machen. Eine Liste der aktuellen Publikatinen des W3C und\n die aktuellste Fassung dieser Spezifikation kann im\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> unter\n https://www.w3.org/TR/ abgerufen werden.`,\n },\n};\n\nObject.keys(additions).forEach(key => {\n if (!l10n[key]) l10n[key] = {};\n Object.assign(l10n[key], additions[key]);\n});\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","/**\n * This module handles the creation of the h1#title of a spec and\n * makes sure the <title> always matches the h1.\n *\n * If no h1#title is included, then the <title> becomes the h1#title.\n *\n * When a h1#title is included, it always takes precedence over the\n * <title> of a spec. An error will be displayed in case of\n * any mismatch.\n *\n */\n\nimport { getIntlData, norm, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/title\";\n\nconst localizationStrings = {\n en: {\n default_title: \"No Title\",\n },\n de: {\n default_title: \"Kein Titel\",\n },\n zh: {\n default_title: \"无标题\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n /** @type {HTMLElement} */\n const h1Elem =\n document.querySelector(\"h1#title\") || html`<h1 id=\"title\"></h1>`;\n\n // check existing element is ok to use\n if (h1Elem.isConnected && h1Elem.textContent.trim() === \"\") {\n const msg =\n \"The document is missing a title, so using a default title. \" +\n \"To fix this, please give your document a `<title>`. \" +\n \"If you need special markup in the document's title, \" +\n 'please use a `<h1 id=\"title\">`.';\n const title = \"Document is missing a title\";\n showError(msg, name, { title, elements: [h1Elem] });\n }\n\n // Decorate the spec title\n if (!h1Elem.id) h1Elem.id = \"title\";\n h1Elem.classList.add(\"title\");\n\n setDocumentTitle(conf, h1Elem);\n\n // This will get relocated by a template later.\n document.body.prepend(h1Elem);\n}\n\nfunction setDocumentTitle(conf, h1Elem) {\n // If the h1 is newly created, it won't be connected. In this case\n // we use the <title> or a localized fallback.\n if (!h1Elem.isConnected) {\n h1Elem.textContent = document.title || `${l10n.default_title}`;\n }\n\n let documentTitle = norm(h1Elem.textContent);\n\n if (conf.isPreview && conf.prNumber) {\n const prUrl = conf.prUrl || `${conf.github.repoURL}pull/${conf.prNumber}`;\n const { childNodes } = html`\n Preview of PR <a href=\"${prUrl}\">#${conf.prNumber}</a>:\n `;\n h1Elem.prepend(...childNodes);\n documentTitle = `Preview of PR #${conf.prNumber}: ${documentTitle}`;\n }\n\n document.title = documentTitle;\n\n // conf.title is deperecated - we are keeping this here just to\n // retain backwards compat as we think the ePub generator\n // relies on it.\n conf.title = documentTitle;\n}\n","/**\n * This module updates the title and shortName\n * of a spec when there is a valid level configuration.\n *\n * Levels should be integers >= 0.\n */\n\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"w3c/level\";\n\nconst localizationStrings = {\n en: {\n level: \"Level\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n if (!conf.hasOwnProperty(\"level\")) return;\n\n const h1Elem = document.querySelector(\"h1#title\");\n\n const level = parseInt(conf.level);\n if (!Number.isInteger(level) || level < 0) {\n const msg = `The \\`level\\` configuration option must be a number greater or equal to 0. It is currently set to \\`${level}\\``;\n const title = \"Invalid level config.\";\n showError(msg, name, { title, elements: [h1Elem] });\n return;\n }\n\n h1Elem.append(` ${l10n.level} ${level}`);\n document.title = `${document.title} ${l10n.level} ${level}`;\n conf.shortName = `${conf.shortName}-${level}`;\n conf.level = level;\n}\n","// @ts-check\n// Module w3c/abstract\n// Handle the abstract section properly.\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"w3c/abstract\";\n\nconst localizationStrings = {\n en: {\n abstract: \"Abstract\",\n },\n ko: {\n abstract: \"요약\",\n },\n zh: {\n abstract: \"摘要\",\n },\n ja: {\n abstract: \"要約\",\n },\n nl: {\n abstract: \"Samenvatting\",\n },\n es: {\n abstract: \"Resumen\",\n },\n de: {\n abstract: \"Zusammenfassung\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run() {\n const abs = document.getElementById(\"abstract\");\n if (!abs) {\n const msg = 'Document must have one element with `id=\"abstract\"`.';\n showError(msg, name);\n return;\n }\n abs.classList.add(\"introductory\");\n let abstractHeading = document.querySelector(\"#abstract>h2\");\n if (abstractHeading) {\n return;\n }\n abstractHeading = document.createElement(\"h2\");\n abstractHeading.textContent = l10n.abstract;\n abs.prepend(abstractHeading);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Module core/data-abbr\n// - Finds all elements with data-abbr attribute and processes them.\nimport { showError } from \"./utils.js\";\nexport const name = \"core/dfn-abbr\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = document.querySelectorAll(\"[data-abbr]\");\n for (const elem of elements) {\n const { localName } = elem;\n switch (localName) {\n case \"dfn\":\n processDfnElement(elem);\n break;\n default: {\n const msg = `\\`data-abbr\\` attribute not supported on \\`${localName}\\` elements.`;\n showError(msg, name, {\n elements: [elem],\n title: \"Error: unsupported.\",\n });\n }\n }\n }\n}\n/**\n * @param {HTMLElement} dfn\n */\nfunction processDfnElement(dfn) {\n const abbr = generateAbbreviation(dfn);\n // get normalized <dfn> textContent to remove spaces, tabs, new lines.\n const fullForm = dfn.textContent.replace(/\\s\\s+/g, \" \").trim();\n dfn.insertAdjacentHTML(\n \"afterend\",\n ` (<abbr title=\"${fullForm}\">${abbr}</abbr>)`\n );\n const lt = dfn.dataset.lt || \"\";\n dfn.dataset.lt = lt\n .split(\"|\")\n .filter(i => i.trim())\n .concat(abbr)\n .join(\"|\");\n}\n\nfunction generateAbbreviation(elem) {\n if (elem.dataset.abbr) return elem.dataset.abbr;\n // Generates abbreviation from textContent\n // e.g., \"Permanent Account Number\" -> \"PAN\"\n return elem.textContent\n .match(/\\b([a-z])/gi)\n .join(\"\")\n .toUpperCase();\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://api.specref.org/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\n/** @param {BiblioData|string} ref */\nfunction stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\n// Module w3c/conformance\n// Handle the conformance section properly.\nimport { getIntlData, htmlJoinAnd, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { renderInlineCitation } from \"../core/render-biblio.js\";\nimport { rfc2119Usage } from \"../core/inlines.js\";\nexport const name = \"w3c/conformance\";\n\nconst localizationStrings = {\n en: {\n conformance: \"Conformance\",\n normativity:\n \"As well as sections marked as non-normative, all authoring guidelines, \" +\n \"diagrams, examples, and notes in this specification are non-normative. \" +\n \"Everything else in this specification is normative.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n The key word${plural ? \"s\" : \"\"} ${keywords} in this document\n ${plural ? \"are\" : \"is\"} to be interpreted as described in\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n when, and only when, they appear in all capitals, as shown here.\n </p>`;\n },\n },\n de: {\n conformance: \"Anforderungen\",\n normativity:\n \"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten \" +\n \"sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument \" +\n \"nicht normativ. Alle anderen Angaben sind normativ.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n ${plural ? \"Die Schlüsselwörter\" : \"Das Schlüsselwort\"} ${keywords} in\n diesem Dokument ${plural ? \"sind\" : \"ist\"} gemäß\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n und unter Berücksichtigung von\n <a href=\"https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst\"\n >2119de</a\n >\n zu interpretieren, wenn und nur wenn ${plural ? \"sie\" : \"es\"} wie hier\n gezeigt durchgehend groß geschrieben wurde${plural ? \"n\" : \"\"}.\n </p>`;\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {Element} conformance\n * @param {*} conf\n */\nfunction processConformance(conformance, conf) {\n const terms = [...Object.keys(rfc2119Usage)];\n // Add RFC2119 to bibliography\n if (terms.length) {\n conf.normativeReferences.add(\"RFC2119\");\n conf.normativeReferences.add(\"RFC8174\");\n }\n // Put in the 2119 clause and reference\n const keywords = htmlJoinAnd(\n terms.sort(),\n item => html`<em class=\"rfc2119\">${item}</em>`\n );\n const plural = terms.length > 1;\n const content = html`\n <h2>${l10n.conformance}</h2>\n <p>${l10n.normativity}</p>\n ${terms.length ? l10n.keywordInterpretation(keywords, plural) : null}\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run(conf) {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance && !conformance.classList.contains(\"override\")) {\n processConformance(conformance, conf);\n }\n // Warn when there are RFC2119/RFC8174 keywords, but not conformance section\n if (!conformance && Object.keys(rfc2119Usage).length) {\n const msg = `Document uses RFC2119 keywords but lacks a conformance section.`;\n const hint = 'Please add a `<section id=\"conformance\">`.';\n showWarning(msg, name, { hint });\n }\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","/* --- EXAMPLES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nspan.example-title {\n text-transform: none;\n}\n\naside.example,\ndiv.example,\ndiv.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\n\ndiv.illegal-example {\n color: red;\n}\n\ndiv.illegal-example p {\n color: black;\n}\n\naside.example,\ndiv.example {\n padding: 0.5em;\n border-left-width: 0.5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: 0.1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example span.example-title {\n color: #999;\n}\n\n.example pre {\n background-color: rgba(0, 0, 0, 0.03);\n}\n`;\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport css from \"../styles/examples.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","/* --- ISSUES/NOTES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.issue-label {\n text-transform: initial;\n}\n\n.warning > p:first-child { margin-top: 0 }\n.warning {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n}\nspan.warning { padding: .1em .5em .15em; }\n\n.issue.closed span.issue-number {\n text-decoration: line-through;\n}\n\n.warning {\n border-color: #f11;\n border-width: .2em;\n border-style: solid;\n background: #fbe9e9;\n}\n\n.warning-title:before{\n content: \"⚠\"; /*U+26A0 WARNING SIGN*/\n font-size: 1.3em;\n float: left;\n padding-right: .3em;\n margin-top: -0.3em;\n}\n\nli.task-list-item {\n list-style: none;\n}\n\ninput.task-list-item-checkbox {\n margin: 0 0.35em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.issue a.respec-gh-label {\n padding: 5px;\n margin: 0 2px 0 2px;\n font-size: 10px;\n text-transform: none;\n text-decoration: none;\n font-weight: bold;\n border-radius: 4px;\n position: relative;\n bottom: 2px;\n border: none;\n display: inline-block;\n}\n`;\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport css from \"../styles/issues-notes.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\nimport { definitionMap, registerDefinition } from \"./dfn-map.js\";\nimport { showError, wrapInner } from \"./utils.js\";\n\nconst topLevelEntities = new Set([\n \"callback interface\",\n \"callback\",\n \"dictionary\",\n \"enum\",\n \"interface mixin\",\n \"interface\",\n \"typedef\",\n]);\n\n/**\n * This function looks for a <dfn> element whose title is 'name' and\n * that is \"for\" 'parent', which is the empty string when 'name'\n * refers to a top-level entity. For top-level entities, <dfn>\n * elements that inherit a non-empty [dfn-for] attribute are also\n * counted as matching.\n *\n * When a matching <dfn> is found, it's given <code> formatting,\n * marked as an IDL definition, and returned. If no <dfn> is found,\n * the function returns 'undefined'.\n * @param {*} defn\n * @param {string} name\n */\nexport function findDfn(defn, name, { parent = \"\" } = {}) {\n switch (defn.type) {\n case \"constructor\":\n case \"operation\":\n return findOperationDfn(defn, parent, name);\n default:\n return findNormalDfn(defn, parent, name);\n }\n}\n\n/**\n * @param {{ type: string, arguments: any[] }} idlAst\n * @param {string} parent\n * @param {string} name\n */\nfunction getAlternativeNames(idlAst, parent, name) {\n const { type } = idlAst;\n const asQualifiedName = `${parent}.${name}`;\n switch (type) {\n case \"constructor\":\n case \"operation\": {\n // Allow linking to \"method()\", method(arg) and \"method\" name.\n const asMethodName = `${name}()`;\n const asFullyQualifiedName = `${asQualifiedName}()`;\n const asMethodWithArgs = generateMethodNamesWithArgs(\n name,\n idlAst.arguments\n );\n return {\n local: [asQualifiedName, asFullyQualifiedName, name],\n exportable: [asMethodName, ...asMethodWithArgs],\n };\n }\n case \"attribute\":\n return {\n local: [asQualifiedName],\n exportable: [name],\n };\n }\n}\n\n/**\n * Generates all possible permutations of a method name based\n * on what arguments they method accepts.\n\n * Required arguments are always present, and optional ones\n * are stacked one by one.\n *\n * For examples: foo(req1, req2), foo(req1, req2, opt1) and so on.\n *\n * @param {String} operationName\n * @param {*} argsAst\n */\nfunction generateMethodNamesWithArgs(operationName, argsAst) {\n const operationNames = [];\n if (argsAst.length === 0) {\n return operationNames;\n }\n const required = []; // required arguments\n const optional = []; // optional arguments, including variadic ones\n for (const { name, optional: isOptional, variadic } of argsAst) {\n if (isOptional || variadic) {\n optional.push(name);\n } else {\n required.push(name);\n }\n }\n const requiredArgs = required.join(\", \");\n const requiredOperation = `${operationName}(${requiredArgs})`;\n operationNames.push(requiredOperation);\n const optionalOps = optional.map((_, index) => {\n const args = [...required, ...optional.slice(0, index + 1)].join(\", \");\n const result = `${operationName}(${args})`;\n return result;\n });\n operationNames.push(...optionalOps);\n return operationNames;\n}\n\n/**\n * @param {*} defn\n * @param {string} parent\n * @param {string} name\n */\nfunction findOperationDfn(defn, parent, name) {\n // Overloads all have unique names\n if (name.includes(\"!overload\")) {\n return findNormalDfn(defn, parent, name);\n }\n const asMethodName = `${name}()`;\n return findNormalDfn(defn, parent, asMethodName, name);\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {Record<\"local\" | \"exportable\", string[]>} names\n */\nfunction addAlternativeNames(dfn, names) {\n const { local, exportable } = names;\n const lt = dfn.dataset.lt ? new Set(dfn.dataset.lt.split(\"|\")) : new Set();\n for (const item of exportable) {\n lt.add(item);\n }\n // Fix any ill-placed ones - local ones don't belong here\n local.filter(item => lt.has(item)).forEach(item => lt.delete(item));\n dfn.dataset.lt = [...lt].join(\"|\");\n dfn.dataset.localLt = local.join(\"|\");\n registerDefinition(dfn, [...local, ...exportable]);\n}\n\n/**\n * @param {*} defn\n * @param {string} parent\n * @param {...string} names\n */\nfunction findNormalDfn(defn, parent, ...names) {\n const { type } = defn;\n for (const name of names) {\n let resolvedName =\n type === \"enum-value\" && name === \"\" ? \"the-empty-string\" : name;\n let dfns = getDfns(resolvedName, parent, name, type);\n // If we haven't found any definitions with explicit [for]\n // and [title], look for a dotted definition, \"parent.name\".\n if (dfns.length === 0 && parent !== \"\") {\n resolvedName = `${parent}.${resolvedName}`;\n const alternativeDfns = definitionMap.get(resolvedName);\n if (alternativeDfns && alternativeDfns.size === 1) {\n dfns = [...alternativeDfns];\n registerDefinition(dfns[0], [resolvedName]);\n }\n } else {\n resolvedName = name;\n }\n if (dfns.length > 1) {\n const msg = `WebIDL identifier \\`${name}\\` ${\n parent ? `for \\`${parent}\\`` : \"\"\n } is defined multiple times`;\n const title = \"Duplicate definition.\";\n showError(msg, name, { title, elements: dfns });\n }\n if (dfns.length) {\n return dfns[0];\n }\n }\n}\n\n/**\n * @param {HTMLElement} dfnElem\n * @param {*} idlAst\n * @param {string} parent\n * @param {string} name\n */\nexport function decorateDfn(dfnElem, idlAst, parent, name) {\n if (!dfnElem.id) {\n const lCaseParent = parent.toLowerCase();\n const middle = lCaseParent ? `${lCaseParent}-` : \"\";\n let last = name.toLowerCase().replace(/[()]/g, \"\").replace(/\\s/g, \"-\");\n if (last === \"\") last = \"the-empty-string\";\n dfnElem.id = `dom-${middle}${last}`;\n }\n dfnElem.dataset.idl = idlAst.type;\n dfnElem.dataset.title = dfnElem.textContent;\n dfnElem.dataset.dfnFor = parent;\n // Derive the data-type for dictionary members, interface attributes,\n // and methods\n switch (idlAst.type) {\n case \"operation\":\n case \"attribute\":\n case \"field\":\n dfnElem.dataset.type = getDataType(idlAst);\n break;\n }\n\n // Mark the definition as code.\n if (\n !dfnElem.querySelector(\"code\") &&\n !dfnElem.closest(\"code\") &&\n dfnElem.children\n ) {\n wrapInner(dfnElem, dfnElem.ownerDocument.createElement(\"code\"));\n }\n\n // Add data-lt and data-local-lt values and register them\n switch (idlAst.type) {\n case \"attribute\":\n case \"constructor\":\n case \"operation\":\n addAlternativeNames(dfnElem, getAlternativeNames(idlAst, parent, name));\n break;\n }\n\n return dfnElem;\n}\n\n/**\n * @param {string} name\n * @param {string} parent data-dfn-for\n * @param {string} originalName\n * @param {string} type\n */\nfunction getDfns(name, parent, originalName, type) {\n const foundDfns = definitionMap.get(name);\n if (!foundDfns || foundDfns.size === 0) {\n return [];\n }\n const dfnForArray = [...foundDfns];\n // Definitions that have a name and [data-dfn-for] that exactly match the\n // IDL entity:\n const dfns = dfnForArray.filter(dfn => {\n // This is explicitly marked as a concept, so we can't use it\n if (dfn.dataset.dfnType === \"dfn\") return false;\n\n /** @type {HTMLElement} */\n const closestDfnFor = dfn.closest(`[data-dfn-for]`);\n return closestDfnFor && closestDfnFor.dataset.dfnFor === parent;\n });\n\n if (dfns.length === 0 && parent === \"\" && dfnForArray.length === 1) {\n // Make sure the name exactly matches\n return dfnForArray[0].textContent === originalName ? dfnForArray : [];\n } else if (topLevelEntities.has(type) && dfnForArray.length) {\n const dfn = dfnForArray.find(\n dfn => dfn.textContent.trim() === originalName\n );\n if (dfn) return [dfn];\n }\n return dfns;\n}\n\n/**\n * @return {string}\n */\nfunction getDataType(idlStruct = {}) {\n const { idlType, generic, union } = idlStruct;\n if (idlType === undefined) return \"\";\n if (typeof idlType === \"string\") return idlType;\n if (generic) return generic;\n // join on \"|\" handles for \"unsigned short\" etc.\n if (union) return idlType.map(getDataType).join(\"|\");\n return getDataType(idlType);\n}\n","// @ts-check\n/**\n * Module core/webidl-clipboard\n *\n * This module adds a button to each IDL pre making it possible to copy\n * well-formatted IDL to the clipboard.\n *\n */\nexport const name = \"core/webidl-clipboard\";\n\nfunction createButton() {\n const copyButton = document.createElement(\"button\");\n copyButton.innerHTML =\n '<svg height=\"16\" viewBox=\"0 0 14 16\" width=\"14\"><path fill-rule=\"evenodd\" d=\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"/></svg>';\n copyButton.title = \"Copy IDL to clipboard\";\n copyButton.classList.add(\"respec-button-copy-paste\", \"removeOnSave\");\n return copyButton;\n}\n\nconst copyButton = createButton();\n\n/**\n * Adds a HTML button that copies WebIDL to the clipboard.\n *\n * @param {HTMLSpanElement} idlHeader\n */\nexport function addCopyIDLButton(idlHeader) {\n // There may be multiple <span>s of IDL, so we take everything\n // apart from the idl header.\n const pre = idlHeader.closest(\"pre.idl\");\n const idl = pre.cloneNode(true);\n idl.querySelector(\".idlHeader\").remove();\n const { textContent: idlText } = idl;\n const button = copyButton.cloneNode(true);\n button.addEventListener(\"click\", () => {\n navigator.clipboard.writeText(idlText);\n });\n idlHeader.append(button);\n}\n","/* --- WEB IDL --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\npre.idl {\n padding: 1em;\n position: relative;\n}\n\npre.idl > code {\n color: black;\n}\n\n@media print {\n pre.idl {\n white-space: pre-wrap;\n }\n}\n\n.idlHeader {\n display: block;\n width: 150px;\n background: #8ccbf2;\n color: #fff;\n font-family: sans-serif;\n font-weight: bold;\n margin: -1em 0 1em -1em;\n height: 28px;\n line-height: 28px;\n}\n\n.idlHeader a.self-link {\n margin-left: .3cm;\n text-decoration: none;\n border-bottom: none;\n}\n\n.idlID {\n font-weight: bold;\n color: #005a9c;\n}\n\n.idlType {\n color: #005a9c;\n}\n\n.idlName {\n color: #ff4500;\n}\n\n.idlName a {\n color: #ff4500;\n border-bottom: 1px dotted #ff4500;\n text-decoration: none;\n}\n\na.idlEnumItem {\n color: #000;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\n.idlSuperclass {\n font-style: italic;\n color: #005a9c;\n}\n\n\n/*.idlParam*/\n\n.idlParamName,\n.idlDefaultValue {\n font-style: italic;\n}\n\n.extAttr {\n color: #666;\n}\n\n\n/*.idlSectionComment*/\n\n.idlSectionComment {\n color: gray;\n}\n\n.idlIncludes a {\n font-weight: bold;\n}\n\n.respec-button-copy-paste:focus {\n text-decoration: none;\n border-color: #51a7e8;\n outline: none;\n box-shadow: 0 0 5px rgba(81, 167, 232, 0.5);\n}\n\n.respec-button-copy-paste:focus:hover,\n.respec-button-copy-paste.selected:focus {\n border-color: #51a7e8;\n}\n\n.respec-button-copy-paste:hover,\n.respec-button-copy-paste:active,\n.respec-button-copy-paste.zeroclipboard-is-hover,\n.respec-button-copy-paste.zeroclipboard-is-active {\n text-decoration: none;\n background-color: #ddd;\n background-image: linear-gradient(#eee, #ddd);\n border-color: #ccc;\n}\n\n.respec-button-copy-paste:active,\n.respec-button-copy-paste.selected,\n.respec-button-copy-paste.zeroclipboard-is-active {\n background-color: #dcdcdc;\n background-image: none;\n border-color: #b5b5b5;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15)\n}\n\n.respec-button-copy-paste.selected:hover {\n background-color: #cfcfcf;\n}\n\n.respec-button-copy-paste:disabled,\n.respec-button-copy-paste:disabled:hover,\n.respec-button-copy-paste.disabled,\n.respec-button-copy-paste.disabled:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n border-color: rgba(197, 197, 197, 0.5);\n box-shadow: none;\n}\n\n@media print {\n .respec-button-copy-paste {\n visibility: hidden;\n }\n}\n`;\n","// Module core/webidl\n// Highlights and links WebIDL marked up inside <pre class=\"idl\">.\n\n// TODO:\n// - It could be useful to report parsed IDL items as events\n// - don't use generated content in the CSS!\nimport {\n addHashId,\n showError,\n showWarning,\n wrapInner,\n xmlEscape,\n} from \"./utils.js\";\nimport { decorateDfn, findDfn } from \"./dfn-finder.js\";\nimport { html, webidl2 } from \"./import-maps.js\";\nimport { addCopyIDLButton } from \"./webidl-clipboard.js\";\nimport css from \"../styles/webidl.css.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/webidl\";\nconst pluginName = name;\n\nconst operationNames = {};\nconst idlPartials = {};\n\nconst templates = {\n wrap(items) {\n return items\n .flat()\n .filter(x => x !== \"\")\n .map(x => (typeof x === \"string\" ? new Text(x) : x));\n },\n trivia(t) {\n if (!t.trim()) {\n return t;\n }\n return html`<span class=\"idlSectionComment\">${t}</span>`;\n },\n generic(keyword) {\n // Shepherd classifies \"interfaces\" as starting with capital letters,\n // like Promise, FrozenArray, etc.\n return /^[A-Z]/.test(keyword)\n ? html`<a data-xref-type=\"interface\" data-cite=\"WebIDL\">${keyword}</a>`\n : // Other keywords like sequence, maplike, etc...\n html`<a data-xref-type=\"dfn\" data-cite=\"WebIDL\">${keyword}</a>`;\n },\n reference(wrapped, unescaped, context) {\n if (context.type === \"extended-attribute\" && context.name !== \"Exposed\") {\n return wrapped;\n }\n let type = \"_IDL_\";\n let cite = null;\n let lt;\n switch (unescaped) {\n case \"Window\":\n type = \"interface\";\n cite = \"HTML\";\n break;\n case \"object\":\n type = \"interface\";\n cite = \"WebIDL\";\n break;\n default: {\n const isWorkerType = unescaped.includes(\"Worker\");\n if (isWorkerType && context.type === \"extended-attribute\") {\n lt = `${unescaped}GlobalScope`;\n type = \"interface\";\n cite = [\"Worker\", \"DedicatedWorker\", \"SharedWorker\"].includes(\n unescaped\n )\n ? \"HTML\"\n : null;\n }\n }\n }\n return html`<a data-xref-type=\"${type}\" data-cite=\"${cite}\" data-lt=\"${lt}\"\n >${wrapped}</a\n >`;\n },\n name(escaped, { data, parent }) {\n if (data.idlType && data.idlType.type === \"argument-type\") {\n return html`<span class=\"idlParamName\">${escaped}</span>`;\n }\n const idlLink = defineIdlName(escaped, data, parent);\n if (data.type !== \"enum-value\") {\n const className = parent ? \"idlName\" : \"idlID\";\n idlLink.classList.add(className);\n }\n return idlLink;\n },\n nameless(escaped, { data, parent }) {\n switch (data.type) {\n case \"operation\":\n case \"constructor\":\n return defineIdlName(escaped, data, parent);\n default:\n return escaped;\n }\n },\n type(contents) {\n return html`<span class=\"idlType\">${contents}</span>`;\n },\n inheritance(contents) {\n return html`<span class=\"idlSuperclass\">${contents}</span>`;\n },\n definition(contents, { data, parent }) {\n const className = getIdlDefinitionClassName(data);\n switch (data.type) {\n case \"includes\":\n case \"enum-value\":\n return html`<span class=\"${className}\">${contents}</span>`;\n }\n const parentName = parent ? parent.name : \"\";\n const { name, idlId } = getNameAndId(data, parentName);\n return html`<span\n class=\"${className}\"\n id=\"${idlId}\"\n data-idl\n data-title=\"${name}\"\n >${contents}</span\n >`;\n },\n extendedAttribute(contents) {\n const result = html`<span class=\"extAttr\">${contents}</span>`;\n return result;\n },\n extendedAttributeReference(name) {\n return html`<a data-xref-type=\"extended-attribute\">${name}</a>`;\n },\n};\n\n/**\n * Returns a link to existing <dfn> or creates one if doesn’t exists.\n */\nfunction defineIdlName(escaped, data, parent) {\n const parentName = parent ? parent.name : \"\";\n const { name } = getNameAndId(data, parentName);\n const dfn = findDfn(data, name, {\n parent: parentName,\n });\n const linkType = getDfnType(data.type);\n if (dfn) {\n if (!data.partial) {\n dfn.dataset.export = \"\";\n dfn.dataset.dfnType = linkType;\n }\n decorateDfn(dfn, data, parentName, name);\n const href = `#${dfn.id}`;\n return html`<a\n data-link-for=\"${parentName}\"\n data-link-type=\"${linkType}\"\n href=\"${href}\"\n class=\"internalDFN\"\n ><code>${escaped}</code></a\n >`;\n }\n\n const isDefaultJSON =\n data.type === \"operation\" &&\n data.name === \"toJSON\" &&\n data.extAttrs.some(({ name }) => name === \"Default\");\n if (isDefaultJSON) {\n return html`<a data-link-type=\"dfn\" data-lt=\"default toJSON steps\"\n >${escaped}</a\n >`;\n }\n if (!data.partial) {\n const dfn = html`<dfn data-export data-dfn-type=\"${linkType}\"\n >${escaped}</dfn\n >`;\n registerDefinition(dfn, [name]);\n decorateDfn(dfn, data, parentName, name);\n return dfn;\n }\n\n const unlinkedAnchor = html`<a\n data-idl=\"${data.partial ? \"partial\" : null}\"\n data-link-type=\"${linkType}\"\n data-title=\"${data.name}\"\n data-xref-type=\"${linkType}\"\n >${escaped}</a\n >`;\n\n const showWarnings =\n name && data.type !== \"typedef\" && !(data.partial && !dfn);\n if (showWarnings) {\n const styledName = data.type === \"operation\" ? `${name}()` : name;\n const ofParent = parentName ? ` \\`${parentName}\\`'s` : \"\";\n const msg = `Missing \\`<dfn>\\` for${ofParent} \\`${styledName}\\` ${data.type}. [More info](https://github.com/w3c/respec/wiki/WebIDL-thing-is-not-defined).`;\n showWarning(msg, pluginName, { elements: [unlinkedAnchor] });\n }\n return unlinkedAnchor;\n}\n\n/**\n * Map to Shepherd types, for export.\n * @see https://tabatkins.github.io/bikeshed/#dfn-types\n */\nfunction getDfnType(idlType) {\n switch (idlType) {\n case \"operation\":\n return \"method\";\n case \"field\":\n return \"dict-member\";\n case \"callback interface\":\n case \"interface mixin\":\n return \"interface\";\n default:\n return idlType;\n }\n}\n\nfunction getIdlDefinitionClassName(defn) {\n switch (defn.type) {\n case \"callback interface\":\n return \"idlInterface\";\n case \"operation\":\n return \"idlMethod\";\n case \"field\":\n return \"idlMember\";\n case \"enum-value\":\n return \"idlEnumItem\";\n case \"callback function\":\n return \"idlCallback\";\n }\n return `idl${defn.type[0].toUpperCase()}${defn.type.slice(1)}`;\n}\n\nconst nameResolverMap = new WeakMap();\nfunction getNameAndId(defn, parent = \"\") {\n if (nameResolverMap.has(defn)) {\n return nameResolverMap.get(defn);\n }\n const result = resolveNameAndId(defn, parent);\n nameResolverMap.set(defn, result);\n return result;\n}\n\nfunction resolveNameAndId(defn, parent) {\n let name = getDefnName(defn);\n // For getters, setters, etc. \"anonymous-getter\",\n const prefix = defn.special && defn.name === \"\" ? \"anonymous-\" : \"\";\n let idlId = getIdlId(prefix + name, parent);\n switch (defn.type) {\n // Top-level entities with linkable members.\n case \"callback interface\":\n case \"dictionary\":\n case \"interface\":\n case \"interface mixin\": {\n idlId += resolvePartial(defn);\n break;\n }\n case \"constructor\":\n case \"operation\": {\n const overload = resolveOverload(name, parent);\n if (overload) {\n name += overload;\n idlId += overload;\n } else if (defn.arguments.length) {\n idlId += defn.arguments\n .map(arg => `-${arg.name.toLowerCase()}`)\n .join(\"\");\n }\n break;\n }\n }\n return { name, idlId };\n}\n\nfunction resolvePartial(defn) {\n if (!defn.partial) {\n return \"\";\n }\n if (!idlPartials[defn.name]) {\n idlPartials[defn.name] = 0;\n }\n idlPartials[defn.name] += 1;\n return `-partial-${idlPartials[defn.name]}`;\n}\n\nfunction resolveOverload(name, parentName) {\n const qualifiedName = `${parentName}.${name}`;\n const fullyQualifiedName = `${qualifiedName}()`;\n let overload;\n if (!operationNames[fullyQualifiedName]) {\n operationNames[fullyQualifiedName] = 0;\n }\n if (!operationNames[qualifiedName]) {\n operationNames[qualifiedName] = 0;\n } else {\n overload = `!overload-${operationNames[qualifiedName]}`;\n }\n operationNames[fullyQualifiedName] += 1;\n operationNames[qualifiedName] += 1;\n return overload || \"\";\n}\n\nfunction getIdlId(name, parentName) {\n if (!parentName) {\n return `idl-def-${name.toLowerCase()}`;\n }\n return `idl-def-${parentName.toLowerCase()}-${name.toLowerCase()}`;\n}\n\nfunction getDefnName(defn) {\n switch (defn.type) {\n case \"enum-value\":\n return defn.value;\n case \"operation\":\n return defn.name || defn.special;\n default:\n return defn.name || defn.type;\n }\n}\n\n/**\n * @param {Element} idlElement\n * @param {number} index\n */\nfunction renderWebIDL(idlElement, index) {\n let parse;\n try {\n parse = webidl2.parse(idlElement.textContent, {\n sourceName: String(index),\n });\n } catch (e) {\n const msg = `Failed to parse WebIDL: ${e.bareMessage}.`;\n showError(msg, pluginName, {\n title: e.bareMessage,\n details: `<pre>${e.context}</pre>`,\n elements: [idlElement],\n });\n // Skip this <pre> and move on to the next one.\n return [];\n }\n // we add \"idl\" as the canonical match, so both \"webidl\" and \"idl\" work\n idlElement.classList.add(\"def\", \"idl\");\n const highlights = webidl2.write(parse, { templates });\n html.bind(idlElement)`${highlights}`;\n wrapInner(idlElement, document.createElement(\"code\"));\n idlElement.querySelectorAll(\"[data-idl]\").forEach(elem => {\n if (elem.dataset.dfnFor) {\n return;\n }\n const title = elem.dataset.title;\n // Select the nearest ancestor element that can contain members.\n const parent = elem.parentElement.closest(\"[data-idl][data-title]\");\n if (parent) {\n elem.dataset.dfnFor = parent.dataset.title;\n }\n if (elem.localName === \"dfn\") {\n registerDefinition(elem, [title]);\n }\n });\n // cross reference\n const closestCite = idlElement.closest(\"[data-cite], body\");\n const { dataset } = closestCite;\n if (!dataset.cite) dataset.cite = \"WebIDL\";\n // includes webidl in some form\n if (!/\\bwebidl\\b/i.test(dataset.cite)) {\n const cites = dataset.cite.trim().split(/\\s+/);\n dataset.cite = [\"WebIDL\", ...cites].join(\" \");\n }\n addIDLHeader(idlElement);\n return parse;\n}\n/**\n * Adds a \"WebIDL\" decorative header/permalink to a block of WebIDL.\n * @param {HTMLPreElement} pre\n */\nexport function addIDLHeader(pre) {\n addHashId(pre, \"webidl\");\n const header = html`<span class=\"idlHeader\"\n ><a class=\"self-link\" href=\"${`#${pre.id}`}\">WebIDL</a></span\n >`;\n pre.prepend(header);\n addCopyIDLButton(header);\n}\n\nexport async function run() {\n const idls = document.querySelectorAll(\"pre.idl, pre.webidl\");\n if (!idls.length) {\n return;\n }\n if (!document.querySelector(\".idl:not(pre), .webidl:not(pre)\")) {\n const link = document.querySelector(\"head link\");\n if (link) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n link.before(style);\n }\n }\n\n const astArray = [...idls].map(renderWebIDL);\n\n const validations = webidl2.validate(astArray);\n for (const validation of validations) {\n let details = `<pre>${xmlEscape(validation.context)}</pre>`;\n if (validation.autofix) {\n validation.autofix();\n const idlToFix = webidl2.write(astArray[validation.sourceName]);\n const escaped = xmlEscape(idlToFix);\n details += `Try fixing as:\n <pre>${escaped}</pre>`;\n }\n const msg = `WebIDL validation error: ${validation.bareMessage}`;\n showError(msg, pluginName, {\n details,\n elements: [idls[validation.sourceName]],\n title: validation.bareMessage,\n });\n }\n document.normalize();\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\nimport { API_URL } from \"./xref.js\";\nimport { idb } from \"./import-maps.js\";\n\n/**\n * @typedef {import('core/xref').RequestEntry} RequestEntry\n * @typedef {import('core/xref').Response} Response\n * @typedef {import('core/xref').SearchResultEntry} SearchResultEntry\n * @typedef {import('core/xref').XrefDatabase} XrefDatabase\n */\n\nconst STORE_NAME = \"xrefs\";\nconst VERSION_CHECK_WAIT = 5 * 60 * 1000; // 5 min\n\nasync function getIdbCache() {\n /** @type {XrefDatabase} */\n const db = await idb.openDB(\"xref\", 2, {\n upgrade(db) {\n [...db.objectStoreNames].forEach(s => db.deleteObjectStore(s));\n const store = db.createObjectStore(STORE_NAME, { keyPath: \"query.id\" });\n store.createIndex(\"byTerm\", \"query.term\", { unique: false });\n },\n });\n return db;\n}\n\n/** @param {RequestEntry[]} queries */\nexport async function resolveXrefCache(queries) {\n /** @type {Map<string, SearchResultEntry[]>} */\n const cachedData = new Map();\n\n const bustCache = await shouldBustCache();\n if (bustCache) {\n await clearXrefData();\n return cachedData;\n }\n\n const requiredKeySet = new Set(queries.map(query => query.id));\n try {\n const cache = await getIdbCache();\n let cursor = await cache.transaction(STORE_NAME).store.openCursor();\n while (cursor) {\n if (requiredKeySet.has(cursor.key)) {\n cachedData.set(cursor.key, cursor.value.result);\n }\n cursor = await cursor.continue();\n }\n } catch (err) {\n console.error(err);\n }\n return cachedData;\n}\n\n/**\n * Get last updated timestamp from server and bust cache based on that. This\n * way, we prevent dirty/erroneous/stale data being kept on a client (which is\n * possible if we use a `MAX_AGE` based caching strategy).\n */\nasync function shouldBustCache() {\n const key = \"XREF:LAST_VERSION_CHECK\";\n const lastChecked = parseInt(localStorage.getItem(key), 10);\n const now = Date.now();\n\n if (!lastChecked) {\n localStorage.setItem(key, now.toString());\n return false;\n }\n if (now - lastChecked < VERSION_CHECK_WAIT) {\n // avoid checking network for any data update if old cache \"fresh\"\n return false;\n }\n\n const url = new URL(\"meta/version\", API_URL).href;\n const res = await fetch(url);\n if (!res.ok) return false;\n const lastUpdated = await res.text();\n localStorage.setItem(key, now.toString());\n return parseInt(lastUpdated, 10) > lastChecked;\n}\n\n/**\n * @param {RequestEntry[]} queries\n * @param {Map<string, SearchResultEntry[]>} results\n */\nexport async function cacheXrefData(queries, results) {\n try {\n const cache = await getIdbCache();\n const tx = cache.transaction(STORE_NAME, \"readwrite\");\n for (const query of queries) {\n const result = results.get(query.id);\n tx.objectStore(STORE_NAME).add({ query, result });\n }\n await tx.done;\n } catch (e) {\n console.error(e);\n }\n}\n\nexport async function clearXrefData() {\n try {\n await getIdbCache().then(db => db.clear(STORE_NAME));\n } catch (e) {\n console.error(e);\n }\n}\n","// @ts-check\n/**\n * @module core/xref\n *\n * Automatically adds external references.\n *\n * Searches for the terms which do not have a local definition at xref API and\n * for each query, adds `data-cite` attributes to respective elements.\n * `core/data-cite` later converts these data-cite attributes to actual links.\n * https://github.com/w3c/respec/issues/1662\n */\n/**\n * @typedef {import('core/xref').RequestEntry} RequestEntry\n * @typedef {import('core/xref').Response} Response\n * @typedef {import('core/xref').SearchResultEntry} SearchResultEntry\n * @typedef {Map<string, { elems: HTMLElement[], results: SearchResultEntry[], query: RequestEntry }>} ErrorCollection\n * @typedef {{ ambiguous: ErrorCollection, notFound: ErrorCollection }} Errors\n */\nimport { cacheXrefData, resolveXrefCache } from \"./xref-db.js\";\nimport {\n createResourceHint,\n nonNormativeSelector,\n norm as normalize,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { possibleExternalLinks } from \"./link-to-dfn.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/xref\";\n\nconst profiles = {\n \"web-platform\": [\"HTML\", \"INFRA\", \"URL\", \"WEBIDL\", \"DOM\", \"FETCH\"],\n};\n\nexport const API_URL = \"https://respec.org/xref/\";\n\nif (\n !document.querySelector(\"link[rel='preconnect'][href='https://respec.org']\")\n) {\n const link = createResourceHint({\n hint: \"preconnect\",\n href: \"https://respec.org\",\n });\n document.head.appendChild(link);\n}\n\n/**\n * @param {Object} conf respecConfig\n */\nexport async function run(conf) {\n if (!conf.xref) {\n return;\n }\n\n const xref = normalizeConfig(conf.xref);\n if (xref.specs) {\n const bodyCite = document.body.dataset.cite\n ? document.body.dataset.cite.split(/\\s+/)\n : [];\n document.body.dataset.cite = bodyCite.concat(xref.specs).join(\" \");\n }\n\n const elems = possibleExternalLinks.concat(findExplicitExternalLinks());\n if (!elems.length) return;\n\n /** @type {RequestEntry[]} */\n const queryKeys = [];\n for (const elem of elems) {\n const entry = getRequestEntry(elem);\n const id = await objectHash(entry);\n queryKeys.push({ ...entry, id });\n }\n\n const data = await getData(queryKeys, xref.url);\n addDataCiteToTerms(elems, queryKeys, data, conf);\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Find additional references that need to be looked up externally.\n * Examples: a[data-cite=\"spec\"], dfn[data-cite=\"spec\"], dfn.externalDFN\n */\nfunction findExplicitExternalLinks() {\n /** @type {NodeListOf<HTMLElement>} */\n const links = document.querySelectorAll(\n \"a[data-cite]:not([data-cite='']):not([data-cite*='#']), \" +\n \"dfn[data-cite]:not([data-cite='']):not([data-cite*='#'])\"\n );\n /** @type {NodeListOf<HTMLElement>} */\n const externalDFNs = document.querySelectorAll(\"dfn.externalDFN\");\n return [...links]\n .filter(el => {\n // ignore empties\n if (el.textContent.trim() === \"\") return false;\n /** @type {HTMLElement} */\n const closest = el.closest(\"[data-cite]\");\n return !closest || closest.dataset.cite !== \"\";\n })\n .concat(...externalDFNs);\n}\n\n/**\n * converts conf.xref to object with url and spec properties\n */\nfunction normalizeConfig(xref) {\n const defaults = {\n url: API_URL,\n specs: null,\n };\n\n const config = Object.assign({}, defaults);\n\n const type = Array.isArray(xref) ? \"array\" : typeof xref;\n switch (type) {\n case \"boolean\":\n // using defaults already, as above\n break;\n case \"string\":\n if (xref.toLowerCase() in profiles) {\n Object.assign(config, { specs: profiles[xref.toLowerCase()] });\n } else {\n invalidProfileError(xref);\n }\n break;\n case \"array\":\n Object.assign(config, { specs: xref });\n break;\n case \"object\":\n Object.assign(config, xref);\n if (xref.profile) {\n const profile = xref.profile.toLowerCase();\n if (profile in profiles) {\n const specs = (xref.specs || []).concat(profiles[profile]);\n Object.assign(config, { specs });\n } else {\n invalidProfileError(xref.profile);\n }\n }\n break;\n default: {\n const msg = `Invalid value for \\`xref\\` configuration option. Received: \"${xref}\".`;\n showError(msg, name);\n }\n }\n return config;\n\n function invalidProfileError(profile) {\n const supportedProfiles = Object.keys(profiles)\n .map(p => `\"${p}\"`)\n .join(\", \");\n const msg =\n `Invalid profile \"${profile}\" in \\`respecConfig.xref\\`. ` +\n `Please use one of the supported profiles: ${supportedProfiles}.`;\n showError(msg, name);\n }\n}\n\n/**\n * get xref API request entry (term and context) for given xref element\n * @param {HTMLElement} elem\n */\nfunction getRequestEntry(elem) {\n const isIDL = \"xrefType\" in elem.dataset;\n\n let term = getTermFromElement(elem);\n if (!isIDL) term = term.toLowerCase();\n\n const specs = getSpecContext(elem);\n const types = getTypeContext(elem, isIDL);\n const forContext = getForContext(elem, isIDL);\n\n return {\n term,\n types,\n ...(specs.length && { specs }),\n ...(typeof forContext === \"string\" && { for: forContext }),\n };\n}\n\n/** @param {HTMLElement} elem */\nexport function getTermFromElement(elem) {\n const { lt: linkingText } = elem.dataset;\n let term = linkingText ? linkingText.split(\"|\", 1)[0] : elem.textContent;\n term = normalize(term);\n return term === \"the-empty-string\" ? \"\" : term;\n}\n\n/**\n * Get spec context as a fallback chain, where each level (sub-array) represents\n * decreasing priority.\n * @param {HTMLElement} elem\n */\nfunction getSpecContext(elem) {\n /** @type {string[][]} */\n const specs = [];\n\n /** @type {HTMLElement} */\n let dataciteElem = elem.closest(\"[data-cite]\");\n\n // Traverse up towards the root element, adding levels of lower priority specs\n while (dataciteElem) {\n const cite = dataciteElem.dataset.cite.toLowerCase().replace(/[!?]/g, \"\");\n const cites = cite.split(/\\s+/).filter(s => s);\n if (cites.length) {\n specs.push(cites);\n }\n if (dataciteElem === elem) break;\n dataciteElem = dataciteElem.parentElement.closest(\"[data-cite]\");\n }\n\n // If element itself contains data-cite, we don't take inline context into\n // account. The inline bibref context has lowest priority, if available.\n if (dataciteElem !== elem) {\n const closestSection = elem.closest(\"section\");\n /** @type {Iterable<HTMLElement>} */\n const bibrefs = closestSection\n ? closestSection.querySelectorAll(\"a.bibref\")\n : [];\n const inlineRefs = [...bibrefs].map(el => el.textContent.toLowerCase());\n if (inlineRefs.length) {\n specs.push(inlineRefs);\n }\n }\n\n const uniqueSpecContext = dedupeSpecContext(specs);\n return uniqueSpecContext;\n}\n\n/**\n * If we already have a spec in a higher priority level (closer to element) of\n * fallback chain, skip it from low priority levels, to prevent duplication.\n * @param {string[][]} specs\n * */\nfunction dedupeSpecContext(specs) {\n /** @type {string[][]} */\n const unique = [];\n for (const level of specs) {\n const higherPriority = unique[unique.length - 1] || [];\n const uniqueSpecs = [...new Set(level)].filter(\n spec => !higherPriority.includes(spec)\n );\n unique.push(uniqueSpecs.sort());\n }\n return unique;\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {boolean} isIDL\n */\nfunction getForContext(elem, isIDL) {\n if (elem.dataset.xrefFor) {\n return normalize(elem.dataset.xrefFor);\n }\n\n if (isIDL) {\n /** @type {HTMLElement} */\n const dataXrefForElem = elem.closest(\"[data-xref-for]\");\n if (dataXrefForElem) {\n return normalize(dataXrefForElem.dataset.xrefFor);\n }\n }\n\n return null;\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {boolean} isIDL\n */\nfunction getTypeContext(elem, isIDL) {\n if (isIDL) {\n if (elem.dataset.xrefType) {\n return elem.dataset.xrefType.split(\"|\");\n }\n return [\"_IDL_\"];\n }\n\n return [\"_CONCEPT_\"];\n}\n\n/**\n * @param {RequestEntry[]} queryKeys\n * @param {string} apiUrl\n * @returns {Promise<Map<string, SearchResultEntry[]>>}\n */\nasync function getData(queryKeys, apiUrl) {\n const uniqueIds = new Set();\n const uniqueQueryKeys = queryKeys.filter(key => {\n return uniqueIds.has(key.id) ? false : uniqueIds.add(key.id) && true;\n });\n\n const resultsFromCache = await resolveXrefCache(uniqueQueryKeys);\n\n const termsToLook = uniqueQueryKeys.filter(\n key => !resultsFromCache.get(key.id)\n );\n const fetchedResults = await fetchFromNetwork(termsToLook, apiUrl);\n if (fetchedResults.size) {\n // add data to cache\n await cacheXrefData(uniqueQueryKeys, fetchedResults);\n }\n\n return new Map([...resultsFromCache, ...fetchedResults]);\n}\n\n/**\n * @param {RequestEntry[]} keys\n * @param {string} url\n * @returns {Promise<Map<string, SearchResultEntry[]>>}\n */\nasync function fetchFromNetwork(keys, url) {\n if (!keys.length) return new Map();\n\n const query = { keys };\n const options = {\n method: \"POST\",\n body: JSON.stringify(query),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n const response = await fetch(url, options);\n const json = await response.json();\n return new Map(json.result);\n}\n\n/**\n * Figures out from the tree structure if the reference is\n * normative (true) or informative (false).\n * @param {HTMLElement} elem\n */\nfunction isNormative(elem) {\n const closestNormative = elem.closest(\".normative\");\n const closestInform = elem.closest(nonNormativeSelector);\n if (!closestInform || elem === closestNormative) {\n return true;\n }\n return (\n closestNormative &&\n closestInform &&\n closestInform.contains(closestNormative)\n );\n}\n\n/**\n * adds data-cite attributes to elems for each term for which results are found.\n * adds citations to references section.\n * collects and shows linking errors if any.\n * @param {HTMLElement[]} elems\n * @param {RequestEntry[]} queryKeys\n * @param {Map<string, SearchResultEntry[]>} data\n * @param {any} conf\n */\nfunction addDataCiteToTerms(elems, queryKeys, data, conf) {\n /** @type {Errors} */\n const errors = { ambiguous: new Map(), notFound: new Map() };\n\n for (let i = 0, l = elems.length; i < l; i++) {\n if (elems[i].closest(\"[data-no-xref]\")) continue;\n\n const elem = elems[i];\n const query = queryKeys[i];\n\n const { id } = query;\n const results = data.get(id);\n if (results.length === 1) {\n addDataCite(elem, query, results[0], conf);\n } else {\n const collector = errors[results.length === 0 ? \"notFound\" : \"ambiguous\"];\n if (!collector.has(id)) {\n collector.set(id, { elems: [], results, query });\n }\n collector.get(id).elems.push(elem);\n }\n }\n\n showErrors(errors);\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {RequestEntry} query\n * @param {SearchResultEntry} result\n * @param {any} conf\n */\nfunction addDataCite(elem, query, result, conf) {\n const { term, specs = [] } = query;\n const { uri, shortname, spec, normative, type, for: forContext } = result;\n // if authored spec context had `result.spec`, use it instead of shortname\n const cite = specs.flat().includes(spec) ? spec : shortname;\n const url = new URL(uri, \"https://example.org\");\n const { pathname: citePath } = url;\n const citeFrag = url.hash.slice(1);\n const dataset = { cite, citePath, citeFrag, type };\n if (forContext) dataset.linkFor = forContext[0];\n Object.assign(elem.dataset, dataset);\n\n addToReferences(elem, cite, normative, term, conf);\n}\n\n/**\n * add specs for citation (references section)\n * @param {HTMLElement} elem\n * @param {string} cite\n * @param {boolean} normative\n * @param {string} term\n * @param {any} conf\n */\nfunction addToReferences(elem, cite, normative, term, conf) {\n const isNormRef = isNormative(elem);\n if (!isNormRef) {\n // Only add it if not already normative...\n if (!conf.normativeReferences.has(cite)) {\n conf.informativeReferences.add(cite);\n }\n return;\n }\n if (normative) {\n // If it was originally informative, we move the existing\n // key to be normative.\n const existingKey = conf.informativeReferences.has(cite)\n ? conf.informativeReferences.getCanonicalKey(cite)\n : cite;\n conf.normativeReferences.add(existingKey);\n conf.informativeReferences.delete(existingKey);\n return;\n }\n\n const msg = `Normative reference to \"${term}\" found but term is defined informatively in \"${cite}\"`;\n const title = \"Error: Normative reference to informative term\";\n showWarning(msg, name, { title, elements: [elem] });\n}\n\n/** @param {Errors} errors */\nfunction showErrors({ ambiguous, notFound }) {\n const getPrefilledFormURL = (term, query, specs = []) => {\n const url = new URL(API_URL);\n url.searchParams.set(\"term\", term);\n if (query.for) url.searchParams.set(\"for\", query.for);\n url.searchParams.set(\"types\", query.types.join(\",\"));\n if (specs.length) url.searchParams.set(\"specs\", specs.join(\",\"));\n return url;\n };\n\n const howToFix = howToCiteURL =>\n \"[Learn more about this error](https://respec.org/docs/#error-term-not-found)\" +\n ` or see [how to cite to resolve the error](${howToCiteURL}).`;\n\n for (const { query, elems } of notFound.values()) {\n const specs = query.specs ? [...new Set(query.specs.flat())].sort() : [];\n const originalTerm = getTermFromElement(elems[0]);\n const formUrl = getPrefilledFormURL(originalTerm, query);\n const specsString = specs.map(spec => `\\`${spec}\\``).join(\", \");\n const hint = howToFix(formUrl);\n const msg = `Couldn't match \"**${originalTerm}**\" to anything in the document or in any other document cited in this specification: ${specsString}.`;\n const title = \"Error: No matching dfn found.\";\n showError(msg, name, { title, elements: elems, hint });\n }\n\n for (const { query, elems, results } of ambiguous.values()) {\n const specs = [...new Set(results.map(entry => entry.shortname))].sort();\n const specsString = specs.map(s => `**${s}**`).join(\", \");\n const originalTerm = getTermFromElement(elems[0]);\n const formUrl = getPrefilledFormURL(originalTerm, query, specs);\n const hint = howToFix(formUrl);\n const msg = `The term \"**${originalTerm}**\" is defined in ${specsString} in multiple ways, so it's ambiguous.`;\n const title = \"Error: Linking an ambiguous dfn.\";\n showError(msg, name, { title, elements: elems, hint });\n }\n}\n\nfunction objectHash(obj) {\n const str = JSON.stringify(obj, Object.keys(obj).sort());\n const buffer = new TextEncoder().encode(str);\n return crypto.subtle.digest(\"SHA-1\", buffer).then(bufferToHexString);\n}\n\n/** @param {ArrayBuffer} buffer */\nfunction bufferToHexString(buffer) {\n const byteArray = new Uint8Array(buffer);\n return [...byteArray].map(v => v.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction cleanup(doc) {\n const elems = doc.querySelectorAll(\n \"a[data-xref-for], a[data-xref-type], a[data-link-for]\"\n );\n const attrToRemove = [\"data-xref-for\", \"data-xref-type\", \"data-link-for\"];\n elems.forEach(el => {\n attrToRemove.forEach(attr => el.removeAttribute(attr));\n });\n}\n","// @ts-check\n/**\n * Module: core/webidl-index\n * constructs a summary of WebIDL in the document by\n * cloning all the generated WebIDL nodes and\n * appending them to pre element.\n *\n * Usage\n * Add a <section id=\"idl-index\"> to the document.\n * It also supports title elements to generate a header.\n * Or if a header element is an immediate child, then\n * that is preferred.\n */\nexport const name = \"core/webidl-index\";\nimport { nonNormativeSelector, wrapInner } from \"./utils.js\";\nimport { addIDLHeader } from \"./webidl.js\";\n\nexport function run() {\n /** @type {HTMLElement | null} */\n const idlIndexSec = document.querySelector(\"section#idl-index\");\n if (!idlIndexSec) {\n return;\n }\n // Query for decedents headings, e.g., \"h2:first-child, etc..\"\n const query = [2, 3, 4, 5, 6].map(level => `h${level}:first-child`).join(\",\");\n if (!idlIndexSec.querySelector(query)) {\n const header = document.createElement(\"h2\");\n if (idlIndexSec.title) {\n header.textContent = idlIndexSec.title;\n idlIndexSec.removeAttribute(\"title\");\n } else {\n header.textContent = \"IDL Index\";\n }\n idlIndexSec.prepend(header);\n }\n\n // filter out the IDL marked with class=\"exclude\" and the IDL in non-normative sections\n const idlIndex = Array.from(\n document.querySelectorAll(\"pre.idl:not(.exclude) > code\")\n ).filter(idl => !idl.closest(nonNormativeSelector));\n\n if (idlIndex.length === 0) {\n const text = \"This specification doesn't normatively declare any Web IDL.\";\n idlIndexSec.append(text);\n return;\n }\n\n const pre = document.createElement(\"pre\");\n pre.classList.add(\"idl\", \"def\");\n pre.id = \"actual-idl-index\";\n idlIndex\n .map(elem => {\n const fragment = document.createDocumentFragment();\n for (const child of elem.children) {\n fragment.appendChild(child.cloneNode(true));\n }\n return fragment;\n })\n .forEach(elem => {\n if (pre.lastChild) {\n pre.append(\"\\n\\n\");\n }\n pre.appendChild(elem);\n });\n // Remove duplicate IDs\n pre.querySelectorAll(\"*[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n\n // Add our own IDL header\n idlIndexSec.appendChild(pre);\n wrapInner(pre, document.createElement(\"code\"));\n addIDLHeader(pre);\n}\n","/*\n@module \"core/dfn-index\"\nExtends and overrides some styles from `base.css`.\n*/\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nul.index {\n columns: 30ch;\n column-gap: 1.5em;\n}\n\nul.index li {\n list-style: inherit;\n}\n\nul.index li span {\n color: inherit;\n cursor: pointer;\n white-space: normal;\n}\n\n#index-defined-here ul.index li {\n font-size: 0.9rem;\n}\n\nul.index code {\n color: inherit;\n}\n\n#index-defined-here .print-only {\n display: none;\n}\n\n@media print {\n #index-defined-here .print-only {\n display: initial;\n }\n}\n`;\n","// @ts-check\n/**\n * If a `<section id=\"index\">` exists, it is filled by a list of terms defined\n * (locally) by current document and a list of terms referenced (external) by\n * current document.\n */\n\nimport { addId, getIntlData, norm } from \"./utils.js\";\nimport css from \"../styles/dfn-index.css.js\";\nimport { getTermFromElement } from \"./xref.js\";\nimport { html } from \"./import-maps.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\nimport { sub } from \"./pubsubhub.js\";\nimport { toCiteDetails } from \"./data-cite.js\";\n\nexport const name = \"core/dfn-index\";\n\nconst localizationStrings = {\n en: {\n heading: \"Index\",\n headingExternal: \"Terms defined by reference\",\n headlingLocal: \"Terms defined by this specification\",\n dfnOf: \"definition of\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Terms of these _types_ are wrapped in `<code>`.\nconst CODE_TYPES = new Set([\n \"attribute\",\n \"callback\",\n \"dict-member\",\n \"dictionary\",\n \"element-attr\",\n \"element\",\n \"enum-value\",\n \"enum\",\n \"exception\",\n \"extended-attribute\",\n \"interface\",\n \"method\",\n \"typedef\",\n]);\n\n/**\n * @typedef {{ term: string, type: string, linkFor: string, elem: HTMLAnchorElement }} Entry\n */\n\nexport function run() {\n const index = document.querySelector(\"section#index\");\n if (!index) {\n return;\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.textContent = css;\n document.head.appendChild(styleEl);\n\n index.classList.add(\"appendix\");\n if (!index.querySelector(\"h2\")) {\n index.prepend(html`<h2>${l10n.heading}</h2>`);\n }\n\n const localTermIndex = html`<section id=\"index-defined-here\">\n <h3>${l10n.headlingLocal}</h3>\n ${createLocalTermIndex()}\n </section>`;\n index.append(localTermIndex);\n\n const externalTermIndex = html`<section id=\"index-defined-elsewhere\">\n <h3>${l10n.headingExternal}</h3>\n ${createExternalTermIndex()}\n </section>`;\n index.append(externalTermIndex);\n for (const el of externalTermIndex.querySelectorAll(\".index-term\")) {\n addId(el, \"index-term\");\n }\n\n // XXX: This event is used to overcome an edge case with core/structure,\n // related to a circular dependency in plugin run order. We want\n // core/structure to run after dfn-index so the #index can be listed in the\n // TOC, but we also want section numbers in dfn-index. So, we \"split\"\n // core/dfn-index in two parts, one that runs before core/structure (using\n // plugin order in profile) and the other (following) after section numbers\n // are generated in core/structure (this event).\n sub(\"toc\", appendSectionNumbers, { once: true });\n\n sub(\"beforesave\", cleanup);\n}\n\nfunction createLocalTermIndex() {\n const dataSortedByTerm = collectLocalTerms();\n return html`<ul class=\"index\">\n ${dataSortedByTerm.map(([term, dfns]) => renderLocalTerm(term, dfns))}\n </ul>`;\n}\n\nfunction collectLocalTerms() {\n /** @type {Map<string, HTMLElement[]>} */\n const data = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"dfn:not([data-cite])\");\n for (const elem of elems) {\n if (!elem.id) continue;\n const text = norm(elem.textContent);\n const elemsByTerm = data.get(text) || data.set(text, []).get(text);\n elemsByTerm.push(elem);\n }\n\n const dataSortedByTerm = [...data].sort(([a], [b]) =>\n a.slice(a.search(/\\w/)).localeCompare(b.slice(b.search(/\\w/)))\n );\n\n return dataSortedByTerm;\n}\n\n/**\n * @param {string} term\n * @param {HTMLElement[]} dfns\n * @returns {HTMLLIElement}\n */\nfunction renderLocalTerm(term, dfns) {\n const renderItem = (dfn, text, suffix) => {\n const href = `#${dfn.id}`;\n return html`<li data-id=${dfn.id}>\n <a class=\"index-term\" href=\"${href}\">${{ html: text }}</a> ${suffix\n ? { html: suffix }\n : \"\"}\n </li>`;\n };\n\n if (dfns.length === 1) {\n const dfn = dfns[0];\n const type = getLocalTermType(dfn);\n const text = getLocalTermText(dfn, type, term);\n const suffix = getLocalTermSuffix(dfn, type, term);\n return renderItem(dfn, text, suffix);\n }\n return html`<li>\n ${term}\n <ul>\n ${dfns.map(dfn => {\n const type = getLocalTermType(dfn);\n const text = getLocalTermSuffix(dfn, type, term) || l10n.dfnOf;\n return renderItem(dfn, text);\n })}\n </ul>\n </li>`;\n}\n\n/** @param {HTMLElement} dfn */\nfunction getLocalTermType(dfn) {\n const ds = dfn.dataset;\n const type = ds.dfnType || ds.idl || ds.linkType || \"\";\n switch (type) {\n case \"\":\n case \"dfn\":\n return \"\";\n default:\n return type;\n }\n}\n\n/** @param {HTMLElement} dfn */\nfunction getLocalTermParentContext(dfn) {\n /** @type {HTMLElement} */\n const dfnFor = dfn.closest(\"[data-dfn-for]:not([data-dfn-for=''])\");\n return dfnFor ? dfnFor.dataset.dfnFor : \"\";\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {string} type\n * @param {string} term\n */\nfunction getLocalTermText(dfn, type, term) {\n let text = term;\n if (type === \"enum-value\") {\n text = `\"${text}\"`;\n }\n if (CODE_TYPES.has(type) || dfn.dataset.idl || dfn.closest(\"code\")) {\n text = `<code>${text}</code>`;\n }\n return text;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {string} type\n * @param {string} [term=\"\"]\n */\nfunction getLocalTermSuffix(dfn, type, term = \"\") {\n if (term.startsWith(\"[[\")) {\n const parent = getLocalTermParentContext(dfn);\n return `internal slot for <code>${parent}</code>`;\n }\n\n switch (type) {\n case \"dict-member\":\n case \"method\":\n case \"attribute\":\n case \"enum-value\": {\n const typeText =\n type === \"dict-member\" ? \"member\" : type.replace(\"-\", \" \");\n const parent = getLocalTermParentContext(dfn);\n return `${typeText} for <code>${parent}</code>`;\n }\n case \"interface\":\n case \"dictionary\":\n case \"enum\": {\n return type;\n }\n case \"constructor\": {\n const parent = getLocalTermParentContext(dfn);\n return `for <code>${parent}</code>`;\n }\n default:\n return \"\";\n }\n}\n\nfunction appendSectionNumbers() {\n const getSectionNumber = id => {\n const dfn = document.getElementById(id);\n const sectionNumberEl = dfn.closest(\"section\").querySelector(\".secno\");\n const secNum = `§${sectionNumberEl.textContent.trim()}`;\n return html`<span class=\"print-only\">${secNum}</span>`;\n };\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"#index-defined-here li[data-id]\");\n elems.forEach(el => el.append(getSectionNumber(el.dataset.id)));\n}\n\nfunction createExternalTermIndex() {\n const data = collectExternalTerms();\n const dataSortedBySpec = [...data.entries()].sort(([specA], [specB]) =>\n specA.localeCompare(specB)\n );\n return html`<ul class=\"index\">\n ${dataSortedBySpec.map(\n ([spec, entries]) => html`<li data-spec=\"${spec}\">\n ${renderInlineCitation(spec)} defines the following:\n <ul>\n ${entries\n .sort((a, b) => a.term.localeCompare(b.term))\n .map(renderExternalTermEntry)}\n </ul>\n </li>`\n )}\n </ul>`;\n}\n\nfunction collectExternalTerms() {\n /** @type {Set<string>} */\n const uniqueReferences = new Set();\n /** @type {Map<string, Entry[]>} spec => entry[] */\n const data = new Map();\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const elements = document.querySelectorAll(`a[data-cite]`);\n for (const elem of elements) {\n if (!elem.dataset.cite) {\n continue;\n }\n const uniqueID = elem.href;\n if (uniqueReferences.has(uniqueID)) {\n continue;\n }\n\n const { type, linkFor } = elem.dataset;\n const term = getTermFromElement(elem);\n if (!term) {\n continue; // <a data-cite=\"SPEC\"></a>\n }\n const spec = toCiteDetails(elem).key.toUpperCase();\n\n const entriesBySpec = data.get(spec) || data.set(spec, []).get(spec);\n entriesBySpec.push({ term, type, linkFor, elem });\n uniqueReferences.add(uniqueID);\n }\n\n return data;\n}\n\n/**\n * @param {Entry} entry\n * @returns {HTMLLIElement}\n */\nfunction renderExternalTermEntry(entry) {\n const { elem } = entry;\n const text = getTermText(entry);\n const el = html`<li>\n <span class=\"index-term\" data-href=\"${elem.href}\">${{ html: text }}</span>\n </li>`;\n return el;\n}\n\n// Terms of these _types_ are suffixed with their type info.\nconst TYPED_TYPES = new Map([\n [\"attribute\", \"attribute\"],\n [\"element-attr\", \"attribute\"],\n [\"element\", \"element\"],\n [\"enum\", \"enum\"],\n [\"exception\", \"exception\"],\n [\"extended-attribute\", \"extended attribute\"],\n [\"interface\", \"interface\"],\n]);\n\n// These _terms_ have type suffix \"type\".\nconst TYPE_TERMS = new Set([\n // Following are primitive types as per WebIDL spec:\n \"boolean\",\n \"byte\",\n \"octet\",\n \"short\",\n \"unsigned short\",\n \"long\",\n \"unsigned long\",\n \"long long\",\n \"unsigned long long\",\n \"float\",\n \"unrestricted float\",\n \"double\",\n \"unrestricted double\",\n // Following are not primitive types, but aren't interfaces either.\n \"undefined\",\n \"any\",\n \"object\",\n \"symbol\",\n]);\n\n/** @param {Entry} entry */\nfunction getTermText(entry) {\n const { term, type, linkFor } = entry;\n let text = term;\n\n if (CODE_TYPES.has(type)) {\n if (type === \"extended-attribute\") {\n text = `[${text}]`;\n }\n text = `<code>${text}</code>`;\n }\n\n const typeSuffix = TYPE_TERMS.has(term) ? \"type\" : TYPED_TYPES.get(type);\n if (typeSuffix) {\n text += ` ${typeSuffix}`;\n }\n\n if (linkFor) {\n let linkForText = linkFor;\n if (!/\\s/.test(linkFor)) {\n // If linkFor is a single word, highlight it.\n linkForText = `<code>${linkForText}</code>`;\n }\n if (type === \"element-attr\") {\n linkForText += \" element\";\n }\n text += ` (for ${linkForText})`;\n }\n\n return text;\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n doc\n .querySelectorAll(\"#index-defined-elsewhere li[data-spec]\")\n .forEach(el => el.removeAttribute(\"data-spec\"));\n\n doc\n .querySelectorAll(\"#index-defined-here li[data-id]\")\n .forEach(el => el.removeAttribute(\"data-id\"));\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","/* container for stats */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.caniuse-stats {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: baseline;\n cursor: pointer;\n}\n\nbutton.caniuse-cell {\n margin: 1px 1px 0 0;\n border: none;\n}\n\n.caniuse-browser {\n position: relative;\n}\n\n/* handle case when printing */\n@media print {\n .caniuse-cell.y::before {\n content: \"✔️\";\n padding: 0.5em;\n }\n\n .caniuse-cell.n::before{\n content: \"❌\";\n padding: 0.5em;\n }\n\n .caniuse-cell.d::before,\n .caniuse-cell.a::before,\n .caniuse-cell.x::before,\n .caniuse-cell.p::before {\n content: \"⚠️\";\n padding: 0.5em;\n }\n}\n\n/* reset styles, hide old versions by default */\n.caniuse-browser ul {\n display: none;\n margin: 0;\n padding: 0;\n list-style: none;\n position: absolute;\n left: 0;\n z-index: 2;\n background: #fff;\n margin-top: 1px;\n}\n\n.caniuse-stats a[href] {\n white-space: nowrap;\n align-self: center;\n margin-left: 0.5em;\n}\n\n/* a browser version */\n.caniuse-cell {\n display: flex;\n font-size: 90%;\n height: 0.8cm;\n margin-right: 1px;\n margin-top: 0;\n min-width: 3cm;\n overflow: visible;\n justify-content: center;\n align-items: center;\n\n --supported: #2a8436;\n --no-support: #c44230;\n --no-support-alt: #b43b2b;\n --partial: #807301;\n --partial-alt: #746c00;\n\n color: #fff;\n background: repeating-linear-gradient(\n var(--caniuse-angle, 45deg),\n var(--caniuse-bg) 0,\n var(--caniuse-bg-alt) 1px,\n var(--caniuse-bg-alt) 0.4em,\n var(--caniuse-bg) calc(0.25em + 1px),\n var(--caniuse-bg) 0.75em\n );\n}\n\nli.caniuse-cell {\n margin-bottom: 1px;\n}\n\n.caniuse-cell:focus {\n outline: none;\n}\n\n/* supports */\n.caniuse-cell.y {\n background: var(--supported);\n}\n\n/* no support, disabled by default */\n.caniuse-cell.n,\n.caniuse-cell.d {\n --caniuse-angle: 45deg;\n --caniuse-bg: var(--no-support);\n --caniuse-bg-alt: var(--no-support-alt);\n}\n\n.caniuse-cell.d {\n --caniuse-angle: 180deg;\n}\n\n/* not supported by default / partial support etc\nsee https://github.com/Fyrd/caniuse/blob/master/CONTRIBUTING.md for stats */\n.caniuse-cell.a,\n.caniuse-cell.x,\n.caniuse-cell.p {\n --caniuse-angle: 90deg;\n --caniuse-bg: var(--partial);\n --caniuse-bg-alt: var(--partial-alt);\n}\n\n/* show rest of the browser versions */\n.caniuse-stats button:focus + ul,\n.caniuse-stats .caniuse-browser:hover > ul {\n display: block;\n}\n`;\n","// @ts-check\n/**\n * Module: \"core/caniuse\"\n * Adds a caniuse support table for a \"feature\" #1238\n * Usage options: https://github.com/w3c/respec/wiki/caniuse\n */\nimport { pub, sub } from \"./pubsubhub.js\";\nimport { showError, showWarning } from \"./utils.js\";\nimport css from \"../styles/caniuse.css.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/caniuse\";\n\nconst API_URL = \"https://respec.org/caniuse/\";\n\nconst BROWSERS = new Set([\n \"and_chr\",\n \"and_ff\",\n \"and_uc\",\n \"android\",\n \"bb\",\n \"chrome\",\n \"edge\",\n \"firefox\",\n \"ie\",\n \"ios_saf\",\n \"op_mini\",\n \"op_mob\",\n \"opera\",\n \"safari\",\n \"samsung\",\n]);\n\nexport function prepare(conf) {\n if (!conf.caniuse) {\n return; // nothing to do.\n }\n const options = getNormalizedConf(conf);\n conf.caniuse = options; // for tests\n if (!options.feature) {\n return; // no feature to show\n }\n\n document.head.appendChild(html`<style class=\"removeOnSave\">\n ${css}\n </style>`);\n\n const apiUrl = options.apiURL || API_URL;\n // Initiate a fetch, but do not wait. Try to fill the cache early instead.\n conf.state[name] = {\n fetchPromise: fetchStats(apiUrl, options),\n };\n}\n\nexport async function run(conf) {\n const options = conf.caniuse;\n if (!options?.feature) return;\n\n const featureURL = new URL(options.feature, \"https://caniuse.com/\").href;\n\n const headDlElem = document.querySelector(\".head dl\");\n const contentPromise = (async () => {\n try {\n const stats = await conf.state[name].fetchPromise;\n return html`${{ html: stats }}`;\n } catch (err) {\n const msg = `Couldn't find feature \"${options.feature}\" on caniuse.com.`;\n const hint =\n \"Please check the feature key on [caniuse.com](https://caniuse.com)\";\n showError(msg, name, { hint });\n console.error(err);\n return html`<a href=\"${featureURL}\">caniuse.com</a>`;\n }\n })();\n const definitionPair = html`<dt class=\"caniuse-title\">Browser support:</dt>\n <dd class=\"caniuse-stats\">\n ${{\n any: contentPromise,\n placeholder: \"Fetching data from caniuse.com...\",\n }}\n </dd>`;\n headDlElem.append(...definitionPair.childNodes);\n await contentPromise;\n\n // remove from export\n pub(\"amend-user-config\", { caniuse: options.feature });\n sub(\"beforesave\", outputDoc => {\n html.bind(outputDoc.querySelector(\".caniuse-stats\"))`\n <a href=\"${featureURL}\">caniuse.com</a>`;\n });\n}\n\n/**\n * returns normalized `conf.caniuse` configuration\n * @param {Object} conf configuration settings\n */\nfunction getNormalizedConf(conf) {\n const DEFAULTS = { versions: 4 };\n if (typeof conf.caniuse === \"string\") {\n return { feature: conf.caniuse, ...DEFAULTS };\n }\n const caniuseConf = { ...DEFAULTS, ...conf.caniuse };\n const { browsers } = caniuseConf;\n if (Array.isArray(browsers)) {\n const invalidBrowsers = browsers.filter(browser => !BROWSERS.has(browser));\n if (invalidBrowsers.length) {\n const names = invalidBrowsers.map(b => `\"\\`${b}\\`\"`).join(\", \");\n const msg =\n `Ignoring invalid browser(s): ${names} in ` +\n \"[`respecConfig.caniuse.browsers`](https://github.com/w3c/respec/wiki/caniuse)\";\n showWarning(msg, name);\n }\n }\n return caniuseConf;\n}\n\n/**\n * @param {string} apiURL\n * @typedef {Record<string, [string, string[]][]>} ApiResponse\n * @throws {Error} on failure\n */\nasync function fetchStats(apiURL, options) {\n const { feature, versions, browsers } = options;\n const searchParams = new URLSearchParams();\n searchParams.set(\"feature\", feature);\n searchParams.set(\"versions\", versions);\n if (Array.isArray(browsers)) {\n searchParams.set(\"browsers\", browsers.join(\",\"));\n }\n searchParams.set(\"format\", \"html\");\n const url = `${apiURL}?${searchParams.toString()}`;\n const response = await fetch(url);\n if (!response.ok) {\n const { status, statusText } = response;\n throw new Error(`Failed to get caniuse data: (${status}) ${statusText}`);\n }\n const stats = await response.text();\n return stats;\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.mdn {\n font-size: 0.75em;\n position: absolute;\n right: 0.3em;\n min-width: 0;\n margin-top: 3em;\n}\n\n.mdn details {\n width: 100%;\n margin: 1px 0;\n position: relative;\n z-index: 10;\n box-sizing: border-box;\n padding: 0.4em;\n padding-top: 0;\n}\n\n.mdn details[open] {\n min-width: 25ch;\n max-width: 32ch;\n background: #fff;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n z-index: 11;\n margin-bottom: 0.4em;\n}\n\n.mdn summary {\n text-align: right;\n cursor: default;\n margin-right: -0.4em;\n}\n\n.mdn summary span {\n font-family: zillaslab, Palatino, \"Palatino Linotype\", serif;\n color: #fff;\n background-color: #000;\n display: inline-block;\n padding: 3px;\n}\n\n.mdn a {\n display: inline-block;\n word-break: break-all;\n}\n\n.mdn p {\n margin: 0;\n}\n\n.mdn .engines-all {\n color: #058b00;\n}\n.mdn .engines-some {\n color: #b00;\n}\n\n.mdn table {\n width: 100%;\n font-size: 0.9em;\n}\n\n.mdn td {\n border: none;\n}\n\n.mdn td:nth-child(2) {\n text-align: right;\n}\n\n.mdn .nosupportdata {\n font-style: italic;\n margin: 0;\n}\n\n.mdn tr::before {\n content: \"\";\n display: table-cell;\n width: 1.5em;\n height: 1.5em;\n background: no-repeat center center / contain;\n font-size: 0.75em;\n}\n\n.mdn .no,\n.mdn .unknown {\n color: #cccccc;\n filter: grayscale(100%);\n}\n\n.mdn .no::before,\n.mdn .unknown::before {\n opacity: 0.5;\n}\n\n.mdn .chrome::before,\n.mdn .chrome_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/chrome.svg);\n}\n\n.mdn .edge::before,\n.mdn .edge_mobile::before {\n background-image: url(https://resources.whatwg.org/browser-logos/edge.svg);\n}\n\n.mdn .firefox::before,\n.mdn .firefox_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/firefox.png);\n}\n\n.mdn .ie::before {\n background-image: url(https://resources.whatwg.org/browser-logos/ie.png);\n}\n\n.mdn .opera::before,\n.mdn .opera_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/opera.svg);\n}\n\n.mdn .safari::before {\n background-image: url(https://resources.whatwg.org/browser-logos/safari.png);\n}\n\n.mdn .safari_ios::before {\n background-image: url(https://resources.whatwg.org/browser-logos/safari-ios.svg);\n}\n\n.mdn .samsunginternet_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/samsung.svg);\n}\n\n.mdn .webview_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/android-webview.png);\n}\n`;\n","// @ts-check\nimport { fetchAndCache, getIntlData, showError } from \"./utils.js\";\nimport css from \"../styles/mdn-annotation.css.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/mdn-annotation\";\n\nconst BASE_JSON_PATH = \"https://w3c.github.io/mdn-spec-links/\";\nconst MDN_URL_BASE = \"https://developer.mozilla.org/en-US/docs/Web/\";\nconst MDN_BROWSERS = {\n // The browser IDs here must match the ones in the imported JSON data.\n // See the list of browser IDs at:\n // https://github.com/mdn/browser-compat-data/blob/master/schemas/compat-data-schema.md#browser-identifiers.\n chrome: \"Chrome\",\n chrome_android: \"Chrome Android\",\n edge: \"Edge\",\n edge_mobile: \"Edge Mobile\",\n firefox: \"Firefox\",\n firefox_android: \"Firefox Android\",\n ie: \"Internet Explorer\",\n // nodejs: \"Node.js\", // no data for features in HTML\n opera: \"Opera\",\n opera_android: \"Opera Android\",\n // qq_android: \"QQ Browser\", // not enough data for features in HTML\n safari: \"Safari\",\n safari_ios: \"Safari iOS\",\n samsunginternet_android: \"Samsung Internet\",\n // uc_android: \"UC browser\", // not enough data for features in HTML\n // uc_chinese_android: \"Chinese UC Browser\", // not enough data for features in HTML\n webview_android: \"WebView Android\",\n};\n\nconst localizationStrings = {\n en: {\n inAllEngines: \"This feature is in all major engines.\",\n inSomeEngines: \"This feature has limited support.\",\n },\n zh: {\n inAllEngines: \"所有主要引擎均支持此特性。\",\n inSomeEngines: \"此功能支持有限。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {HTMLElement} node\n */\nfunction insertMDNBox(node) {\n const targetAncestor = node.closest(\"section\");\n if (!targetAncestor) return;\n const { previousElementSibling: targetSibling } = targetAncestor;\n if (targetSibling && targetSibling.classList.contains(\"mdn\")) {\n // If the target ancestor already has a mdnBox inserted, we just use it\n return targetSibling;\n }\n const mdnBox = html`<aside class=\"mdn\"></aside>`;\n targetAncestor.before(mdnBox);\n return mdnBox;\n}\n\n/**\n * @param {MdnEntry} mdnSpec\n * @returns {HTMLDetailsElement}\n */\nfunction attachMDNDetail(mdnSpec) {\n const { name, slug, summary, support, engines } = mdnSpec;\n const mdnSubPath = slug.slice(slug.indexOf(\"/\") + 1);\n const href = `${MDN_URL_BASE}${slug}`;\n const label = `Expand MDN details for ${name}`;\n const engineSupport = getEngineSupportIcons(engines);\n return html`<details>\n <summary aria-label=\"${label}\"><span>MDN</span>${engineSupport}</summary>\n <a title=\"${summary}\" href=\"${href}\">${mdnSubPath}</a>\n ${getEngineSupport(engines)}\n ${support\n ? buildBrowserSupportTable(support)\n : html`<p class=\"nosupportdata\">No support data.</p>`}\n </details>`;\n}\n\n/**\n * @param {MdnEntry['support']} support\n * @returns {HTMLTableElement}\n */\nfunction buildBrowserSupportTable(support) {\n /**\n * @param {string | keyof MDN_BROWSERS} browserId\n * @param {\"Yes\" | \"No\" | \"Unknown\"} yesNoUnknown\n * @param {string} version\n * @returns {HTMLTableRowElement}\n */\n function createRow(browserId, yesNoUnknown, version) {\n const displayStatus = yesNoUnknown === \"Unknown\" ? \"?\" : yesNoUnknown;\n const classList = `${browserId} ${yesNoUnknown.toLowerCase()}`;\n return html`<tr class=\"${classList}\">\n <td>${MDN_BROWSERS[browserId]}</td>\n <td>${version ? version : displayStatus}</td>\n </tr>`;\n }\n\n /**\n * @param {string | keyof MDN_BROWSERS} browserId\n * @param {VersionDetails} versionData\n */\n function createRowFromBrowserData(browserId, versionData) {\n if (versionData.version_removed) {\n return createRow(browserId, \"No\", \"\");\n }\n const versionAdded = versionData.version_added;\n if (typeof versionAdded === \"boolean\") {\n return createRow(browserId, versionAdded ? \"Yes\" : \"No\", \"\");\n } else if (!versionAdded) {\n return createRow(browserId, \"Unknown\", \"\");\n } else {\n return createRow(browserId, \"Yes\", `${versionAdded}+`);\n }\n }\n\n return html`<table>\n ${Object.keys(MDN_BROWSERS).map(browserId => {\n return support[browserId]\n ? createRowFromBrowserData(browserId, support[browserId])\n : createRow(browserId, \"Unknown\", \"\");\n })}\n </table>`;\n}\n\nexport async function run(conf) {\n const mdnKey = getMdnKey(conf);\n if (!mdnKey) return;\n\n const mdnSpecJson = await getMdnData(mdnKey, conf.mdn);\n if (!mdnSpecJson) return;\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.append(style);\n\n for (const elem of findElements(mdnSpecJson)) {\n const mdnSpecArray = mdnSpecJson[elem.id];\n const mdnBox = insertMDNBox(elem);\n if (!mdnBox) continue;\n for (const spec of mdnSpecArray) {\n mdnBox.append(attachMDNDetail(spec));\n }\n }\n}\n\n/** @returns {string} */\nfunction getMdnKey(conf) {\n const { shortName, mdn } = conf;\n if (!mdn) return;\n if (typeof mdn === \"string\") return mdn;\n return mdn.key || shortName;\n}\n\n/**\n * @param {string} key MDN key\n * @param {object} mdnConf\n * @param {string} [mdnConf.specMapUrl]\n * @param {string} [mdnConf.baseJsonPath]\n * @param {number} [mdnConf.maxAge]\n *\n * @typedef {{ version_added: string|boolean|null, version_removed?: string }} VersionDetails\n * @typedef {Record<string | keyof MDN_BROWSERS, VersionDetails>} MdnSupportEntry\n * @typedef {{ name: string, title: string, slug: string, summary: string, support: MdnSupportEntry, engines: string[] }} MdnEntry\n * @typedef {Record<string, MdnEntry[]>} MdnData\n * @returns {Promise<MdnData|undefined>}\n */\nasync function getMdnData(key, mdnConf) {\n const {\n baseJsonPath = BASE_JSON_PATH,\n maxAge = 60 * 60 * 24 * 1000,\n } = mdnConf;\n const url = new URL(`${key}.json`, baseJsonPath).href;\n const res = await fetchAndCache(url, maxAge);\n if (res.status === 404) {\n const msg = `Could not find MDN data associated with key \"${key}\".`;\n const hint = \"Please add a valid key to `respecConfig.mdn`\";\n showError(msg, name, { hint });\n return;\n }\n return await res.json();\n}\n\n/**\n * Find elements that can have an annotation box attached.\n * @param {MdnData} data\n */\nfunction findElements(data) {\n /** @type {NodeListOf<HTMLElement>} */\n const elemsWithId = document.body.querySelectorAll(\"[id]:not(script)\");\n return [...elemsWithId].filter(({ id }) => Array.isArray(data[id]));\n}\n\n/**\n * @param {MdnEntry['engines']} engines\n * @returns {HTMLSpanElement}\n */\nfunction getEngineSupportIcons(engines) {\n if (engines.length === 3) {\n return html`<span title=\"${l10n.inAllEngines}\">✅</span>`;\n }\n if (engines.length < 2) {\n return html`<span title=\"${l10n.inSomeEngines}\">🚫</span>`;\n }\n return html`<span> </span>`;\n}\n\n/**\n * @param {MdnEntry['engines']} engines\n * @returns {HTMLParagraphElement|undefined}\n */\nfunction getEngineSupport(engines) {\n if (engines.length === 3) {\n return html`<p class=\"engines-all\">${l10n.inAllEngines}</p>`;\n }\n if (engines.length < 2) {\n return html`<p class=\"engines-some\">${l10n.inSomeEngines}</p>`;\n }\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nfunction serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/search-specref\n// Search Specref database\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst URL = \"https://respec.org/specref/\";\n\nconst localizationStrings = {\n en: {\n search_specref: \"Search Specref\",\n },\n nl: {\n search_specref: \"Doorzoek Specref\",\n },\n ja: {\n search_specref: \"仕様検索\",\n },\n de: {\n search_specref: \"Spezifikationen durchsuchen\",\n },\n zh: {\n search_specref: \"搜索 Specref\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst button = ui.addCommand(\n l10n.search_specref,\n show,\n \"Ctrl+Shift+Alt+space\",\n \"🔎\"\n);\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n /** @type {HTMLElement} */\n const specrefSearchUI = html`\n <iframe class=\"respec-iframe\" src=\"${URL}\" onload=${onLoad}></iframe>\n <a href=\"${URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.search_specref, specrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/search-xref\n// Search xref database\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst URL = \"https://respec.org/xref/\";\n\nconst localizationStrings = {\n en: {\n title: \"Search definitions\",\n },\n ja: {\n title: \"定義検索\",\n },\n de: {\n title: \"Definitionen durchsuchen\",\n },\n zh: {\n title: \"搜索定义\",\n },\n};\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\nconst l10n = localizationStrings[lang];\n\nconst button = ui.addCommand(l10n.title, show, \"Ctrl+Shift+Alt+x\", \"📚\");\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n const xrefSearchUI = html`\n <iframe class=\"respec-iframe\" src=\"${URL}\" onload=\"${onLoad}\"></iframe>\n <a href=\"${URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.title, xrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","// @ts-check\n// Module w3c/seo\n// Manages SEO information for documents\n// e.g. set the canonical URL for the document if configured\nimport { resolveRef } from \"../core/biblio.js\";\nimport { showWarning } from \"../core/utils.js\";\nexport const name = \"w3c/seo\";\nexport async function run(conf) {\n // Don't include a canonical URL for documents\n // that haven't been published.\n if (!conf.canonicalURI) {\n switch (conf.specStatus) {\n case \"CG-DRAFT\":\n case \"BG-DRAFT\":\n case \"unofficial\":\n return;\n }\n }\n const trLatestUri = conf.shortName\n ? `https://www.w3.org/TR/${conf.shortName}/`\n : null;\n switch (conf.canonicalURI) {\n case \"edDraft\":\n if (conf.edDraftURI) {\n conf.canonicalURI = new URL(\n conf.edDraftURI,\n document.location.href\n ).href;\n } else {\n const msg = `Canonical URI set to edDraft, but no edDraftURI is set in configuration`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n break;\n case \"TR\":\n if (trLatestUri) {\n conf.canonicalURI = trLatestUri;\n } else {\n const msg = `Canonical URI set to TR, but no shortName is set in configuration`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n break;\n default:\n if (conf.canonicalURI) {\n try {\n conf.canonicalURI = new URL(\n conf.canonicalURI,\n document.location.href\n ).href;\n } catch (err) {\n const msg = `CanonicalURI is an invalid URL: ${err.message}`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n } else if (trLatestUri) {\n conf.canonicalURI = trLatestUri;\n }\n }\n if (conf.canonicalURI) {\n const linkElem = document.createElement(\"link\");\n linkElem.setAttribute(\"rel\", \"canonical\");\n linkElem.setAttribute(\"href\", conf.canonicalURI);\n document.head.appendChild(linkElem);\n }\n if (conf.doJsonLd) {\n await addJSONLDInfo(conf, document);\n }\n}\n\nasync function addJSONLDInfo(conf, doc) {\n // Content for JSON\n const type = [\"TechArticle\"];\n if (conf.rdfStatus) type.push(conf.rdfStatus);\n\n const jsonld = {\n \"@context\": [\n \"http://schema.org\",\n {\n \"@vocab\": \"http://schema.org/\",\n \"@language\": doc.documentElement.lang || \"en\",\n w3p: \"http://www.w3.org/2001/02pd/rec54#\",\n foaf: \"http://xmlns.com/foaf/0.1/\",\n datePublished: { \"@type\": \"http://www.w3.org/2001/XMLSchema#date\" },\n inLanguage: { \"@language\": null },\n isBasedOn: { \"@type\": \"@id\" },\n license: { \"@type\": \"@id\" },\n },\n ],\n id: conf.canonicalURI || conf.thisVersion,\n type,\n name: document.title,\n inLanguage: doc.documentElement.lang || \"en\",\n license: conf.licenseInfo.url,\n datePublished: conf.dashDate,\n /** @type {{ name: string, url?: string } | { name: string, url?: string }[]} */\n copyrightHolder: {\n name: \"World Wide Web Consortium\",\n url: \"https://www.w3.org/\",\n },\n discussionUrl: conf.issueBase,\n alternativeHeadline: conf.subtitle,\n isBasedOn: conf.prevVersion,\n };\n\n // add any additional copyright holders\n if (conf.additionalCopyrightHolders) {\n const addl = Array.isArray(conf.additionalCopyrightHolders)\n ? conf.additionalCopyrightHolders\n : [conf.additionalCopyrightHolders];\n jsonld.copyrightHolder = [\n jsonld.copyrightHolder,\n ...addl.map(h => ({ name: h })),\n ];\n }\n\n // description from meta description\n const description = doc.head.querySelector(\"meta[name=description]\");\n if (description) {\n jsonld.description = description.content;\n }\n\n // Editors\n if (conf.editors) {\n jsonld.editor = conf.editors.map(addPerson);\n }\n if (conf.authors) {\n jsonld.contributor = conf.authors.map(addPerson);\n }\n\n // normative and informative references\n const citationIds = [\n ...conf.normativeReferences,\n ...conf.informativeReferences,\n ];\n const citationContents = await Promise.all(\n citationIds.map(ref => resolveRef(ref))\n );\n jsonld.citation = citationContents\n .filter(ref => typeof ref === \"object\")\n .map(addRef);\n\n const script = doc.createElement(\"script\");\n script.type = \"application/ld+json\";\n script.textContent = JSON.stringify(jsonld, null, 2);\n doc.head.appendChild(script);\n}\n\n/**\n * Turn editors and authors into a list of JSON-LD relationships\n */\nfunction addPerson({ name, url, mailto, company, companyURL }) {\n const ed = {\n type: \"Person\",\n name,\n url,\n \"foaf:mbox\": mailto,\n };\n if (company || companyURL) {\n ed.worksFor = {\n name: company,\n url: companyURL,\n };\n }\n return ed;\n}\n\n/**\n * Create a reference URL from the ref\n */\nfunction addRef(ref) {\n const { href: id, title: name, href: url } = ref;\n const jsonld = {\n id,\n type: \"TechArticle\",\n name,\n url,\n };\n if (ref.authors) {\n jsonld.creator = ref.authors.map(a => ({ name: a }));\n }\n if (ref.rawDate) {\n jsonld.publishedDate = ref.rawDate;\n }\n if (ref.isbn) {\n jsonld.identifier = ref.isbn;\n }\n if (ref.publisher) {\n jsonld.publisher = { name: ref.publisher };\n }\n return jsonld;\n}\n","/*\nAdapted from Atom One Light by Daniel Gamage for ReSpec, with better color contrast\nOriginal One Light Syntax theme from https://github.com/atom/one-light-syntax\nbase: #fafafa\nmono-1: #383a42\nmono-2: #686b77\nmono-3: #a0a1a7\nhue-1: #0184bb\nhue-2: #4078f2\nhue-3: #a626a4\nhue-4: #50a14f\nhue-5: #e45649\nhue-5-2: #c91243\nhue-6: #986801\nhue-6-2: #c18401\n*/\n\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n color: #383a42;\n background: #fafafa;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #717277;\n font-style: italic;\n}\n\n.hljs-doctag,\n.hljs-keyword,\n.hljs-formula {\n color: #a626a4;\n}\n\n.hljs-section,\n.hljs-name,\n.hljs-selector-tag,\n.hljs-deletion,\n.hljs-subst {\n color: #ca4706;\n font-weight: bold;\n}\n\n.hljs-literal {\n color: #0b76c5;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta-string {\n color: #42803C;\n}\n\n.hljs-built_in,\n.hljs-class .hljs-title {\n color: #9a6a01;\n}\n\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-type,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-number {\n color: #986801;\n}\n\n.hljs-symbol,\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-title {\n color: #336ae3;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n.hljs-link {\n text-decoration: underline;\n}\n`;\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport css from \"../styles/highlight.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n document.head.appendChild(\n html`<style>\n ${css}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\n/**\n * Module core/data-tests\n *\n * Allows specs to link to test files in a test suite, by adding `details` of where\n * particular tests for a testable assertion can be found.\n *\n * `data-tests` takes a space separated list of URLs, e.g. data-test=\"foo.html bar.html\".\n *\n * Docs: https://github.com/w3c/respec/wiki/data-tests\n */\nimport { getIntlData, showError, showWarning } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst localizationStrings = {\n en: {\n missing_test_suite_uri:\n \"Found tests in your spec, but missing '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.\",\n tests: \"tests\",\n test: \"test\",\n },\n ja: {\n missing_test_suite_uri:\n \"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.\",\n tests: \"テスト\",\n test: \"テスト\",\n },\n de: {\n missing_test_suite_uri:\n \"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.\",\n tests: \"Tests\",\n test: \"Test\",\n },\n zh: {\n missing_test_suite_uri:\n \"本规范中包含测试,但在 ReSpec 配置中缺少 '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。\",\n tests: \"测试\",\n test: \"测试\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport const name = \"core/data-tests\";\n\nfunction toListItem(href) {\n const emojiList = [];\n const [testFile] = new URL(href).pathname.split(\"/\").reverse();\n const testParts = testFile.split(\".\");\n let [testFileName] = testParts;\n\n const isSecureTest = testParts.find(part => part === \"https\");\n if (isSecureTest) {\n const requiresConnectionEmoji = document.createElement(\"span\");\n requiresConnectionEmoji.textContent = \"🔒\";\n requiresConnectionEmoji.setAttribute(\n \"aria-label\",\n \"requires a secure connection\"\n );\n requiresConnectionEmoji.setAttribute(\"title\", \"Test requires HTTPS\");\n testFileName = testFileName.replace(\".https\", \"\");\n emojiList.push(requiresConnectionEmoji);\n }\n\n const isManualTest = testFileName\n .split(\".\")\n .join(\"-\")\n .split(\"-\")\n .find(part => part === \"manual\");\n if (isManualTest) {\n const manualPerformEmoji = document.createElement(\"span\");\n manualPerformEmoji.textContent = \"💪\";\n manualPerformEmoji.setAttribute(\n \"aria-label\",\n \"the test must be run manually\"\n );\n manualPerformEmoji.setAttribute(\"title\", \"Manual test\");\n testFileName = testFileName.replace(\"-manual\", \"\");\n emojiList.push(manualPerformEmoji);\n }\n\n const testList = html`\n <li>\n <a href=\"${href}\">${testFileName}</a>\n ${emojiList}\n </li>\n `;\n return testList;\n}\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n if (!testables.length) {\n return;\n }\n if (!conf.testSuiteURI) {\n showError(l10n.missing_test_suite_uri, name);\n return;\n }\n\n for (const elem of testables) {\n const tests = elem.dataset.tests.split(/,/gm).map(url => url.trim());\n const testURLs = toTestURLs(tests, conf.testSuiteURI);\n handleDuplicates(testURLs, elem);\n const details = toHTML(testURLs);\n elem.append(details);\n }\n}\n\n/**\n * @param {string[]} tests\n * @param {string} testSuiteURI\n */\nfunction toTestURLs(tests, testSuiteURI) {\n return tests\n .map(test => {\n try {\n return new URL(test, testSuiteURI).href;\n } catch {\n const msg = `Bad URI: ${test}`;\n showWarning(msg, name);\n }\n })\n .filter(href => href);\n}\n\n/**\n * @param {string[]} testURLs\n * @param {HTMLElement} elem\n */\nfunction handleDuplicates(testURLs, elem) {\n const duplicates = testURLs.filter(\n (link, i, self) => self.indexOf(link) !== i\n );\n if (duplicates.length) {\n const msg = `Duplicate tests found`;\n const hint = `To fix, remove duplicates from \"data-tests\": ${duplicates\n .map(url => new URL(url).pathname)\n .join(\", \")}`;\n showWarning(msg, name, { hint, elements: [elem] });\n }\n}\n\n/**\n * @param {string[]} testURLs\n */\nfunction toHTML(testURLs) {\n const uniqueList = [...new Set(testURLs)];\n const details = html`\n <details class=\"respec-tests-details removeOnSave\">\n <summary>tests: ${uniqueList.length}</summary>\n <ul>\n ${uniqueList.map(toListItem)}\n </ul>\n </details>\n `;\n return details;\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\nvar.respec-hl {\n color: var(--color, #000);\n background-color: var(--bg-color);\n box-shadow: 0 0 0px 2px var(--bg-color);\n}\n\n/* highlight colors\n https://github.com/w3c/tr-design/issues/152\n*/\nvar.respec-hl-c1 {\n --bg-color: #f4d200;\n}\n\nvar.respec-hl-c2 {\n --bg-color: #ff87a2;\n}\n\nvar.respec-hl-c3 {\n --bg-color: #96e885;\n}\n\nvar.respec-hl-c4 {\n --bg-color: #3eeed2;\n}\n\nvar.respec-hl-c5 {\n --bg-color: #eacfb6;\n}\n\nvar.respec-hl-c6 {\n --bg-color: #82ddff;\n}\n\nvar.respec-hl-c7 {\n --bg-color: #ffbcf2;\n}\n\n@media print {\n var.respec-hl {\n background: none;\n color: #000;\n box-shadow: unset;\n }\n}\n`;\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport css from \"../styles/var.css.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","/* dfn popup panel that list all local references to a dfn */\n/**\n * TODO: Revert changes due to https://github.com/w3c/respec/pull/2888 when\n * https://github.com/w3c/css-validator/pull/111 is fixed.\n */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\ndfn {\n cursor: pointer;\n}\n\n.dfn-panel {\n position: absolute;\n z-index: 35;\n min-width: 300px;\n max-width: 500px;\n padding: 0.5em 0.75em;\n margin-top: 0.6em;\n font: small Helvetica Neue, sans-serif, Droid Sans Fallback;\n background: #fff;\n color: black;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n}\n/* Triangle/caret */\n.dfn-panel:not(.docked) > .caret {\n position: absolute;\n top: -9px;\n}\n.dfn-panel:not(.docked) > .caret::before,\n.dfn-panel:not(.docked) > .caret::after {\n content: \"\";\n position: absolute;\n border: 10px solid transparent;\n border-top: 0;\n border-bottom: 10px solid #fff;\n top: 0;\n}\n.dfn-panel:not(.docked) > .caret::before {\n border-bottom: 9px solid #a2a9b1;\n}\n\n.dfn-panel * {\n margin: 0;\n}\n\n.dfn-panel b {\n display: block;\n color: #000;\n margin-top: 0.25em;\n}\n\n.dfn-panel ul a[href] {\n color: #333;\n}\n\n.dfn-panel > div {\n display: flex;\n}\n\n.dfn-panel a.self-link {\n font-weight: bold;\n margin-right: auto;\n}\n\n.dfn-panel .marker {\n padding: 0.1em;\n margin-left: 0.5em;\n border-radius: 0.2em;\n text-align: center;\n white-space: nowrap;\n font-size: 90%;\n color: #040b1c;\n}\n\n.dfn-panel .marker.dfn-exported {\n background: #d1edfd;\n box-shadow: 0 0 0 0.125em #1ca5f940;\n}\n.dfn-panel .marker.idl-block {\n background: #8ccbf2;\n box-shadow: 0 0 0 0.125em #0670b161;\n}\n\n.dfn-panel a:not(:hover) {\n text-decoration: none !important;\n border-bottom: none !important;\n}\n\n.dfn-panel a[href]:hover {\n border-bottom-width: 1px;\n}\n\n.dfn-panel ul {\n padding: 0;\n}\n\n.dfn-panel li {\n margin-left: 1em;\n}\n\n.dfn-panel.docked {\n position: fixed;\n left: 0.5em;\n top: unset;\n bottom: 2em;\n margin: 0 auto;\n /* 0.75em from padding (x2), 0.5em from left position, 0.2em border (x2) */\n max-width: calc(100vw - 0.75em * 2 - 0.5em - 0.2em * 2);\n max-height: 30vh;\n overflow: auto;\n}\n`;\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport css from \"../styles/dfn-panel.css.js\";\nimport { fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar {\n position: relative;\n cursor: pointer;\n}\n\nvar[data-type]::before,\nvar[data-type]::after {\n position: absolute;\n left: 50%;\n top: -6px;\n opacity: 0;\n transition: opacity 0.4s;\n pointer-events: none;\n}\n\n/* the triangle or arrow or caret or whatever */\nvar[data-type]::before {\n content: \"\";\n transform: translateX(-50%);\n border-width: 4px 6px 0 6px;\n border-style: solid;\n border-color: transparent;\n border-top-color: #000;\n}\n\n/* actual text */\nvar[data-type]::after {\n content: attr(data-type);\n transform: translateX(-50%) translateY(-100%);\n background: #000;\n text-align: center;\n /* additional styling */\n font-family: \"Dank Mono\", \"Fira Code\", monospace;\n font-style: normal;\n padding: 6px;\n border-radius: 3px;\n color: #daca88;\n text-indent: 0;\n font-weight: normal;\n}\n\nvar[data-type]:hover::after,\nvar[data-type]:hover::before {\n opacity: 1;\n}\n`;\n","// @ts-check\n/**\n * Module core/data-type\n * Propagates data type of a <var> to subsequent instances within a section.\n * Also adds the CSS for the data type tooltip.\n * Set `conf.highlightVars = true` to enable.\n */\nimport css from \"../styles/datatype.css.js\";\n\nexport const name = \"core/data-type\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n let section = null;\n const varMap = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const variables = document.querySelectorAll(\"section var\");\n for (const varElem of variables) {\n const currentSection = varElem.closest(\"section\");\n if (section !== currentSection) {\n section = currentSection;\n varMap.clear();\n }\n if (varElem.dataset.type) {\n varMap.set(varElem.textContent.trim(), varElem.dataset.type);\n continue;\n }\n const type = varMap.get(varElem.textContent.trim());\n if (type) varElem.dataset.type = type;\n }\n}\n","/* For assertions in lists containing algorithms */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.assert {\n background: #eee;\n border-left: 0.5em solid #aaa;\n padding: 0.3em;\n}\n`;\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\nimport css from \"../styles/algorithms.css.js\";\n\nexport const name = \"core/algorithms\";\n\nexport function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n","// @ts-check\n/**\n * Fetches commits between two commitish (tag or commit) - `from` and `to=HEAD`\n * and shows them as a list of \"changes during\" those commitish. If a filter\n * function is provided by the user, it is used to filter the commits that are\n * to be shown. Otherwise, all commits are shown.\n *\n * @typedef {{message: string, hash: string}} Commit\n */\nimport { github } from \"../github.js\";\nimport { html } from \"../import-maps.js\";\nimport { showError } from \"../utils.js\";\n\nexport const name = \"rs-changelog\";\n\nexport const element = class ChangelogElement extends HTMLElement {\n constructor() {\n super();\n this.props = {\n from: this.getAttribute(\"from\"),\n to: this.getAttribute(\"to\") || \"HEAD\",\n /** @type {(commit: Commit) => boolean} */\n filter:\n typeof window[this.getAttribute(\"filter\")] === \"function\"\n ? window[this.getAttribute(\"filter\")]\n : () => true,\n };\n }\n\n connectedCallback() {\n const { from, to, filter } = this.props;\n html.bind(this)`\n <ul>\n ${{\n any: fetchCommits(from, to, filter)\n .then(commits => toHTML(commits))\n .catch(error => showError(error.message, name, { elements: [this] }))\n .finally(() => {\n this.dispatchEvent(new CustomEvent(\"done\"));\n }),\n placeholder: \"Loading list of commits...\",\n }}\n </ul>\n `;\n }\n};\n\nasync function fetchCommits(from, to, filter) {\n /** @type {Commit[]} */\n let commits;\n try {\n const gh = await github;\n if (!gh) {\n throw new Error(\"`respecConfig.github` is not set\");\n }\n const url = new URL(\"commits\", `${gh.apiBase}/${gh.fullName}/`);\n url.searchParams.set(\"from\", from);\n url.searchParams.set(\"to\", to);\n\n const res = await fetch(url.href);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n commits = await res.json();\n if (!commits.length) {\n throw new Error(`No commits between ${from}..${to}.`);\n }\n commits = commits.filter(filter);\n } catch (error) {\n const msg = `Error loading commits from GitHub. ${error.message}`;\n console.error(error);\n throw new Error(msg);\n }\n return commits;\n}\n\nasync function toHTML(commits) {\n const { repoURL } = await github;\n return commits.map(commit => {\n const [message, prNumber = null] = commit.message.split(/\\(#(\\d+)\\)/, 2);\n const commitURL = `${repoURL}commit/${commit.hash}`;\n const prURL = prNumber ? `${repoURL}pull/${prNumber}` : null;\n const pr = prNumber && html` (<a href=\"${prURL}\">#${prNumber}</a>)`;\n return html`<li><a href=\"${commitURL}\">${message.trim()}</a>${pr}</li>`;\n });\n}\n","// @ts-check\n/**\n * Registers custom elements and waits for them to finish their processing.\n *\n * Every custom element file exports:\n * - `name`: registered name of the custom element, prefixed with `rs-`.\n * - `element`: class defintion of the custom element.\n *\n * Every custom element must dispatch a CustomEvent 'done' that tells the\n * element has finished its processing, with or without errors.\n *\n * @typedef {{ name: string, element: CustomElementConstructor }} CustomElementDfn\n */\n\nimport * as changelog from \"./rs-changelog.js\";\n/** @type {CustomElementDfn[]} */\nconst CUSTOM_ELEMENTS = [changelog];\n\nexport const name = \"core/custom-elements/index\";\n\nexport async function run() {\n // prepare and register elements\n CUSTOM_ELEMENTS.forEach(el => {\n customElements.define(el.name, el.element);\n });\n\n // wait for each element to be ready\n const selectors = CUSTOM_ELEMENTS.map(el => el.name).join(\", \");\n const elems = document.querySelectorAll(selectors);\n const readyPromises = [...elems].map(\n el => new Promise(res => el.addEventListener(\"done\", res, { once: true }))\n );\n await Promise.all(readyPromises);\n}\n","// @ts-check\n/**\n * Module: core/a11y\n * Lints for accessibility issues using axe-core package.\n */\n\nimport { showError, showWarning } from \"./utils.js\";\n\nexport const name = \"core/a11y\";\n\nconst DISABLED_RULES = [\n \"color-contrast\", // too slow 🐢\n \"landmark-one-main\", // need to add a <main>, else it marks entire page as errored\n \"landmark-unique\",\n \"region\",\n];\n\nexport async function run(conf) {\n if (!conf.a11y) {\n return;\n }\n\n const options = conf.a11y === true ? {} : conf.a11y;\n const violations = await getViolations(options);\n for (const violation of violations) {\n /**\n * We're grouping by failureSummary as it contains hints to fix the issue.\n * For example, with color-constrast rule, it tells about the present color\n * contrast and how to fix it. If we don't group, errors will be repetitive.\n * @type {Map<string, HTMLElement[]>}\n */\n const groupedBySummary = new Map();\n for (const node of violation.nodes) {\n const { failureSummary, element } = node;\n const elements =\n groupedBySummary.get(failureSummary) ||\n groupedBySummary.set(failureSummary, []).get(failureSummary);\n elements.push(element);\n }\n\n const { id, help, description, helpUrl } = violation;\n const title = `a11y/${id}: ${help}`;\n for (const [failureSummary, elements] of groupedBySummary) {\n const hints = formatHintsAsMarkdown(failureSummary);\n const details = `\\n\\n${description}.\\n\\n${hints}. ([Learn more](${helpUrl}))`;\n showWarning(title, name, { details, elements });\n }\n }\n}\n\n/**\n * @param {object} opts Options as described at https://github.com/dequelabs/axe-core/blob/develop/doc/API.md#options-parameter\n */\nasync function getViolations(opts) {\n const { rules, ...otherOptions } = opts;\n const options = {\n rules: {\n ...Object.fromEntries(DISABLED_RULES.map(id => [id, { enabled: false }])),\n ...rules,\n },\n ...otherOptions,\n elementRef: true,\n resultTypes: [\"violations\"],\n reporter: \"v1\", // v1 includes a `failureSummary`\n };\n\n let axe;\n try {\n axe = await importAxe();\n } catch (error) {\n const msg = \"Failed to load a11y linter.\";\n showError(msg, name);\n console.error(error);\n return [];\n }\n\n try {\n const result = await axe.run(document, options);\n return result.violations;\n } catch (error) {\n const msg = \"Error while looking for a11y issues.\";\n showError(msg, name);\n console.error(error);\n return [];\n }\n}\n\n/** @returns {Promise<typeof window.axe>} */\nfunction importAxe() {\n const script = document.createElement(\"script\");\n script.classList.add(\"remove\");\n script.src = \"https://unpkg.com/axe-core@3/axe.min.js\";\n document.head.appendChild(script);\n return new Promise((resolve, reject) => {\n script.onload = () => resolve(window.axe);\n script.onerror = reject;\n });\n}\n\n/** @param {string} text */\nfunction formatHintsAsMarkdown(text) {\n const results = [];\n for (const group of text.split(\"\\n\\n\")) {\n const [msg, ...opts] = group.split(/^\\s{2}/m);\n const options = opts.map(opt => `- ${opt.trimEnd()}`).join(\"\\n\");\n results.push(`${msg}${options}`);\n }\n return results.join(\"\\n\\n\");\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","source","position","current","kind","level","autofix","ruleName","sliceTokens","count","slice","Math","max","tokensToText","inputs","precedes","text","t","trivia","join","nextToken","type","length","line","precedingLastLine","splitted","split","lastLine","subsequentTokens","subsequentText","sourceContext","repeat","contextType","context","partial","node","hierarchy","parent","unshift","n","base","appendIfExist","contextAsText","bareMessage","sourceName","input","tokens","syntaxError","validationError","token","options","Base","Object","defineProperties","writable","json","inheritance","proto","descMap","getOwnPropertyDescriptors","key","entries","enumerable","getPrototypeOf","idlTypeIncludesDictionary","idlType","defs","useNullableInner","union","def","unique","typedefIncludesDictionary","cache","reference","dictionary","nullable","subtype","dictionaryIncludesRequiredField","dict","members","field","required","superdict","ArrayBase","Array","super","Token","tokeniser","consume","unescape","tokenName","list","parser","listName","extAttrValueSyntax","renamedLegacies","extAttrListItems","syntax","toks","ExtendedAttributeParameters","assign","ret","autoParenter","secondaryName","rhsIsList","argument_list","close","hasRhs","rhsType","SimpleExtendedAttribute","params","parse","defineProperty","rhs","arguments","extAttr","arg","validate","ExtendedAttributes","push","probe","type_suffix","obj","single_type","typeName","Type","return_type","type_with_extended_attributes","keyType","stringTypes","keyIdlType","separator","valueType","generic_type","primitive_type","typeNameKeywords","generic","typ","or","union_type","extAttrs","Boolean","prefix","postfix","filter","typedef","targetToken","Default","const_value","expression","const_data","negative","Argument","start_position","optional","variadic","argumentNameKeywords","default","unconsume","autofixOptionalDictionaryDefaultValue","indexOf","a","isLastRequiredArgument","firstToken","getFirstToken","Tokeniser","Operation","special","regular","termination","argument","Attribute","noInherit","readonly","identifier","startsWith","allowDangler","first","items","item","num_type","integer_type","decimal_type","voidToken","stringifier","getLastIndentation","str","lines","match","autofixAddExposedWindow","exposed","existing","test","data","values","x","y","p","isArray","tokenRe","decimal","integer","string","whitespace","comment","other","nonRegexTerminals","concat","punctuations","reserved","idl","lastCharIndex","nextChar","charAt","attemptTokenMatch","noFlushTrivia","currentTrivia","pop","lastIndex","WebIDLParseError","punctuation","re","exec","tokenise","candidates","EnumValue","Enum","Includes","mixin","Typedef","CallbackFunction","Container","instance","inheritable","allowedMembers","colon","ea","mem","member","Constant","IterableLike","secondTypeRequired","secondTypeAllowed","argumentAllowed","argsOpen","argsClose","Constructor","static_member","Interface","every","oldConstructors","constructor","autofixConstructor","factoryFunctions","named","constructors","i","opNames","Set","getOperations","op","partials","mixins","mixinMap","ext","additions","forEachExtension","addition","add","existings","checkInterfaceMemberDuplication","interfaceDef","constructorExtAttr","indentation","memberIndent","parentTrivia","indentCh","getMemberIndentation","constructorOp","existingIndex","array","predicate","reverse","findIndex","findLastIndex","m","splice","removed","trim","Mixin","Field","Dictionary","Namespace","CallbackInterface","parseByTokens","interface_","opts","definition","res","eof","concrete","definitions","noop","templates","nameless","extendedAttribute","extendedAttributeReference","getMixinMap","include","validateIterable","ast","duplicates","groupDefinitions","dup","checkDuplicatedNames","ts","raw","unescaped","wrapper","reference_token","name_token","type_body","it","ref","extended_attributes","default_","extended_attribute_listitem","make_ext_at","id","endsWith","eats","container","inh","iterate","iterable_like","table","interface","interface mixin","namespace","operation","body","attribute","const","enum","enum-value","v","iterable","maplike","setlike","callback interface","things","thing","dispatch","flat","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","_","toLowerCase","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","href","rtrim","relativeBase","invert","l","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","merge","hasOwnProperty","splitCells","tableRow","cells","offset","escaped","curr","findClosingBracket","b","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","title","Tokenizer_1","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","indentCodeCompensation","heading","trimmed","depth","nptable","header","align","hr","blockquote","bull","isordered","ordered","start","loose","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","tag","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","prevRenderer","prevTokenizer","lexInline","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","r","delete","configurable","o","s","WeakSet","u","insertBefore","selected","selectedIndex","f","querySelectorAll","w","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","g","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","_wire$","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","component","setState","idb","_idb","webidl2","_webidl2","_marked","_pluralize","dashes","getIntlData","x_and_y","x_y_and_z","ISODate","Intl","DateTimeFormat","timeZone","year","month","day","nonNormativeSelector","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","mapper","docLang","ListFormat","format","lastComma","and","xmlEscape","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","concatDate","date","sep","humanDate","Date","langs","toLocaleString","runTransforms","flist","funcArgs","methods","meth","showWarning","fetchAndCache","maxAge","Request","cachedResponse","caches","headers","response","fetch","ok","clonedResponse","clone","customHeaders","Headers","expiryDate","now","toISOString","cacheResponse","Response","blob","put","htmlJoinComma","joined","htmlJoinAnd","addHashId","addId","hash","char","imul","hashString","pfx","txt","noLC","normalize","getElementById","nextId","getDfnTitles","titleSet","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","element","closestInformative","closest","isInformative","querySelector","illegal","wrapInner","outer","parents","selector","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","getCanonicalKey","existingKey","find","makeSafeCopy","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","walkTree","nextNode","CaseInsensitiveMap","RespecError","plugin","isWarning","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","docLink","subscriptions","topic","from","cb","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","respecVersion","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","head","includeConfig","URLSearchParams","search","overrideEntries","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","reindent","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","prepend","Builder","tagName","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","css","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hasLink","isLegacyFrag","LEGACY_OPTIONS","getGroupDetails","group","shortname","wgId","wg","URI","wgURI","patentURI","wgPatentURI","patentPolicy","wgPatentPolicy","groupType","status","usedLegacyOptions","groupDetails","groups","getMultipleGroupDetails","showLink","class","showLinkData","showLogo","logo","alt","img","width","height","until","es","ko","ja","zh","defaultLang","orcidIcon","showPeople","persons","personName","company","editorid","w3cid","dd","span","contents","mailto","orcid","companyURL","note","extras","extra","getExtra","retiredDate","isValidDate","timeElem","dateTime","textContainer","ccLicense","w3cLicense","legalDisclaimer","w3cTrademark","author","authors","editor","editors","former_editor","former_editors","latest_editors_draft","latest_published_version","edited_in_place","this_version","test_suite","implementation_report","prev_editor_draft","prev_version","prev_recommendation","latest_recommendation","nl","logos","specSubTitleElem","subtitle","getSpecSubTitleElem","prependW3C","isCR","longStatus","textStatus","dashDate","publishHumanDate","modificationDate","modificationHumanDate","inPlaceModificationDate","isNoTrack","thisVersion","latestVersion","edDraftURI","testSuiteURI","implementationReportURI","isED","prevED","showPreviousVersion","prevVersion","prevRecURI","isRec","multipleEditors","formerEditors","multipleFormerEditors","multipleAuthors","otherLinks","errata","shortName","alternateFormats","multipleAlternates","alternatesHTML","existingCopyright","overrideCopyright","isUnofficial","licenseInfo","linkLicense","short","copyrightStart","publishYear","additionalCopyrightHolders","isCCBY","noteIfDualLicense","isW3CSoftAndDocLicense","linkDocumentUse","renderOfficialCopyright","renderCopyright","cssClass","specTitleElem","specTitleElemClone","isCGFinal","sotd","isPreview","renderPreview","additionalContent","renderIsUnofficial","isTagFinding","isMO","renderIsNoTrack","status_at_publication","isSubmission","isMemberSubmission","teamComment","publishDate","getUTCFullYear","submissionCommentNumber","patentPolicyURL","noteForMemberSubmission","isTeamSubmission","renderPublicList","noteForTeamSubmission","noteForSubmission","sotdAfterWGinfo","overrideStatus","proposedChanges","revisionTypes","wgHTML","anOrA","notYetRec","linkToWorkingGroup","linkToCommunity","updateableRec","humanRevisedRecEnd","reviewTarget","renderIsRec","statusExplanation","updatePolicy","reviewPolicy","specStatus","pubMode","humanCREnd","isPR","humanPREnd","isPER","humanPEREnd","renderNotRec","isNote","isIGNote","multipleWGs","recNotExpected","wgPatentHTML","charterDisclosureURI","producers","renderDeliverer","addPatentNote","additionalSections","prUrl","prNumber","mailToWGPublicListWithSubject","mailToWGPublicListSubscription","wgPublicList","subjectPrefix","github","issueBase","W3CDate","status2maturity","LS","LD","FPWD","LC","FPLC","FPWD-NOTE","WD-NOTE","LC-NOTE","IG-NOTE","WG-NOTE","status2rdf","NOTE","WD","CR","CRD","PR","REC","PER","RSCND","status2text","CG-NOTE","Member-SUBM","Team-SUBM","MO","ED","unofficial","finding","draft-finding","CG-DRAFT","CG-FINAL","BG-DRAFT","BG-FINAL","status2long","maybeRecTrack","recTrackStatus","cgStatus","bgStatus","cgbgStatus","noTrackStatus","precededByAn","licenses","patentPolicies","baseLogo","freeze","validateDateAndRecover","fallbackDate","Number","isFinite","formattedDate","collectSotdContent","sotdClone","hasChildNodes","license","licensesKeys","isCGBG","isBasic","isRegular","host","pathname","lastModified","isRecTrack","noRecTrack","memSubmissionLogo","teamSubmissionLogo","linkGroup","hasGitHubIssuesLink","maturity","publishSpace","skipLatestVersion","previousPublishDate","previousMaturity","pmat","prevRecShortname","peopCheck","orcidUrl","orcidId","lastDigit","lastDigitInt","reduce","acc","lastDigitShould","normalizeOrcid","uri","rdfStatus","showThisVersion","isCRDraft","publishISODate","shortISODate","policies","size","policy","validatePatentPolicies","urlParts","pos","cgbgHeadersTmpl","headersTmpl","wgPotentialArray","idx","pats","crEnd","prEnd","perEnd","unknownRevisionType","revisedRecEnd","contains","mailToWGPublicList","encodeURIComponent","cgbgSotdTmpl","sotdTmpl","populateSoTD","generatedSubtitle","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","hasNoHeading","offendingMembers","getOwnPropertyNames","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","highlightVars","addSectionLinks","filesInWPT","githubAPIBase","wptDirectory","testSuiteURL","searchParams","files","entry","getFilesInWPT","githubAPI","offendingTests","testables","tests","missingTests","privsecSectionRule","wptTestsExist","w3cLogo","w3cDefaults","wpt-tests-exist","doJsonLd","xref","toMDCode","validateStatusForGroup","insertStyle","noReSpecCSS","resourceHints","createResourceHints","createBaseStyle","delimiter","toKeyValuePairs","initial-scale","shrink-to-fit","createMetaViewport","styleFile","styleVersion","isNaN","selectStyleVersion","useExperimentalStyles","noToc","attachFixupScript","finalStyleURL","linkURL","styles","frag","nextLink","linkCSS","exportDoc","w3cStyle","resolveGithubPromise","rejectGithubPromise","file_a_bug","participate","commit_history","ghURL","tempURL","repoURL","org","repo","branch","newProps","githubToken","githubUser","atRiskBase","pullBase","otherLink","hostname","normalizedGHObj","apiBase","fullName","normalizedConfig","processResponse","rawData","el","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","includeId","default_title","h1Elem","isConnected","documentTitle","setDocumentTitle","isInteger","abstract","abs","abstractHeading","processDfnElement","abbr","fullForm","insertAdjacentHTML","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","allArgs","SyntaxError","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","openIdb","biblioDB","isAlias","resolveAlias","TypeError","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","promisesToAdd","flatMap","isInDB","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","addAll","resolveRef","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","etAl","publisher","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","conformance","normativity","keywordInterpretation","terms","processConformance","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","plurals","userDefinedPlurals","uniquePlurals","makeTitle","num","report","number","examples","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","handleIssues","ins","ghIssues","getIssueNumber","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","makeIssueSectionSummary","issuesAndNotes","issueNumbers","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","list_of_figures","fig","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","decorateTableOfFigures","topLevelEntities","findDfn","defn","findNormalDfn","findOperationDfn","resolvedName","dfns","getDfns","alternativeDfns","decorateDfn","dfnElem","idlAst","lCaseParent","last","dfnFor","getDataType","local","exportable","addAlternativeNames","asQualifiedName","operationName","argsAst","operationNames","isOptional","requiredArgs","requiredOperation","optionalOps","generateMethodNamesWithArgs","getAlternativeNames","originalName","foundDfns","dfnForArray","closestDfnFor","idlStruct","copyButton","createButton","addCopyIDLButton","idlHeader","idlText","clipboard","writeText","idlPartials","Text","keyword","wrapped","idlLink","defineIdlName","getIdlDefinitionClassName","parentName","idlId","getNameAndId","getDfnType","unlinkedAnchor","nameResolverMap","getDefnName","getIdlId","resolvePartial","overload","qualifiedName","fullyQualifiedName","resolveOverload","resolveNameAndId","renderWebIDL","idlElement","highlights","write","closestCite","cites","addIDLHeader","idls","astArray","validations","validation","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","cleanup","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","STORE_NAME","VERSION_CHECK_WAIT","getIdbCache","resolveXrefCache","queries","cachedData","lastChecked","localStorage","getItem","setItem","API_URL","lastUpdated","shouldBustCache","clearXrefData","requiredKeySet","query","cursor","profiles","web-platform","getRequestEntry","getTermFromElement","specs","dataciteElem","closestSection","inlineRefs","higherPriority","uniqueSpecs","dedupeSpecContext","getSpecContext","types","getTypeContext","dataXrefForElem","getForContext","addDataCite","normative","closestNormative","closestInform","addToReferences","objectHash","buffer","TextEncoder","crypto","subtle","digest","bufferToHexString","Uint8Array","padStart","invalidProfileError","profile","normalizeConfig","bodyCite","externalDFNs","findExplicitExternalLinks","queryKeys","apiUrl","uniqueIds","uniqueQueryKeys","resultsFromCache","termsToLook","fetchedResults","Content-Type","fetchFromNetwork","cacheXrefData","getData","ambiguous","notFound","collector","getPrefilledFormURL","howToCiteURL","originalTerm","formUrl","specsString","showErrors","addDataCiteToTerms","idlIndexSec","idlIndex","headingExternal","headlingLocal","dfnOf","CODE_TYPES","getLocalTermType","getLocalTermParentContext","getLocalTermSuffix","appendSectionNumbers","secNum","getSectionNumber","collectExternalTerms","uniqueReferences","uniqueID","renderExternalTermEntry","typeSuffix","TYPE_TERMS","TYPED_TYPES","linkForText","getTermText","styleEl","localTermIndex","dataSortedByTerm","collectLocalTerms","renderItem","suffix","getLocalTermText","renderLocalTerm","createLocalTermIndex","externalTermIndex","dataSortedBySpec","specA","specB","createExternalTermIndex","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","BROWSERS","fetchStats","feature","versions","browsers","statusText","caniuse","DEFAULTS","caniuseConf","invalidBrowsers","browser","getNormalizedConf","fetchPromise","featureURL","headDlElem","contentPromise","stats","definitionPair","outputDoc","BASE_JSON_PATH","MDN_BROWSERS","chrome","chrome_android","edge","edge_mobile","firefox","firefox_android","ie","opera","opera_android","safari","safari_ios","samsunginternet_android","webview_android","inAllEngines","inSomeEngines","insertMDNBox","targetAncestor","targetSibling","mdnBox","attachMDNDetail","mdnSpec","summary","support","engines","mdnSubPath","engineSupport","getEngineSupportIcons","getEngineSupport","createRow","browserId","yesNoUnknown","displayStatus","createRowFromBrowserData","versionData","version_removed","versionAdded","version_added","buildBrowserSupportTable","mdnKey","mdn","getMdnKey","mdnSpecJson","mdnConf","baseJsonPath","getMdnData","findElements","mdnSpecArray","mimeTypes","rsDocToDataURL","mimeType","validTypes","cloneDoc","insertions","metaViewport","metaCharset","metaGenerator","XMLSerializer","serializeToString","outerHTML","prettify","doctype","save_snapshot","downloadLinks","fileName","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","search_specref","specrefSearchUI","xrefSearchUI","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","addPerson","ed","foaf:mbox","worksFor","addRef","jsonld","creator","rawDate","publishedDate","isbn","canonicalURI","trLatestUri","@context","@vocab","@language","w3p","foaf","datePublished","@type","inLanguage","isBasedOn","copyrightHolder","discussionUrl","alternativeHeadline","addl","contributor","citationIds","citationContents","citation","addJSONLDInfo","fetchBase","workerPromise","workerScript","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","counter","gen","idGenerator","msgIdGenerator","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","missing_test_suite_uri","toListItem","emojiList","testFile","testParts","testFileName","requiresConnectionEmoji","manualPerformEmoji","toTestURLs","handleDuplicates","testURLs","uniqueList","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","activeClass","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","varMap","variables","currentSection","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors","HTMLElement","props","to","fetchCommits","commits","commit","commitURL","pr","finally","gh","CUSTOM_ELEMENTS","customElements","readyPromises","DISABLED_RULES","formatHintsAsMarkdown","a11y","violations","otherOptions","enabled","elementRef","resultTypes","reporter","axe","onload","onerror","importAxe","getViolations","violation","groupedBySummary","failureSummary","helpUrl","hints"],"mappings":"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OAAOV,EAAU2B,cAAcjB,EAAK,GAAIA,EAAK,OAM/C,CACE,CAAC,MAAO,IACR,CAAC,SAAU,MACX,CAAC,gEAAiE,QAClE,CAAC,kCAAmC,OACpC,CAAC,QAAS,KACV,CAAC,uFAAwF,QACzF,CAAC,oBAAqB,QACtB,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC5f6BkC,GAAU,SAASC,GAAgB,IAAIzoB,EAAE,GAAG,IAAIA,EAAErG,QAAQA,QAAQ,MAAM8f,GAAGzZ,EAAErG,QAAQ,SAASqG,EAAEyZ,GAAG,IAAInY,EAAEmY,EAAE1T,eAAe2iB,EAAEjP,E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"} \ No newline at end of file +{"version":3,"file":"respec-w3c.js","sources":["../profiles/w3c.js","../src/core/expose-modules.js","../src/core/l10n.js","../node_modules/idb/build/esm/wrap-idb-value.js","../node_modules/idb/build/esm/index.js","../node_modules/webidl2/lib/error.js","../node_modules/webidl2/lib/productions/base.js","../node_modules/webidl2/lib/validators/helpers.js","../node_modules/webidl2/lib/productions/array-base.js","../node_modules/webidl2/lib/productions/token.js","../node_modules/webidl2/lib/productions/extended-attributes.js","../node_modules/webidl2/lib/productions/type.js","../node_modules/webidl2/lib/productions/default.js","../node_modules/webidl2/lib/productions/argument.js","../node_modules/webidl2/lib/productions/operation.js","../node_modules/webidl2/lib/productions/attribute.js","../node_modules/webidl2/lib/productions/helpers.js","../node_modules/webidl2/lib/tokeniser.js","../node_modules/webidl2/lib/productions/enum.js","../node_modules/webidl2/lib/productions/includes.js","../node_modules/webidl2/lib/productions/typedef.js","../node_modules/webidl2/lib/productions/callback.js","../node_modules/webidl2/lib/productions/container.js","../node_modules/webidl2/lib/productions/constant.js","../node_modules/webidl2/lib/productions/iterable.js","../node_modules/webidl2/lib/productions/constructor.js","../node_modules/webidl2/lib/productions/interface.js","../node_modules/webidl2/lib/validators/interface.js","../node_modules/webidl2/lib/productions/mixin.js","../node_modules/webidl2/lib/productions/field.js","../node_modules/webidl2/lib/productions/dictionary.js","../node_modules/webidl2/lib/productions/namespace.js","../node_modules/webidl2/lib/productions/callback-interface.js","../node_modules/webidl2/lib/webidl2.js","../node_modules/webidl2/lib/writer.js","../node_modules/webidl2/lib/validator.js","../node_modules/marked/lib/marked.esm.js","../js/deps/builds/pluralize.js","../node_modules/hyperhtml/esm.js","../src/core/import-maps.js","../src/core/utils.js","../src/core/pubsubhub.js","../src/core/include-config.js","../src/core/exporter.js","../src/core/respec-global.js","../src/core/post-process.js","../src/core/pre-process.js","../src/core/base-runner.js","../src/core/override-configuration.js","../src/styles/ui.css.js","../src/core/reindent.js","../src/core/markdown.js","../src/core/ui.js","../src/core/location-hash.js","../src/w3c/group.js","../src/core/templates/show-link.js","../src/core/templates/show-logo.js","../src/core/templates/show-people.js","../src/w3c/templates/headers.js","../src/w3c/templates/cgbg-headers.js","../src/w3c/templates/sotd.js","../src/w3c/templates/cgbg-sotd.js","../src/w3c/headers.js","../src/core/LinterRule.js","../src/core/linter-rules/check-charset.js","../src/core/linter-rules/check-internal-slots.js","../src/core/linter-rules/check-punctuation.js","../src/core/linter.js","../src/core/linter-rules/local-refs-exist.js","../src/core/linter-rules/no-headingless-sections.js","../src/core/linter-rules/no-http-props.js","../src/core/linter-rules/no-unused-vars.js","../src/core/linter-rules/privsec-section.js","../src/core/defaults.js","../src/core/linter-rules/wpt-tests-exist.js","../src/w3c/defaults.js","../src/styles/respec.css.js","../src/core/style.js","../src/w3c/style.js","../src/w3c/l10n.js","../src/core/github.js","../src/core/data-include.js","../src/core/title.js","../src/w3c/level.js","../src/w3c/abstract.js","../src/core/data-transform.js","../src/core/data-abbr.js","../src/core/inline-idl-parser.js","../src/core/biblio-db.js","../src/core/biblio.js","../src/core/render-biblio.js","../src/core/inlines.js","../src/w3c/conformance.js","../src/core/dfn-map.js","../src/core/dfn.js","../src/core/pluralize.js","../src/styles/examples.css.js","../src/core/examples.js","../src/styles/issues-notes.css.js","../src/core/issues-notes.js","../src/core/best-practices.js","../src/core/figures.js","../src/core/dfn-finder.js","../src/core/webidl-clipboard.js","../src/styles/webidl.css.js","../src/core/webidl.js","../src/core/data-cite.js","../src/core/link-to-dfn.js","../src/core/xref-db.js","../src/core/xref.js","../src/core/webidl-index.js","../src/styles/dfn-index.css.js","../src/core/dfn-index.js","../src/core/contrib.js","../src/core/fix-headers.js","../src/core/structure.js","../src/core/informative.js","../src/core/id-headers.js","../src/styles/caniuse.css.js","../src/core/caniuse.js","../src/styles/mdn-annotation.css.js","../src/core/mdn-annotation.js","../src/ui/save-html.js","../src/ui/search-specref.js","../src/ui/search-xref.js","../src/ui/about-respec.js","../src/core/seo.js","../src/w3c/seo.js","../src/styles/highlight.css.js","../src/core/text-loader.js","../src/core/worker.js","../src/core/highlight.js","../src/core/data-tests.js","../src/core/list-sorter.js","../src/styles/var.css.js","../src/core/highlight-vars.js","../src/styles/dfn-panel.css.js","../src/core/dfn-panel.js","../src/styles/datatype.css.js","../src/core/data-type.js","../src/styles/algorithms.css.js","../src/core/algorithms.js","../src/core/anchor-expander.js","../src/core/custom-elements/rs-changelog.js","../src/core/custom-elements/index.js","../src/core/a11y.js"],"sourcesContent":["\"use strict\";\n// In case everything else fails, we want the error\nwindow.addEventListener(\"error\", ev => {\n console.error(ev.error, ev.message, ev);\n});\n\nconst modules = [\n // order is significant\n import(\"../src/core/base-runner.js\"),\n import(\"../src/core/ui.js\"),\n import(\"../src/core/location-hash.js\"),\n import(\"../src/core/l10n.js\"),\n import(\"../src/w3c/group.js\"),\n import(\"../src/w3c/defaults.js\"),\n import(\"../src/core/style.js\"),\n import(\"../src/w3c/style.js\"),\n import(\"../src/w3c/l10n.js\"),\n import(\"../src/core/github.js\"),\n import(\"../src/core/data-include.js\"),\n import(\"../src/core/markdown.js\"),\n import(\"../src/core/reindent.js\"),\n import(\"../src/core/title.js\"),\n import(\"../src/w3c/level.js\"),\n import(\"../src/w3c/headers.js\"),\n import(\"../src/w3c/abstract.js\"),\n import(\"../src/core/data-transform.js\"),\n import(\"../src/core/data-abbr.js\"),\n import(\"../src/core/inlines.js\"),\n import(\"../src/w3c/conformance.js\"),\n import(\"../src/core/dfn.js\"),\n import(\"../src/core/pluralize.js\"),\n import(\"../src/core/examples.js\"),\n import(\"../src/core/issues-notes.js\"),\n import(\"../src/core/best-practices.js\"),\n import(\"../src/core/figures.js\"),\n import(\"../src/core/webidl.js\"),\n import(\"../src/core/biblio.js\"),\n import(\"../src/core/link-to-dfn.js\"),\n import(\"../src/core/xref.js\"),\n import(\"../src/core/data-cite.js\"),\n import(\"../src/core/webidl-index.js\"),\n import(\"../src/core/render-biblio.js\"),\n import(\"../src/core/dfn-index.js\"),\n import(\"../src/core/contrib.js\"),\n import(\"../src/core/fix-headers.js\"),\n import(\"../src/core/structure.js\"),\n import(\"../src/core/informative.js\"),\n import(\"../src/core/id-headers.js\"),\n import(\"../src/core/caniuse.js\"),\n import(\"../src/core/mdn-annotation.js\"),\n import(\"../src/ui/save-html.js\"),\n import(\"../src/ui/search-specref.js\"),\n import(\"../src/ui/search-xref.js\"),\n import(\"../src/ui/about-respec.js\"),\n import(\"../src/core/seo.js\"),\n import(\"../src/w3c/seo.js\"),\n import(\"../src/core/highlight.js\"),\n import(\"../src/core/webidl-clipboard.js\"),\n import(\"../src/core/data-tests.js\"),\n import(\"../src/core/list-sorter.js\"),\n import(\"../src/core/highlight-vars.js\"),\n import(\"../src/core/dfn-panel.js\"),\n import(\"../src/core/data-type.js\"),\n import(\"../src/core/algorithms.js\"),\n import(\"../src/core/anchor-expander.js\"),\n import(\"../src/core/custom-elements/index.js\"),\n /* Linters must be the last thing to run */\n import(\"../src/core/linter.js\"),\n import(\"../src/core/a11y.js\"),\n];\n\nasync function domReady() {\n if (document.readyState === \"loading\") {\n await new Promise(resolve =>\n document.addEventListener(\"DOMContentLoaded\", resolve)\n );\n }\n}\n\n(async () => {\n const [runner, { ui }, ...plugins] = await Promise.all(modules);\n try {\n ui.show();\n await domReady();\n await runner.runAll(plugins);\n } finally {\n ui.enable();\n }\n})().catch(err => {\n console.error(err);\n});\n","// @ts-check\nconst inAmd = !!window.require;\nif (!inAmd) {\n /**\n * @type {any}\n * @param {string[]} deps\n * @param {(...modules: any[]) => void} callback\n */\n const require = function (deps, callback) {\n const modules = deps.map(dep => {\n if (!(dep in window.require.modules)) {\n throw new Error(`Unsupported dependency name: ${dep}`);\n }\n return window.require.modules[dep];\n });\n Promise.all(modules).then(results => callback(...results));\n };\n require.modules = {};\n window.require = require;\n}\n\n/**\n * @param {string} name\n * @param {object | Promise<object>} object\n */\nexport function expose(name, object) {\n if (!inAmd) {\n window.require.modules[name] = object;\n }\n}\n","// @ts-check\n/**\n * Module core/l10n\n *\n * Looks at the lang attribute on the root element and uses it\n * to manage the config.l10n object so that other parts of the system can\n * localize their text.\n */\n\nexport const name = \"core/l10n\";\n\nconst html = document.documentElement;\nif (html && !html.hasAttribute(\"lang\")) {\n html.lang = \"en\";\n if (!html.hasAttribute(\"dir\")) {\n html.dir = \"ltr\";\n }\n}\n\nexport const l10n = {};\n\nexport const lang = html.lang;\n\nexport function run(config) {\n config.l10n = l10n[lang] || l10n.en;\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","/**\n * @param {string} text\n */\nfunction lastLine(text) {\n const splitted = text.split(\"\\n\");\n return splitted[splitted.length - 1];\n}\n\nfunction appendIfExist(base, target) {\n let result = base;\n if (target) {\n result += ` ${target}`;\n }\n return result;\n}\n\nfunction contextAsText(node) {\n const hierarchy = [node];\n while (node && node.parent) {\n const { parent } = node;\n hierarchy.unshift(parent);\n node = parent;\n }\n return hierarchy.map(n => appendIfExist(n.type, n.name)).join(\" -> \");\n}\n\n/**\n * @typedef {object} WebIDL2ErrorOptions\n * @property {\"error\" | \"warning\"} [level]\n * @property {Function} [autofix]\n *\n * @param {string} message error message\n * @param {\"Syntax\" | \"Validation\"} kind error type\n * @param {WebIDL2ErrorOptions} [options]\n */\nfunction error(source, position, current, message, kind, { level = \"error\", autofix, ruleName } = {}) {\n /**\n * @param {number} count\n */\n function sliceTokens(count) {\n return count > 0 ?\n source.slice(position, position + count) :\n source.slice(Math.max(position + count, 0), position);\n }\n\n function tokensToText(inputs, { precedes } = {}) {\n const text = inputs.map(t => t.trivia + t.value).join(\"\");\n const nextToken = source[position];\n if (nextToken.type === \"eof\") {\n return text;\n }\n if (precedes) {\n return text + nextToken.trivia;\n }\n return text.slice(nextToken.trivia.length);\n }\n\n const maxTokens = 5; // arbitrary but works well enough\n const line =\n source[position].type !== \"eof\" ? source[position].line :\n source.length > 1 ? source[position - 1].line :\n 1;\n\n const precedingLastLine = lastLine(\n tokensToText(sliceTokens(-maxTokens), { precedes: true })\n );\n\n const subsequentTokens = sliceTokens(maxTokens);\n const subsequentText = tokensToText(subsequentTokens);\n const subsequentFirstLine = subsequentText.split(\"\\n\")[0];\n\n const spaced = \" \".repeat(precedingLastLine.length) + \"^\";\n const sourceContext = precedingLastLine + subsequentFirstLine + \"\\n\" + spaced;\n\n const contextType = kind === \"Syntax\" ? \"since\" : \"inside\";\n const inSourceName = source.name ? ` in ${source.name}` : \"\";\n const grammaticalContext = (current && current.name) ? `, ${contextType} \\`${current.partial ? \"partial \" : \"\"}${contextAsText(current)}\\`` : \"\";\n const context = `${kind} error at line ${line}${inSourceName}${grammaticalContext}:\\n${sourceContext}`;\n return {\n message: `${context} ${message}`,\n bareMessage: message,\n context,\n line,\n sourceName: source.name,\n level,\n ruleName,\n autofix,\n input: subsequentText,\n tokens: subsequentTokens\n };\n}\n\n/**\n * @param {string} message error message\n */\nexport function syntaxError(source, position, current, message) {\n return error(source, position, current, message, \"Syntax\");\n}\n\n/**\n * @param {string} message error message\n * @param {WebIDL2ErrorOptions} [options]\n */\nexport function validationError(token, current, ruleName, message, options = {}) {\n options.ruleName = ruleName;\n return error(current.source, token.index, current, message, \"Validation\", options);\n}\n","// @ts-check\n\nexport class Base {\n /**\n * @param {object} initializer\n * @param {Base[\"source\"]} initializer.source\n * @param {Base[\"tokens\"]} initializer.tokens\n */\n constructor({ source, tokens }) {\n Object.defineProperties(this, {\n source: { value: source },\n tokens: { value: tokens, writable: true },\n parent: { value: null, writable: true },\n this: { value: this } // useful when escaping from proxy\n });\n }\n\n toJSON() {\n const json = { type: undefined, name: undefined, inheritance: undefined };\n let proto = this;\n while (proto !== Object.prototype) {\n const descMap = Object.getOwnPropertyDescriptors(proto);\n for (const [key, value] of Object.entries(descMap)) {\n if (value.enumerable || value.get) {\n // @ts-ignore - allow indexing here\n json[key] = this[key];\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n return json;\n }\n}\n","// @ts-check\n\n/**\n * @typedef {import(\"../productions/dictionary.js\").Dictionary} Dictionary\n *\n * @param {*} idlType\n * @param {import(\"../validator.js\").Definitions} defs\n * @param {object} [options]\n * @param {boolean} [options.useNullableInner] use when the input idlType is nullable and you want to use its inner type\n * @return {{ reference: *, dictionary: Dictionary }} the type reference that ultimately includes dictionary.\n */\nexport function idlTypeIncludesDictionary(idlType, defs, { useNullableInner } = {}) {\n if (!idlType.union) {\n const def = defs.unique.get(idlType.idlType);\n if (!def) {\n return;\n }\n if (def.type === \"typedef\") {\n const { typedefIncludesDictionary } = defs.cache;\n if (typedefIncludesDictionary.has(def)) {\n // Note that this also halts when it met indeterminate state\n // to prevent infinite recursion\n return typedefIncludesDictionary.get(def);\n }\n defs.cache.typedefIncludesDictionary.set(def, undefined); // indeterminate state\n const result = idlTypeIncludesDictionary(def.idlType, defs);\n defs.cache.typedefIncludesDictionary.set(def, result);\n if (result) {\n return {\n reference: idlType,\n dictionary: result.dictionary\n };\n }\n }\n if (def.type === \"dictionary\" && (useNullableInner || !idlType.nullable)) {\n return {\n reference: idlType,\n dictionary: def\n };\n }\n }\n for (const subtype of idlType.subtype) {\n const result = idlTypeIncludesDictionary(subtype, defs);\n if (result) {\n if (subtype.union) {\n return result;\n }\n return {\n reference: subtype,\n dictionary: result.dictionary\n };\n }\n }\n}\n\n/**\n * @param {*} dict dictionary type\n * @param {import(\"../validator.js\").Definitions} defs\n * @return {boolean}\n */\nexport function dictionaryIncludesRequiredField(dict, defs) {\n if (defs.cache.dictionaryIncludesRequiredField.has(dict)) {\n return defs.cache.dictionaryIncludesRequiredField.get(dict);\n }\n // Set cached result to indeterminate to short-circuit circular definitions.\n // The final result will be updated to true or false.\n defs.cache.dictionaryIncludesRequiredField.set(dict, undefined);\n let result = dict.members.some(field => field.required);\n if (!result && dict.inheritance) {\n const superdict = defs.unique.get(dict.inheritance);\n if (!superdict) {\n // Assume required members in the supertype if it is unknown.\n result = true;\n } else if (dictionaryIncludesRequiredField(superdict, defs)) {\n result = true;\n }\n }\n defs.cache.dictionaryIncludesRequiredField.set(dict, result);\n return result;\n}\n","// @ts-check\n\nexport class ArrayBase extends Array {\n constructor({ source, tokens }) {\n super();\n Object.defineProperties(this, {\n source: { value: source },\n tokens: { value: tokens },\n parent: { value: null, writable: true }\n });\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { unescape } from \"./helpers.js\";\n\nexport class Token extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} type\n */\n static parser(tokeniser, type) {\n return () => {\n const value = tokeniser.consume(type);\n if (value) {\n return new Token({ source: tokeniser.source, tokens: { value } });\n }\n };\n }\n\n get value() {\n return unescape(this.tokens.value.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { ArrayBase } from \"./array-base.js\";\nimport { Token } from \"./token.js\";\nimport { list, argument_list, autoParenter, unescape } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} tokenName\n */\nfunction tokens(tokeniser, tokenName) {\n return list(tokeniser, {\n parser: Token.parser(tokeniser, tokenName),\n listName: tokenName + \" list\"\n });\n}\n\nconst extAttrValueSyntax = [\"identifier\", \"decimal\", \"integer\", \"string\"];\n\nconst shouldBeLegacyPrefixed = [\n \"NoInterfaceObject\",\n \"LenientSetter\",\n \"LenientThis\",\n \"TreatNonObjectAsNull\",\n \"Unforgeable\",\n];\n\nconst renamedLegacies = new Map([\n ...shouldBeLegacyPrefixed.map(name => [name, `Legacy${name}`]),\n [\"NamedConstructor\", \"LegacyFactoryFunction\"],\n [\"OverrideBuiltins\", \"LegacyOverrideBuiltIns\"],\n [\"TreatNullAs\", \"LegacyNullToEmptyString\"],\n]);\n\n/**\n * This will allow a set of extended attribute values to be parsed.\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction extAttrListItems(tokeniser) {\n for (const syntax of extAttrValueSyntax) {\n const toks = tokens(tokeniser, syntax);\n if (toks.length) {\n return toks;\n }\n }\n tokeniser.error(`Expected identifiers, strings, decimals, or integers but none found`);\n}\n\n\nclass ExtendedAttributeParameters extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const tokens = { assign: tokeniser.consume(\"=\") };\n const ret = autoParenter(new ExtendedAttributeParameters({ source: tokeniser.source, tokens }));\n if (tokens.assign) {\n tokens.secondaryName = tokeniser.consume(...extAttrValueSyntax);\n }\n tokens.open = tokeniser.consume(\"(\");\n if (tokens.open) {\n ret.list = ret.rhsIsList ?\n // [Exposed=(Window,Worker)]\n extAttrListItems(tokeniser) :\n // [LegacyFactoryFunction=Audio(DOMString src)] or [Constructor(DOMString str)]\n argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unexpected token in extended attribute argument list\");\n } else if (ret.hasRhs && !tokens.secondaryName) {\n tokeniser.error(\"No right hand side to extended attribute assignment\");\n }\n return ret.this;\n }\n\n get rhsIsList() {\n return this.tokens.assign && !this.tokens.secondaryName;\n }\n\n get rhsType() {\n if (this.rhsIsList) {\n return this.list[0].tokens.value.type + \"-list\";\n }\n if (this.tokens.secondaryName) {\n return this.tokens.secondaryName.type;\n }\n return null;\n }\n}\n\nexport class SimpleExtendedAttribute extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const name = tokeniser.consume(\"identifier\");\n if (name) {\n return new SimpleExtendedAttribute({\n source: tokeniser.source,\n tokens: { name },\n params: ExtendedAttributeParameters.parse(tokeniser)\n });\n }\n }\n\n constructor({ source, tokens, params }) {\n super({ source, tokens });\n params.parent = this;\n Object.defineProperty(this, \"params\", { value: params });\n }\n\n get type() {\n return \"extended-attribute\";\n }\n get name() {\n return this.tokens.name.value;\n }\n get rhs() {\n const { rhsType: type, tokens, list } = this.params;\n if (!type) {\n return null;\n }\n const value = this.params.rhsIsList ? list : unescape(tokens.secondaryName.value);\n return { type, value };\n }\n get arguments() {\n const { rhsIsList, list } = this.params;\n if (!list || rhsIsList) {\n return [];\n }\n return list;\n }\n\n *validate(defs) {\n const { name } = this;\n if (name === \"LegacyNoInterfaceObject\") {\n const message = `\\`[LegacyNoInterfaceObject]\\` extended attribute is an \\\nundesirable feature that may be removed from Web IDL in the future. Refer to the \\\n[relevant upstream PR](https://github.com/heycam/webidl/pull/609) for more \\\ninformation.`;\n yield validationError(this.tokens.name, this, \"no-nointerfaceobject\", message, { level: \"warning\" });\n } else if (renamedLegacies.has(name)) {\n const message = `\\`[${name}]\\` extended attribute is a legacy feature \\\nthat is now renamed to \\`[${renamedLegacies.get(name)}]\\`. Refer to the \\\n[relevant upstream PR](https://github.com/heycam/webidl/pull/870) for more \\\ninformation.`;\n yield validationError(this.tokens.name, this, \"renamed-legacy\", message, {\n level: \"warning\",\n autofix: renameLegacyExtendedAttribute(this)\n });\n }\n for (const arg of this.arguments) {\n yield* arg.validate(defs);\n }\n }\n}\n\n/**\n * @param {SimpleExtendedAttribute} extAttr\n */\nfunction renameLegacyExtendedAttribute(extAttr) {\n return () => {\n const { name } = extAttr;\n extAttr.tokens.name.value = renamedLegacies.get(name);\n if (name === \"TreatNullAs\") {\n extAttr.params.tokens = {};\n }\n };\n}\n\n// Note: we parse something simpler than the official syntax. It's all that ever\n// seems to be used\nexport class ExtendedAttributes extends ArrayBase {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const tokens = {};\n tokens.open = tokeniser.consume(\"[\");\n if (!tokens.open) return new ExtendedAttributes({});\n const ret = new ExtendedAttributes({ source: tokeniser.source, tokens });\n ret.push(...list(tokeniser, {\n parser: SimpleExtendedAttribute.parse,\n listName: \"extended attribute\"\n }));\n tokens.close = tokeniser.consume(\"]\") || tokeniser.error(\"Unexpected closing token of extended attribute\");\n if (!ret.length) {\n tokeniser.error(\"Found an empty extended attribute\");\n }\n if (tokeniser.probe(\"[\")) {\n tokeniser.error(\"Illegal double extended attribute lists, consider merging them\");\n }\n return ret;\n }\n\n *validate(defs) {\n for (const extAttr of this) {\n yield* extAttr.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { unescape, type_with_extended_attributes, return_type, primitive_type, autoParenter } from \"./helpers.js\";\nimport { stringTypes, typeNameKeywords } from \"../tokeniser.js\";\nimport { validationError } from \"../error.js\";\nimport { idlTypeIncludesDictionary } from \"../validators/helpers.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nfunction generic_type(tokeniser, typeName) {\n const base = tokeniser.consume(\"FrozenArray\", \"ObservableArray\", \"Promise\", \"sequence\", \"record\");\n if (!base) {\n return;\n }\n const ret = autoParenter(new Type({ source: tokeniser.source, tokens: { base } }));\n ret.tokens.open = tokeniser.consume(\"<\") || tokeniser.error(`No opening bracket after ${base.type}`);\n switch (base.type) {\n case \"Promise\": {\n if (tokeniser.probe(\"[\")) tokeniser.error(\"Promise type cannot have extended attribute\");\n const subtype = return_type(tokeniser, typeName) || tokeniser.error(\"Missing Promise subtype\");\n ret.subtype.push(subtype);\n break;\n }\n case \"sequence\":\n case \"FrozenArray\":\n case \"ObservableArray\": {\n const subtype = type_with_extended_attributes(tokeniser, typeName) || tokeniser.error(`Missing ${base.type} subtype`);\n ret.subtype.push(subtype);\n break;\n }\n case \"record\": {\n if (tokeniser.probe(\"[\")) tokeniser.error(\"Record key cannot have extended attribute\");\n const keyType = tokeniser.consume(...stringTypes) || tokeniser.error(`Record key must be one of: ${stringTypes.join(\", \")}`);\n const keyIdlType = new Type({ source: tokeniser.source, tokens: { base: keyType }});\n keyIdlType.tokens.separator = tokeniser.consume(\",\") || tokeniser.error(\"Missing comma after record key type\");\n keyIdlType.type = typeName;\n const valueType = type_with_extended_attributes(tokeniser, typeName) || tokeniser.error(\"Error parsing generic type record\");\n ret.subtype.push(keyIdlType, valueType);\n break;\n }\n }\n if (!ret.idlType) tokeniser.error(`Error parsing generic type ${base.type}`);\n ret.tokens.close = tokeniser.consume(\">\") || tokeniser.error(`Missing closing bracket after ${base.type}`);\n return ret.this;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction type_suffix(tokeniser, obj) {\n const nullable = tokeniser.consume(\"?\");\n if (nullable) {\n obj.tokens.nullable = nullable;\n }\n if (tokeniser.probe(\"?\")) tokeniser.error(\"Can't nullable more than once\");\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nfunction single_type(tokeniser, typeName) {\n let ret = generic_type(tokeniser, typeName) || primitive_type(tokeniser);\n if (!ret) {\n const base = tokeniser.consume(\"identifier\", ...stringTypes, ...typeNameKeywords);\n if (!base) {\n return;\n }\n ret = new Type({ source: tokeniser.source, tokens: { base } });\n if (tokeniser.probe(\"<\")) tokeniser.error(`Unsupported generic type ${base.value}`);\n }\n if (ret.generic === \"Promise\" && tokeniser.probe(\"?\")) {\n tokeniser.error(\"Promise type cannot be nullable\");\n }\n ret.type = typeName || null;\n type_suffix(tokeniser, ret);\n if (ret.nullable && ret.idlType === \"any\") tokeniser.error(\"Type `any` cannot be made nullable\");\n return ret;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} type\n */\nfunction union_type(tokeniser, type) {\n const tokens = {};\n tokens.open = tokeniser.consume(\"(\");\n if (!tokens.open) return;\n const ret = autoParenter(new Type({ source: tokeniser.source, tokens }));\n ret.type = type || null;\n while (true) {\n const typ = type_with_extended_attributes(tokeniser) || tokeniser.error(\"No type after open parenthesis or 'or' in union type\");\n if (typ.idlType === \"any\") tokeniser.error(\"Type `any` cannot be included in a union type\");\n if (typ.generic === \"Promise\") tokeniser.error(\"Type `Promise` cannot be included in a union type\");\n ret.subtype.push(typ);\n const or = tokeniser.consume(\"or\");\n if (or) {\n typ.tokens.separator = or;\n }\n else break;\n }\n if (ret.idlType.length < 2) {\n tokeniser.error(\"At least two types are expected in a union type but found less\");\n }\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated union type\");\n type_suffix(tokeniser, ret);\n return ret.this;\n}\n\nexport class Type extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\n static parse(tokeniser, typeName) {\n return single_type(tokeniser, typeName) || union_type(tokeniser, typeName);\n }\n\n constructor({ source, tokens }) {\n super({ source, tokens });\n Object.defineProperty(this, \"subtype\", { value: [], writable: true });\n this.extAttrs = new ExtendedAttributes({});\n }\n\n get generic() {\n if (this.subtype.length && this.tokens.base) {\n return this.tokens.base.value;\n }\n return \"\";\n }\n get nullable() {\n return Boolean(this.tokens.nullable);\n }\n get union() {\n return Boolean(this.subtype.length) && !this.tokens.base;\n }\n get idlType() {\n if (this.subtype.length) {\n return this.subtype;\n }\n // Adding prefixes/postfixes for \"unrestricted float\", etc.\n const name = [\n this.tokens.prefix,\n this.tokens.base,\n this.tokens.postfix\n ].filter(t => t).map(t => t.value).join(\" \");\n return unescape(name);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n\n if (this.idlType === \"void\") {\n const message = `\\`void\\` is now replaced by \\`undefined\\`. Refer to the \\\n[relevant GitHub issue](https://github.com/heycam/webidl/issues/60) \\\nfor more information.`;\n yield validationError(this.tokens.base, this, \"replace-void\", message, {\n autofix: replaceVoid(this)\n });\n }\n\n /*\n * If a union is nullable, its subunions cannot include a dictionary\n * If not, subunions may include dictionaries if each union is not nullable\n */\n const typedef = !this.union && defs.unique.get(this.idlType);\n const target =\n this.union ? this :\n (typedef && typedef.type === \"typedef\") ? typedef.idlType :\n undefined;\n if (target && this.nullable) {\n // do not allow any dictionary\n const { reference } = idlTypeIncludesDictionary(target, defs) || {};\n if (reference) {\n const targetToken = (this.union ? reference : this).tokens.base;\n const message = \"Nullable union cannot include a dictionary type.\";\n yield validationError(targetToken, this, \"no-nullable-union-dict\", message);\n }\n } else {\n // allow some dictionary\n for (const subtype of this.subtype) {\n yield* subtype.validate(defs);\n }\n }\n }\n}\n\n/**\n * @param {Type} type\n */\nfunction replaceVoid(type) {\n return () => {\n type.tokens.base.value = \"undefined\";\n };\n}\n","import { Base } from \"./base.js\";\nimport { const_data, const_value } from \"./helpers.js\";\n\nexport class Default extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const assign = tokeniser.consume(\"=\");\n if (!assign) {\n return null;\n }\n const def = const_value(tokeniser) || tokeniser.consume(\"string\", \"null\", \"[\", \"{\") || tokeniser.error(\"No value for default\");\n const expression = [def];\n if (def.type === \"[\") {\n const close = tokeniser.consume(\"]\") || tokeniser.error(\"Default sequence value must be empty\");\n expression.push(close);\n } else if (def.type === \"{\") {\n const close = tokeniser.consume(\"}\") || tokeniser.error(\"Default dictionary value must be empty\");\n expression.push(close);\n }\n return new Default({ source: tokeniser.source, tokens: { assign }, expression });\n }\n\n constructor({ source, tokens, expression }) {\n super({ source, tokens });\n expression.parent = this;\n Object.defineProperty(this, \"expression\", { value: expression });\n }\n\n get type() {\n return const_data(this.expression[0]).type;\n }\n get value() {\n return const_data(this.expression[0]).value;\n }\n get negative() {\n return const_data(this.expression[0]).negative;\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { Default } from \"./default.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { unescape, type_with_extended_attributes, autoParenter, getFirstToken } from \"./helpers.js\";\nimport { argumentNameKeywords, Tokeniser } from \"../tokeniser.js\";\nimport { validationError } from \"../error.js\";\nimport { idlTypeIncludesDictionary, dictionaryIncludesRequiredField } from \"../validators/helpers.js\";\n\nexport class Argument extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const start_position = tokeniser.position;\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Argument({ source: tokeniser.source, tokens }));\n ret.extAttrs = ExtendedAttributes.parse(tokeniser);\n tokens.optional = tokeniser.consume(\"optional\");\n ret.idlType = type_with_extended_attributes(tokeniser, \"argument-type\");\n if (!ret.idlType) {\n return tokeniser.unconsume(start_position);\n }\n if (!tokens.optional) {\n tokens.variadic = tokeniser.consume(\"...\");\n }\n tokens.name = tokeniser.consume(\"identifier\", ...argumentNameKeywords);\n if (!tokens.name) {\n return tokeniser.unconsume(start_position);\n }\n ret.default = tokens.optional ? Default.parse(tokeniser) : null;\n return ret.this;\n }\n\n get type() {\n return \"argument\";\n }\n get optional() {\n return !!this.tokens.optional;\n }\n get variadic() {\n return !!this.tokens.variadic;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n /**\n * @param {import(\"../validator.js\").Definitions} defs\n */\n *validate(defs) {\n yield* this.idlType.validate(defs);\n const result = idlTypeIncludesDictionary(this.idlType, defs, { useNullableInner: true });\n if (result) {\n if (this.idlType.nullable) {\n const message = `Dictionary arguments cannot be nullable.`;\n yield validationError(this.tokens.name, this, \"no-nullable-dict-arg\", message);\n } else if (!this.optional) {\n if (this.parent && !dictionaryIncludesRequiredField(result.dictionary, defs) && isLastRequiredArgument(this)) {\n const message = `Dictionary argument must be optional if it has no required fields`;\n yield validationError(this.tokens.name, this, \"dict-arg-optional\", message, {\n autofix: autofixDictionaryArgumentOptionality(this)\n });\n }\n } else if (!this.default) {\n const message = `Optional dictionary arguments must have a default value of \\`{}\\`.`;\n yield validationError(this.tokens.name, this, \"dict-arg-default\", message, {\n autofix: autofixOptionalDictionaryDefaultValue(this)\n });\n }\n }\n }\n}\n\n/**\n * @param {Argument} arg\n */\nfunction isLastRequiredArgument(arg) {\n const list = arg.parent.arguments || arg.parent.list;\n const index = list.indexOf(arg);\n const requiredExists = list.slice(index + 1).some(a => !a.optional);\n return !requiredExists;\n}\n\n/**\n * @param {Argument} arg\n */\nfunction autofixDictionaryArgumentOptionality(arg) {\n return () => {\n const firstToken = getFirstToken(arg.idlType);\n arg.tokens.optional = { type: \"optional\", value: \"optional\", trivia: firstToken.trivia };\n firstToken.trivia = \" \";\n autofixOptionalDictionaryDefaultValue(arg)();\n };\n}\n\n/**\n * @param {Argument} arg\n */\nfunction autofixOptionalDictionaryDefaultValue(arg) {\n return () => {\n arg.default = Default.parse(new Tokeniser(\" = {}\"));\n };\n}\n","import { Base } from \"./base.js\";\nimport { return_type, argument_list, unescape, autoParenter } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\n\nexport class Operation extends Base {\n /**\n * @typedef {import(\"../tokeniser.js\").Token} Token\n *\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {Token} [options.special]\n * @param {Token} [options.regular]\n */\n static parse(tokeniser, { special, regular } = {}) {\n const tokens = { special };\n const ret = autoParenter(new Operation({ source: tokeniser.source, tokens }));\n if (special && special.value === \"stringifier\") {\n tokens.termination = tokeniser.consume(\";\");\n if (tokens.termination) {\n ret.arguments = [];\n return ret;\n }\n }\n if (!special && !regular) {\n tokens.special = tokeniser.consume(\"getter\", \"setter\", \"deleter\");\n }\n ret.idlType = return_type(tokeniser) || tokeniser.error(\"Missing return type\");\n tokens.name = tokeniser.consume(\"identifier\", \"includes\");\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"Invalid operation\");\n ret.arguments = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated operation\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated operation, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"operation\";\n }\n get name() {\n const { name } = this.tokens;\n if (!name) {\n return \"\";\n }\n return unescape(name.value);\n }\n get special() {\n if (!this.tokens.special) {\n return \"\";\n }\n return this.tokens.special.value;\n }\n\n *validate(defs) {\n if (!this.name && [\"\", \"static\"].includes(this.special)) {\n const message = `Regular or static operations must have both a return type and an identifier.`;\n yield validationError(this.tokens.open, this, \"incomplete-op\", message);\n }\n if (this.idlType) {\n yield* this.idlType.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, unescape, autoParenter } from \"./helpers.js\";\n\nexport class Attribute extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser, { special, noInherit = false, readonly = false } = {}) {\n const start_position = tokeniser.position;\n const tokens = { special };\n const ret = autoParenter(new Attribute({ source: tokeniser.source, tokens }));\n if (!special && !noInherit) {\n tokens.special = tokeniser.consume(\"inherit\");\n }\n if (ret.special === \"inherit\" && tokeniser.probe(\"readonly\")) {\n tokeniser.error(\"Inherited attributes cannot be read-only\");\n }\n tokens.readonly = tokeniser.consume(\"readonly\");\n if (readonly && !tokens.readonly && tokeniser.probe(\"attribute\")) {\n tokeniser.error(\"Attributes must be readonly in this context\");\n }\n tokens.base = tokeniser.consume(\"attribute\");\n if (!tokens.base) {\n tokeniser.unconsume(start_position);\n return;\n }\n ret.idlType = type_with_extended_attributes(tokeniser, \"attribute-type\") || tokeniser.error(\"Attribute lacks a type\");\n switch (ret.idlType.generic) {\n case \"sequence\":\n case \"record\": tokeniser.error(`Attributes cannot accept ${ret.idlType.generic} types`);\n }\n tokens.name = tokeniser.consume(\"identifier\", \"async\", \"required\") || tokeniser.error(\"Attribute lacks a name\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated attribute, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"attribute\";\n }\n get special() {\n if (!this.tokens.special) {\n return \"\";\n }\n return this.tokens.special.value;\n }\n get readonly() {\n return !!this.tokens.readonly;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n yield* this.idlType.validate(defs);\n }\n}\n","import { Type } from \"./type.js\";\nimport { Argument } from \"./argument.js\";\nimport { ExtendedAttributes, SimpleExtendedAttribute } from \"./extended-attributes.js\";\nimport { Operation } from \"./operation.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Tokeniser } from \"../tokeniser.js\";\n\n/**\n * @param {string} identifier\n */\nexport function unescape(identifier) {\n return identifier.startsWith('_') ? identifier.slice(1) : identifier;\n}\n\n/**\n * Parses comma-separated list\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} args\n * @param {Function} args.parser parser function for each item\n * @param {boolean} [args.allowDangler] whether to allow dangling comma\n * @param {string} [args.listName] the name to be shown on error messages\n */\nexport function list(tokeniser, { parser, allowDangler, listName = \"list\" }) {\n const first = parser(tokeniser);\n if (!first) {\n return [];\n }\n first.tokens.separator = tokeniser.consume(\",\");\n const items = [first];\n while (first.tokens.separator) {\n const item = parser(tokeniser);\n if (!item) {\n if (!allowDangler) {\n tokeniser.error(`Trailing comma in ${listName}`);\n }\n break;\n }\n item.tokens.separator = tokeniser.consume(\",\");\n items.push(item);\n if (!item.tokens.separator) break;\n }\n return items;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function const_value(tokeniser) {\n return tokeniser.consume(\"true\", \"false\", \"Infinity\", \"-Infinity\", \"NaN\", \"decimal\", \"integer\");\n}\n\n/**\n * @param {object} token\n * @param {string} token.type\n * @param {string} token.value\n */\nexport function const_data({ type, value }) {\n switch (type) {\n case \"true\":\n case \"false\":\n return { type: \"boolean\", value: type === \"true\" };\n case \"Infinity\":\n case \"-Infinity\":\n return { type: \"Infinity\", negative: type.startsWith(\"-\") };\n case \"[\":\n return { type: \"sequence\", value: [] };\n case \"{\":\n return { type: \"dictionary\" };\n case \"decimal\":\n case \"integer\":\n return { type: \"number\", value };\n case \"string\":\n return { type: \"string\", value: value.slice(1, -1) };\n default:\n return { type };\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function primitive_type(tokeniser) {\n function integer_type() {\n const prefix = tokeniser.consume(\"unsigned\");\n const base = tokeniser.consume(\"short\", \"long\");\n if (base) {\n const postfix = tokeniser.consume(\"long\");\n return new Type({ source, tokens: { prefix, base, postfix } });\n }\n if (prefix) tokeniser.error(\"Failed to parse integer type\");\n }\n\n function decimal_type() {\n const prefix = tokeniser.consume(\"unrestricted\");\n const base = tokeniser.consume(\"float\", \"double\");\n if (base) {\n return new Type({ source, tokens: { prefix, base } });\n }\n if (prefix) tokeniser.error(\"Failed to parse float type\");\n }\n\n const { source } = tokeniser;\n const num_type = integer_type(tokeniser) || decimal_type(tokeniser);\n if (num_type) return num_type;\n const base = tokeniser.consume(\"bigint\", \"boolean\", \"byte\", \"octet\", \"undefined\");\n if (base) {\n return new Type({ source, tokens: { base } });\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function argument_list(tokeniser) {\n return list(tokeniser, { parser: Argument.parse, listName: \"arguments list\" });\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nexport function type_with_extended_attributes(tokeniser, typeName) {\n const extAttrs = ExtendedAttributes.parse(tokeniser);\n const ret = Type.parse(tokeniser, typeName);\n if (ret) autoParenter(ret).extAttrs = extAttrs;\n return ret;\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {string} typeName\n */\nexport function return_type(tokeniser, typeName) {\n const typ = Type.parse(tokeniser, typeName || \"return-type\");\n if (typ) {\n return typ;\n }\n const voidToken = tokeniser.consume(\"void\");\n if (voidToken) {\n const ret = new Type({ source: tokeniser.source, tokens: { base: voidToken } });\n ret.type = \"return-type\";\n return ret;\n }\n}\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nexport function stringifier(tokeniser) {\n const special = tokeniser.consume(\"stringifier\");\n if (!special) return;\n const member = Attribute.parse(tokeniser, { special }) ||\n Operation.parse(tokeniser, { special }) ||\n tokeniser.error(\"Unterminated stringifier\");\n return member;\n}\n\n/**\n * @param {string} str\n */\nexport function getLastIndentation(str) {\n const lines = str.split(\"\\n\");\n // the first line visually binds to the preceding token\n if (lines.length) {\n const match = lines[lines.length - 1].match(/^\\s+/);\n if (match) {\n return match[0];\n }\n }\n return \"\";\n}\n\n/**\n * @param {string} parentTrivia\n */\nexport function getMemberIndentation(parentTrivia) {\n const indentation = getLastIndentation(parentTrivia);\n const indentCh = indentation.includes(\"\\t\") ? \"\\t\" : \" \";\n return indentation + indentCh;\n}\n\n/**\n * @param {object} def\n * @param {import(\"./extended-attributes.js\").ExtendedAttributes} def.extAttrs\n */\nexport function autofixAddExposedWindow(def) {\n return () => {\n if (def.extAttrs.length){\n const tokeniser = new Tokeniser(\"Exposed=Window,\");\n const exposed = SimpleExtendedAttribute.parse(tokeniser);\n exposed.tokens.separator = tokeniser.consume(\",\");\n const existing = def.extAttrs[0];\n if (!/^\\s/.test(existing.tokens.name.trivia)) {\n existing.tokens.name.trivia = ` ${existing.tokens.name.trivia}`;\n }\n def.extAttrs.unshift(exposed);\n } else {\n autoParenter(def).extAttrs = ExtendedAttributes.parse(new Tokeniser(\"[Exposed=Window]\"));\n const trivia = def.tokens.base.trivia;\n def.extAttrs.tokens.open.trivia = trivia;\n def.tokens.base.trivia = `\\n${getLastIndentation(trivia)}`;\n }\n };\n}\n\n/**\n * Get the first syntax token for the given IDL object.\n * @param {*} data\n */\nexport function getFirstToken(data) {\n if (data.extAttrs.length) {\n return data.extAttrs.tokens.open;\n }\n if (data.type === \"operation\" && !data.special) {\n return getFirstToken(data.idlType);\n }\n const tokens = Object.values(data.tokens).sort((x, y) => x.index - y.index);\n return tokens[0];\n}\n\n/**\n * @template T\n * @param {T[]} array\n * @param {(item: T) => boolean} predicate\n */\nexport function findLastIndex(array, predicate) {\n const index = array.slice().reverse().findIndex(predicate);\n if (index === -1) {\n return index;\n }\n return array.length - index - 1;\n}\n\n/**\n * Returns a proxy that auto-assign `parent` field.\n * @template T\n * @param {T} data\n * @param {*} [parent] The object that will be assigned to `parent`.\n * If absent, it will be `data` by default.\n * @return {T}\n */\nexport function autoParenter(data, parent) {\n if (!parent) {\n // Defaults to `data` unless specified otherwise.\n parent = data;\n }\n if (!data) {\n // This allows `autoParenter(undefined)` which again allows\n // `autoParenter(parse())` where the function may return nothing.\n return data;\n }\n return new Proxy(data, {\n get(target, p) {\n const value = target[p];\n if (Array.isArray(value)) {\n // Wraps the array so that any added items will also automatically\n // get their `parent` values.\n return autoParenter(value, target);\n }\n return value;\n },\n set(target, p, value) {\n target[p] = value;\n if (!value) {\n return true;\n } else if (Array.isArray(value)) {\n // Assigning an array will add `parent` to its items.\n for (const item of value) {\n if (typeof item.parent !== \"undefined\") {\n item.parent = parent;\n }\n }\n } else if (typeof value.parent !== \"undefined\") {\n value.parent = parent;\n }\n return true;\n }\n });\n}\n","import { syntaxError } from \"./error.js\";\nimport { unescape } from \"./productions/helpers.js\";\n\n// These regular expressions use the sticky flag so they will only match at\n// the current location (ie. the offset of lastIndex).\nconst tokenRe = {\n // This expression uses a lookahead assertion to catch false matches\n // against integers early.\n \"decimal\": /-?(?=[0-9]*\\.|[0-9]+[eE])(([0-9]+\\.[0-9]*|[0-9]*\\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/y,\n \"integer\": /-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/y,\n \"identifier\": /[_-]?[A-Za-z][0-9A-Z_a-z-]*/y,\n \"string\": /\"[^\"]*\"/y,\n \"whitespace\": /[\\t\\n\\r ]+/y,\n \"comment\": /((\\/(\\/.*|\\*([^*]|\\*[^/])*\\*\\/)[\\t\\n\\r ]*)+)/y,\n \"other\": /[^\\t\\n\\r 0-9A-Za-z]/y\n};\n\nexport const typeNameKeywords = [\n \"ArrayBuffer\",\n \"DataView\",\n \"Int8Array\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint8Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"Uint8ClampedArray\",\n \"Float32Array\",\n \"Float64Array\",\n \"any\",\n \"object\",\n \"symbol\"\n];\n\nexport const stringTypes = [\n \"ByteString\",\n \"DOMString\",\n \"USVString\"\n];\n\nexport const argumentNameKeywords = [\n \"async\",\n \"attribute\",\n \"callback\",\n \"const\",\n \"constructor\",\n \"deleter\",\n \"dictionary\",\n \"enum\",\n \"getter\",\n \"includes\",\n \"inherit\",\n \"interface\",\n \"iterable\",\n \"maplike\",\n \"namespace\",\n \"partial\",\n \"required\",\n \"setlike\",\n \"setter\",\n \"static\",\n \"stringifier\",\n \"typedef\",\n \"unrestricted\"\n];\n\nconst nonRegexTerminals = [\n \"-Infinity\",\n \"FrozenArray\",\n \"Infinity\",\n \"NaN\",\n \"ObservableArray\",\n \"Promise\",\n \"bigint\",\n \"boolean\",\n \"byte\",\n \"double\",\n \"false\",\n \"float\",\n \"long\",\n \"mixin\",\n \"null\",\n \"octet\",\n \"optional\",\n \"or\",\n \"readonly\",\n \"record\",\n \"sequence\",\n \"short\",\n \"true\",\n \"undefined\",\n \"unsigned\",\n \"void\"\n].concat(argumentNameKeywords, stringTypes, typeNameKeywords);\n\nconst punctuations = [\n \"(\",\n \")\",\n \",\",\n \"...\",\n \":\",\n \";\",\n \"<\",\n \"=\",\n \">\",\n \"?\",\n \"[\",\n \"]\",\n \"{\",\n \"}\"\n];\n\nconst reserved = [\n // \"constructor\" is now a keyword\n \"_constructor\",\n \"toString\",\n \"_toString\",\n];\n\n/**\n * @typedef {ArrayItemType<ReturnType<typeof tokenise>>} Token\n * @param {string} str\n */\nfunction tokenise(str) {\n const tokens = [];\n let lastCharIndex = 0;\n let trivia = \"\";\n let line = 1;\n let index = 0;\n while (lastCharIndex < str.length) {\n const nextChar = str.charAt(lastCharIndex);\n let result = -1;\n\n if (/[\\t\\n\\r ]/.test(nextChar)) {\n result = attemptTokenMatch(\"whitespace\", { noFlushTrivia: true });\n } else if (nextChar === '/') {\n result = attemptTokenMatch(\"comment\", { noFlushTrivia: true });\n }\n\n if (result !== -1) {\n const currentTrivia = tokens.pop().value;\n line += (currentTrivia.match(/\\n/g) || []).length;\n trivia += currentTrivia;\n index -= 1;\n } else if (/[-0-9.A-Z_a-z]/.test(nextChar)) {\n result = attemptTokenMatch(\"decimal\");\n if (result === -1) {\n result = attemptTokenMatch(\"integer\");\n }\n if (result === -1) {\n result = attemptTokenMatch(\"identifier\");\n const lastIndex = tokens.length - 1;\n const token = tokens[lastIndex];\n if (result !== -1) {\n if (reserved.includes(token.value)) {\n const message = `${unescape(token.value)} is a reserved identifier and must not be used.`;\n throw new WebIDLParseError(syntaxError(tokens, lastIndex, null, message));\n } else if (nonRegexTerminals.includes(token.value)) {\n token.type = token.value;\n }\n }\n }\n } else if (nextChar === '\"') {\n result = attemptTokenMatch(\"string\");\n }\n\n for (const punctuation of punctuations) {\n if (str.startsWith(punctuation, lastCharIndex)) {\n tokens.push({ type: punctuation, value: punctuation, trivia, line, index });\n trivia = \"\";\n lastCharIndex += punctuation.length;\n result = lastCharIndex;\n break;\n }\n }\n\n // other as the last try\n if (result === -1) {\n result = attemptTokenMatch(\"other\");\n }\n if (result === -1) {\n throw new Error(\"Token stream not progressing\");\n }\n lastCharIndex = result;\n index += 1;\n }\n\n // remaining trivia as eof\n tokens.push({\n type: \"eof\",\n value: \"\",\n trivia\n });\n\n return tokens;\n\n /**\n * @param {keyof typeof tokenRe} type\n * @param {object} options\n * @param {boolean} [options.noFlushTrivia]\n */\n function attemptTokenMatch(type, { noFlushTrivia } = {}) {\n const re = tokenRe[type];\n re.lastIndex = lastCharIndex;\n const result = re.exec(str);\n if (result) {\n tokens.push({ type, value: result[0], trivia, line, index });\n if (!noFlushTrivia) {\n trivia = \"\";\n }\n return re.lastIndex;\n }\n return -1;\n }\n}\n\nexport class Tokeniser {\n /**\n * @param {string} idl\n */\n constructor(idl) {\n this.source = tokenise(idl);\n this.position = 0;\n }\n\n /**\n * @param {string} message\n * @return {never}\n */\n error(message) {\n throw new WebIDLParseError(syntaxError(this.source, this.position, this.current, message));\n }\n\n /**\n * @param {string} type\n */\n probe(type) {\n return this.source.length > this.position && this.source[this.position].type === type;\n }\n\n /**\n * @param {...string} candidates\n */\n consume(...candidates) {\n for (const type of candidates) {\n if (!this.probe(type)) continue;\n const token = this.source[this.position];\n this.position++;\n return token;\n }\n }\n\n /**\n * @param {number} position\n */\n unconsume(position) {\n this.position = position;\n }\n}\n\nexport class WebIDLParseError extends Error {\n /**\n * @param {object} options\n * @param {string} options.message\n * @param {string} options.bareMessage\n * @param {string} options.context\n * @param {number} options.line\n * @param {*} options.sourceName\n * @param {string} options.input\n * @param {*[]} options.tokens\n */\n constructor({ message, bareMessage, context, line, sourceName, input, tokens }) {\n super(message);\n\n this.name = \"WebIDLParseError\"; // not to be mangled\n this.bareMessage = bareMessage;\n this.context = context;\n this.line = line;\n this.sourceName = sourceName;\n this.input = input;\n this.tokens = tokens;\n }\n}\n","import { list, unescape, autoParenter } from \"./helpers.js\";\nimport { Token } from \"./token.js\";\nimport { Base } from \"./base.js\";\n\nclass EnumValue extends Token {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const value = tokeniser.consume(\"string\");\n if (value) {\n return new EnumValue({ source: tokeniser.source, tokens: { value } });\n }\n }\n\n get type() {\n return \"enum-value\";\n }\n get value() {\n return super.value.slice(1, -1);\n }\n}\n\nexport class Enum extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n tokens.base = tokeniser.consume(\"enum\");\n if (!tokens.base) {\n return;\n }\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"No name for enum\");\n const ret = autoParenter(new Enum({ source: tokeniser.source, tokens }));\n tokeniser.current = ret.this;\n tokens.open = tokeniser.consume(\"{\") || tokeniser.error(\"Bodyless enum\");\n ret.values = list(tokeniser, {\n parser: EnumValue.parse,\n allowDangler: true,\n listName: \"enumeration\"\n });\n if (tokeniser.probe(\"string\")) {\n tokeniser.error(\"No comma between enum values\");\n }\n tokens.close = tokeniser.consume(\"}\") || tokeniser.error(\"Unexpected value in enum\");\n if (!ret.values.length) {\n tokeniser.error(\"No value in enum\");\n }\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No semicolon after enum\");\n return ret.this;\n }\n\n get type() {\n return \"enum\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n}\n","// @ts-check\n\nimport { Base } from \"./base.js\";\nimport { unescape } from \"./helpers.js\";\n\nexport class Includes extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const target = tokeniser.consume(\"identifier\");\n if (!target) {\n return;\n }\n const tokens = { target };\n tokens.includes = tokeniser.consume(\"includes\");\n if (!tokens.includes) {\n tokeniser.unconsume(target.index);\n return;\n }\n tokens.mixin = tokeniser.consume(\"identifier\") || tokeniser.error(\"Incomplete includes statement\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No terminating ; for includes statement\");\n return new Includes({ source: tokeniser.source, tokens });\n }\n\n get type() {\n return \"includes\";\n }\n get target() {\n return unescape(this.tokens.target.value);\n }\n get includes() {\n return unescape(this.tokens.mixin.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, unescape, autoParenter } from \"./helpers.js\";\n\nexport class Typedef extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Typedef({ source: tokeniser.source, tokens }));\n tokens.base = tokeniser.consume(\"typedef\");\n if (!tokens.base) {\n return;\n }\n ret.idlType = type_with_extended_attributes(tokeniser, \"typedef-type\") || tokeniser.error(\"Typedef lacks a type\");\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Typedef lacks a name\");\n tokeniser.current = ret.this;\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated typedef, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"typedef\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.idlType.validate(defs);\n }\n}\n","import { Base } from \"./base.js\";\nimport { return_type, argument_list, unescape, autoParenter } from \"./helpers.js\";\n\nexport class CallbackFunction extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser, base) {\n const tokens = { base };\n const ret = autoParenter(new CallbackFunction({ source: tokeniser.source, tokens }));\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Callback lacks a name\");\n tokeniser.current = ret.this;\n tokens.assign = tokeniser.consume(\"=\") || tokeniser.error(\"Callback lacks an assignment\");\n ret.idlType = return_type(tokeniser) || tokeniser.error(\"Callback lacks a return type\");\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"Callback lacks parentheses for arguments\");\n ret.arguments = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated callback\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated callback, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"callback\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n yield* this.idlType.validate(defs);\n }\n}\n","import { Base } from \"./base.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { unescape, autoParenter } from \"./helpers.js\";\n\n/**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\nfunction inheritance(tokeniser) {\n const colon = tokeniser.consume(\":\");\n if (!colon) {\n return {};\n }\n const inheritance = tokeniser.consume(\"identifier\") || tokeniser.error(\"Inheritance lacks a type\");\n return { colon, inheritance };\n}\n\nexport class Container extends Base {\n /**\n * @template T\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {T} instance\n * @param {*} args\n */\n static parse(tokeniser, instance, { type, inheritable, allowedMembers }) {\n const { tokens } = instance;\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(`Missing name in ${instance.type}`);\n tokeniser.current = instance;\n instance = autoParenter(instance);\n if (inheritable) {\n Object.assign(tokens, inheritance(tokeniser));\n }\n tokens.open = tokeniser.consume(\"{\") || tokeniser.error(`Bodyless ${type}`);\n instance.members = [];\n while (true) {\n tokens.close = tokeniser.consume(\"}\");\n if (tokens.close) {\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(`Missing semicolon after ${type}`);\n return instance.this;\n }\n const ea = ExtendedAttributes.parse(tokeniser);\n let mem;\n for (const [parser, ...args] of allowedMembers) {\n mem = autoParenter(parser(tokeniser, ...args));\n if (mem) {\n break;\n }\n }\n if (!mem) {\n tokeniser.error(\"Unknown member\");\n }\n mem.extAttrs = ea;\n instance.members.push(mem.this);\n }\n }\n\n get partial() {\n return !!this.tokens.partial;\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get inheritance() {\n if (!this.tokens.inheritance) {\n return null;\n }\n return unescape(this.tokens.inheritance.value);\n }\n\n *validate(defs) {\n for (const member of this.members) {\n if (member.validate) {\n yield* member.validate(defs);\n }\n }\n }\n }\n","import { Base } from \"./base.js\";\nimport { Type } from \"./type.js\";\nimport { const_data, const_value, primitive_type, autoParenter, unescape } from \"./helpers.js\";\n\nexport class Constant extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n tokens.base = tokeniser.consume(\"const\");\n if (!tokens.base) {\n return;\n }\n let idlType = primitive_type(tokeniser);\n if (!idlType) {\n const base = tokeniser.consume(\"identifier\") || tokeniser.error(\"Const lacks a type\");\n idlType = new Type({ source: tokeniser.source, tokens: { base } });\n }\n if (tokeniser.probe(\"?\")) {\n tokeniser.error(\"Unexpected nullable constant type\");\n }\n idlType.type = \"const-type\";\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Const lacks a name\");\n tokens.assign = tokeniser.consume(\"=\") || tokeniser.error(\"Const lacks value assignment\");\n tokens.value = const_value(tokeniser) || tokeniser.error(\"Const lacks a value\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated const, expected `;`\");\n const ret = new Constant({ source: tokeniser.source, tokens });\n autoParenter(ret).idlType = idlType;\n return ret;\n }\n\n get type() {\n return \"const\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get value() {\n return const_data(this.tokens.value);\n }\n}\n","import { Base } from \"./base.js\";\nimport { type_with_extended_attributes, autoParenter, argument_list } from \"./helpers.js\";\n\nexport class IterableLike extends Base {\n /**\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const start_position = tokeniser.position;\n const tokens = {};\n const ret = autoParenter(new IterableLike({ source: tokeniser.source, tokens }));\n tokens.readonly = tokeniser.consume(\"readonly\");\n if (!tokens.readonly) {\n tokens.async = tokeniser.consume(\"async\");\n }\n tokens.base =\n tokens.readonly ? tokeniser.consume(\"maplike\", \"setlike\") :\n tokens.async ? tokeniser.consume(\"iterable\") :\n tokeniser.consume(\"iterable\", \"maplike\", \"setlike\");\n if (!tokens.base) {\n tokeniser.unconsume(start_position);\n return;\n }\n\n const { type } = ret;\n const secondTypeRequired = type === \"maplike\";\n const secondTypeAllowed = secondTypeRequired || type === \"iterable\";\n const argumentAllowed = ret.async && type === \"iterable\";\n\n tokens.open = tokeniser.consume(\"<\") || tokeniser.error(`Missing less-than sign \\`<\\` in ${type} declaration`);\n const first = type_with_extended_attributes(tokeniser) || tokeniser.error(`Missing a type argument in ${type} declaration`);\n ret.idlType = [first];\n ret.arguments = [];\n\n if (secondTypeAllowed) {\n first.tokens.separator = tokeniser.consume(\",\");\n if (first.tokens.separator) {\n ret.idlType.push(type_with_extended_attributes(tokeniser));\n }\n else if (secondTypeRequired) {\n tokeniser.error(`Missing second type argument in ${type} declaration`);\n }\n }\n\n tokens.close = tokeniser.consume(\">\") || tokeniser.error(`Missing greater-than sign \\`>\\` in ${type} declaration`);\n\n if (tokeniser.probe(\"(\")) {\n if (argumentAllowed) {\n tokens.argsOpen = tokeniser.consume(\"(\");\n ret.arguments.push(...argument_list(tokeniser));\n tokens.argsClose = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated async iterable argument list\");\n } else {\n tokeniser.error(`Arguments are only allowed for \\`async iterable\\``);\n }\n }\n\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(`Missing semicolon after ${type} declaration`);\n\n return ret.this;\n }\n\n get type() {\n return this.tokens.base.value;\n }\n get readonly() {\n return !!this.tokens.readonly;\n }\n get async() {\n return !!this.tokens.async;\n }\n\n *validate(defs) {\n for (const type of this.idlType) {\n yield* type.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Base } from \"./base.js\";\nimport { argument_list, autoParenter } from \"./helpers.js\";\n\nexport class Constructor extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n const base = tokeniser.consume(\"constructor\");\n if (!base) {\n return;\n }\n /** @type {Base[\"tokens\"]} */\n const tokens = { base };\n tokens.open = tokeniser.consume(\"(\") || tokeniser.error(\"No argument list in constructor\");\n const args = argument_list(tokeniser);\n tokens.close = tokeniser.consume(\")\") || tokeniser.error(\"Unterminated constructor\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"No semicolon after constructor\");\n const ret = new Constructor({ source: tokeniser.source, tokens });\n autoParenter(ret).arguments = args;\n return ret;\n }\n\n get type() {\n return \"constructor\";\n }\n\n *validate(defs) {\n if (this.idlType) {\n yield* this.idlType.validate(defs);\n }\n for (const argument of this.arguments) {\n yield* argument.validate(defs);\n }\n }\n}\n","import { Container } from \"./container.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { Constant } from \"./constant.js\";\nimport { IterableLike } from \"./iterable.js\";\nimport { stringifier, autofixAddExposedWindow, getMemberIndentation, getLastIndentation, getFirstToken, findLastIndex, autoParenter } from \"./helpers.js\";\nimport { validationError } from \"../error.js\";\nimport { checkInterfaceMemberDuplication } from \"../validators/interface.js\";\nimport { Constructor } from \"./constructor.js\";\nimport { Tokeniser } from \"../tokeniser.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\n\n/**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\nfunction static_member(tokeniser) {\n const special = tokeniser.consume(\"static\");\n if (!special) return;\n const member = Attribute.parse(tokeniser, { special }) ||\n Operation.parse(tokeniser, { special }) ||\n tokeniser.error(\"No body in static member\");\n return member;\n}\n\nexport class Interface extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser, base, { partial = null } = {}) {\n const tokens = { partial, base };\n return Container.parse(tokeniser, new Interface({ source: tokeniser.source, tokens }), {\n type: \"interface\",\n inheritable: !partial,\n allowedMembers: [\n [Constant.parse],\n [Constructor.parse],\n [static_member],\n [stringifier],\n [IterableLike.parse],\n [Attribute.parse],\n [Operation.parse]\n ]\n });\n }\n\n get type() {\n return \"interface\";\n }\n\n *validate(defs) {\n yield* this.extAttrs.validate(defs);\n if (\n !this.partial &&\n this.extAttrs.every(extAttr => extAttr.name !== \"Exposed\")\n ) {\n const message = `Interfaces must have \\`[Exposed]\\` extended attribute. \\\nTo fix, add, for example, \\`[Exposed=Window]\\`. Please also consider carefully \\\nif your interface should also be exposed in a Worker scope. Refer to the \\\n[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \\\nfor more information.`;\n yield validationError(this.tokens.name, this, \"require-exposed\", message, {\n autofix: autofixAddExposedWindow(this)\n });\n }\n const oldConstructors = this.extAttrs.filter(extAttr => extAttr.name === \"Constructor\");\n for (const constructor of oldConstructors) {\n const message = `Constructors should now be represented as a \\`constructor()\\` operation on the interface \\\ninstead of \\`[Constructor]\\` extended attribute. Refer to the \\\n[WebIDL spec section on constructor operations](https://heycam.github.io/webidl/#idl-constructors) \\\nfor more information.`;\n yield validationError(constructor.tokens.name, this, \"constructor-member\", message, {\n autofix: autofixConstructor(this, constructor)\n });\n }\n\n const isGlobal = this.extAttrs.some(extAttr => extAttr.name === \"Global\");\n if (isGlobal) {\n const factoryFunctions = this.extAttrs.filter(extAttr => extAttr.name === \"LegacyFactoryFunction\");\n for (const named of factoryFunctions) {\n const message = `Interfaces marked as \\`[Global]\\` cannot have factory functions.`;\n yield validationError(named.tokens.name, this, \"no-constructible-global\", message);\n }\n\n const constructors = this.members.filter(member => member.type === \"constructor\");\n for (const named of constructors) {\n const message = `Interfaces marked as \\`[Global]\\` cannot have constructors.`;\n yield validationError(named.tokens.base, this, \"no-constructible-global\", message);\n }\n }\n\n yield* super.validate(defs);\n if (!this.partial) {\n yield* checkInterfaceMemberDuplication(defs, this);\n }\n }\n}\n\nfunction autofixConstructor(interfaceDef, constructorExtAttr) {\n interfaceDef = autoParenter(interfaceDef);\n return () => {\n const indentation = getLastIndentation(interfaceDef.extAttrs.tokens.open.trivia);\n const memberIndent = interfaceDef.members.length ?\n getLastIndentation(getFirstToken(interfaceDef.members[0]).trivia) :\n getMemberIndentation(indentation);\n const constructorOp = Constructor.parse(new Tokeniser(`\\n${memberIndent}constructor();`));\n constructorOp.extAttrs = new ExtendedAttributes({});\n autoParenter(constructorOp).arguments = constructorExtAttr.arguments;\n\n const existingIndex = findLastIndex(interfaceDef.members, m => m.type === \"constructor\");\n interfaceDef.members.splice(existingIndex + 1, 0, constructorOp);\n\n const { close } = interfaceDef.tokens;\n if (!close.trivia.includes(\"\\n\")) {\n close.trivia += `\\n${indentation}`;\n }\n\n const { extAttrs } = interfaceDef;\n const index = extAttrs.indexOf(constructorExtAttr);\n const removed = extAttrs.splice(index, 1);\n if (!extAttrs.length) {\n extAttrs.tokens.open = extAttrs.tokens.close = undefined;\n } else if (extAttrs.length === index) {\n extAttrs[index - 1].tokens.separator = undefined;\n } else if (!extAttrs[index].tokens.name.trivia.trim()) {\n extAttrs[index].tokens.name.trivia = removed[0].tokens.name.trivia;\n }\n };\n}\n","// @ts-check\n\nimport { validationError } from \"../error.js\";\n\nexport function* checkInterfaceMemberDuplication(defs, i) {\n const opNames = new Set(getOperations(i).map(op => op.name));\n const partials = defs.partials.get(i.name) || [];\n const mixins = defs.mixinMap.get(i.name) || [];\n for (const ext of [...partials, ...mixins]) {\n const additions = getOperations(ext);\n yield* forEachExtension(additions, opNames, ext, i);\n for (const addition of additions) {\n opNames.add(addition.name);\n }\n }\n\n function* forEachExtension(additions, existings, ext, base) {\n for (const addition of additions) {\n const { name } = addition;\n if (name && existings.has(name)) {\n const message = `The operation \"${name}\" has already been defined for the base interface \"${base.name}\" either in itself or in a mixin`;\n yield validationError(addition.tokens.name, ext, \"no-cross-overload\", message);\n }\n }\n }\n\n function getOperations(i) {\n return i.members\n .filter(({type}) => type === \"operation\");\n }\n}\n","import { Container } from \"./container.js\";\nimport { Constant } from \"./constant.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { stringifier } from \"./helpers.js\";\n\nexport class Mixin extends Container {\n /**\n * @typedef {import(\"../tokeniser.js\").Token} Token\n *\n * @param {import(\"../tokeniser.js\").Tokeniser} tokeniser\n * @param {Token} base\n * @param {object} [options]\n * @param {Token} [options.partial]\n */\n static parse(tokeniser, base, { partial } = {}) {\n const tokens = { partial, base };\n tokens.mixin = tokeniser.consume(\"mixin\");\n if (!tokens.mixin) {\n return;\n }\n return Container.parse(tokeniser, new Mixin({ source: tokeniser.source, tokens }), {\n type: \"interface mixin\",\n allowedMembers: [\n [Constant.parse],\n [stringifier],\n [Attribute.parse, { noInherit: true }],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"interface mixin\";\n }\n}\n","import { Base } from \"./base.js\";\nimport { unescape, type_with_extended_attributes, autoParenter } from \"./helpers.js\";\nimport { ExtendedAttributes } from \"./extended-attributes.js\";\nimport { Default } from \"./default.js\";\n\nexport class Field extends Base {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser) {\n /** @type {Base[\"tokens\"]} */\n const tokens = {};\n const ret = autoParenter(new Field({ source: tokeniser.source, tokens }));\n ret.extAttrs = ExtendedAttributes.parse(tokeniser);\n tokens.required = tokeniser.consume(\"required\");\n ret.idlType = type_with_extended_attributes(tokeniser, \"dictionary-type\") || tokeniser.error(\"Dictionary member lacks a type\");\n tokens.name = tokeniser.consume(\"identifier\") || tokeniser.error(\"Dictionary member lacks a name\");\n ret.default = Default.parse(tokeniser);\n if (tokens.required && ret.default) tokeniser.error(\"Required member must not have a default\");\n tokens.termination = tokeniser.consume(\";\") || tokeniser.error(\"Unterminated dictionary member, expected `;`\");\n return ret.this;\n }\n\n get type() {\n return \"field\";\n }\n get name() {\n return unescape(this.tokens.name.value);\n }\n get required() {\n return !!this.tokens.required;\n }\n\n *validate(defs) {\n yield* this.idlType.validate(defs);\n }\n}\n","// @ts-check\n\nimport { Container } from \"./container.js\";\nimport { Field } from \"./field.js\";\n\nexport class Dictionary extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {import(\"../tokeniser.js\").Token} [options.partial]\n */\n static parse(tokeniser, { partial } = {}) {\n const tokens = { partial };\n tokens.base = tokeniser.consume(\"dictionary\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new Dictionary({ source: tokeniser.source, tokens }), {\n type: \"dictionary\",\n inheritable: !partial,\n allowedMembers: [\n [Field.parse],\n ]\n });\n }\n\n get type() {\n return \"dictionary\";\n }\n}\n","import { Container } from \"./container.js\";\nimport { Attribute } from \"./attribute.js\";\nimport { Operation } from \"./operation.js\";\nimport { validationError } from \"../error.js\";\nimport { autofixAddExposedWindow } from \"./helpers.js\";\n\nexport class Namespace extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n * @param {object} [options]\n * @param {import(\"../tokeniser.js\").Token} [options.partial]\n */\n static parse(tokeniser, { partial } = {}) {\n const tokens = { partial };\n tokens.base = tokeniser.consume(\"namespace\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new Namespace({ source: tokeniser.source, tokens }), {\n type: \"namespace\",\n allowedMembers: [\n [Attribute.parse, { noInherit: true, readonly: true }],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"namespace\";\n }\n\n *validate(defs) {\n if (!this.partial && this.extAttrs.every(extAttr => extAttr.name !== \"Exposed\")) {\n const message = `Namespaces must have [Exposed] extended attribute. \\\nTo fix, add, for example, [Exposed=Window]. Please also consider carefully \\\nif your namespace should also be exposed in a Worker scope. Refer to the \\\n[WebIDL spec section on Exposed](https://heycam.github.io/webidl/#Exposed) \\\nfor more information.`;\n yield validationError(this.tokens.name, this, \"require-exposed\", message, {\n autofix: autofixAddExposedWindow(this)\n });\n }\n yield* super.validate(defs);\n }\n}\n","// @ts-check\n\nimport { Container } from \"./container.js\";\nimport { Operation } from \"./operation.js\";\nimport { Constant } from \"./constant.js\";\n\nexport class CallbackInterface extends Container {\n /**\n * @param {import(\"../tokeniser\").Tokeniser} tokeniser\n */\n static parse(tokeniser, callback, { partial = null } = {}) {\n const tokens = { callback };\n tokens.base = tokeniser.consume(\"interface\");\n if (!tokens.base) {\n return;\n }\n return Container.parse(tokeniser, new CallbackInterface({ source: tokeniser.source, tokens }), {\n type: \"callback interface\",\n inheritable: !partial,\n allowedMembers: [\n [Constant.parse],\n [Operation.parse, { regular: true }]\n ]\n });\n }\n\n get type() {\n return \"callback interface\";\n }\n}\n","\"use strict\";\n\nimport { Tokeniser } from \"./tokeniser.js\";\nimport { Enum } from \"./productions/enum.js\";\nimport { Includes } from \"./productions/includes.js\";\nimport { ExtendedAttributes } from \"./productions/extended-attributes.js\";\nimport { Typedef } from \"./productions/typedef.js\";\nimport { CallbackFunction } from \"./productions/callback.js\";\nimport { Interface } from \"./productions/interface.js\";\nimport { Mixin } from \"./productions/mixin.js\";\nimport { Dictionary } from \"./productions/dictionary.js\";\nimport { Namespace } from \"./productions/namespace.js\";\nimport { CallbackInterface } from \"./productions/callback-interface.js\";\nimport { autoParenter } from \"./productions/helpers.js\";\n\n/**\n * @param {Tokeniser} tokeniser\n * @param {object} options\n * @param {boolean} [options.concrete]\n */\nfunction parseByTokens(tokeniser, options) {\n const source = tokeniser.source;\n\n function error(str) {\n tokeniser.error(str);\n }\n\n function consume(...candidates) {\n return tokeniser.consume(...candidates);\n }\n\n function callback() {\n const callback = consume(\"callback\");\n if (!callback) return;\n if (tokeniser.probe(\"interface\")) {\n return CallbackInterface.parse(tokeniser, callback);\n }\n return CallbackFunction.parse(tokeniser, callback);\n }\n\n function interface_(opts) {\n const base = consume(\"interface\");\n if (!base) return;\n const ret = Mixin.parse(tokeniser, base, opts) ||\n Interface.parse(tokeniser, base, opts) ||\n error(\"Interface has no proper body\");\n return ret;\n }\n\n function partial() {\n const partial = consume(\"partial\");\n if (!partial) return;\n return Dictionary.parse(tokeniser, { partial }) ||\n interface_({ partial }) ||\n Namespace.parse(tokeniser, { partial }) ||\n error(\"Partial doesn't apply to anything\");\n }\n\n function definition() {\n return callback() ||\n interface_() ||\n partial() ||\n Dictionary.parse(tokeniser) ||\n Enum.parse(tokeniser) ||\n Typedef.parse(tokeniser) ||\n Includes.parse(tokeniser) ||\n Namespace.parse(tokeniser);\n }\n\n function definitions() {\n if (!source.length) return [];\n const defs = [];\n while (true) {\n const ea = ExtendedAttributes.parse(tokeniser);\n const def = definition();\n if (!def) {\n if (ea.length) error(\"Stray extended attributes\");\n break;\n }\n autoParenter(def).extAttrs = ea;\n defs.push(def);\n }\n const eof = consume(\"eof\");\n if (options.concrete) {\n defs.push(eof);\n }\n return defs;\n }\n const res = definitions();\n if (tokeniser.position < source.length) error(\"Unrecognised tokens\");\n return res;\n}\n\n/**\n * @param {string} str\n * @param {object} [options]\n * @param {*} [options.sourceName]\n * @param {boolean} [options.concrete]\n */\nexport function parse(str, options = {}) {\n const tokeniser = new Tokeniser(str);\n if (typeof options.sourceName !== \"undefined\") {\n tokeniser.source.name = options.sourceName;\n }\n return parseByTokens(tokeniser, options);\n}\n","\"use strict\";\n\nfunction noop(arg) {\n return arg;\n}\n\nconst templates = {\n wrap: items => items.join(\"\"),\n trivia: noop,\n name: noop,\n reference: noop,\n type: noop,\n generic: noop,\n nameless: noop,\n inheritance: noop,\n definition: noop,\n extendedAttribute: noop,\n extendedAttributeReference: noop\n};\n\nexport function write(ast, { templates: ts = templates } = {}) {\n ts = Object.assign({}, templates, ts);\n\n function reference(raw, { unescaped, context }) {\n if (!unescaped) {\n unescaped = raw.startsWith(\"_\") ? raw.slice(1) : raw;\n }\n return ts.reference(raw, unescaped, context);\n }\n\n function token(t, wrapper = noop, ...args) {\n if (!t) {\n return \"\";\n }\n const value = wrapper(t.value, ...args);\n return ts.wrap([ts.trivia(t.trivia), value]);\n }\n\n function reference_token(t, context) {\n return token(t, reference, { context });\n }\n\n function name_token(t, arg) {\n return token(t, ts.name, arg);\n }\n\n function type_body(it) {\n if (it.union || it.generic) {\n return ts.wrap([\n token(it.tokens.base, ts.generic),\n token(it.tokens.open),\n ...it.subtype.map(type),\n token(it.tokens.close)\n ]);\n }\n const firstToken = it.tokens.prefix || it.tokens.base;\n const prefix = it.tokens.prefix ? [\n it.tokens.prefix.value,\n ts.trivia(it.tokens.base.trivia)\n ] : [];\n const ref = reference(ts.wrap([\n ...prefix,\n it.tokens.base.value,\n token(it.tokens.postfix)\n ]), { unescaped: it.idlType, context: it });\n return ts.wrap([ts.trivia(firstToken.trivia), ref]);\n }\n function type(it) {\n return ts.wrap([\n extended_attributes(it.extAttrs),\n type_body(it),\n token(it.tokens.nullable),\n token(it.tokens.separator)\n ]);\n }\n function default_(def) {\n if (!def) {\n return \"\";\n }\n return ts.wrap([\n token(def.tokens.assign),\n ...def.expression.map(t => token(t))\n ]);\n }\n function argument(arg) {\n return ts.wrap([\n extended_attributes(arg.extAttrs),\n token(arg.tokens.optional),\n ts.type(type(arg.idlType)),\n token(arg.tokens.variadic),\n name_token(arg.tokens.name, { data: arg }),\n default_(arg.default),\n token(arg.tokens.separator)\n ]);\n }\n function extended_attribute_listitem(str) {\n return ts.wrap([\n token(str.tokens.value),\n token(str.tokens.separator)\n ]);\n }\n function identifier(id, context) {\n return ts.wrap([\n reference_token(id.tokens.value, context),\n token(id.tokens.separator)\n ]);\n }\n function make_ext_at(it) {\n const { rhsType } = it.params;\n return ts.wrap([\n ts.trivia(it.tokens.name.trivia),\n ts.extendedAttribute(ts.wrap([\n ts.extendedAttributeReference(it.name),\n token(it.params.tokens.assign),\n reference_token(it.params.tokens.secondaryName, it),\n token(it.params.tokens.open),\n ...!it.params.list ? [] :\n it.params.list.map(\n rhsType === \"identifier-list\" ? id => identifier(id, it) :\n rhsType && rhsType.endsWith(\"-list\") ? extended_attribute_listitem :\n argument\n ),\n token(it.params.tokens.close)\n ])),\n token(it.tokens.separator)\n ]);\n }\n function extended_attributes(eats) {\n if (!eats.length) return \"\";\n return ts.wrap([\n token(eats.tokens.open),\n ...eats.map(make_ext_at),\n token(eats.tokens.close)\n ]);\n }\n\n function operation(it, parent) {\n const body = it.idlType ? [\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.open),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.close),\n ] : [];\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n it.tokens.name ? token(it.tokens.special) : token(it.tokens.special, ts.nameless, { data: it, parent }),\n ...body,\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function attribute(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.special),\n token(it.tokens.readonly),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function constructor(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base, ts.nameless, { data: it, parent }),\n token(it.tokens.open),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n\n function inheritance(inh) {\n if (!inh.tokens.inheritance) {\n return \"\";\n }\n return ts.wrap([\n token(inh.tokens.colon),\n ts.trivia(inh.tokens.inheritance.trivia),\n ts.inheritance(reference(inh.tokens.inheritance.value, { context: inh }))\n ]);\n }\n\n function container(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.callback),\n token(it.tokens.partial),\n token(it.tokens.base),\n token(it.tokens.mixin),\n name_token(it.tokens.name, { data: it }),\n inheritance(it),\n token(it.tokens.open),\n iterate(it.members, it),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it });\n }\n\n function field(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.required),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n default_(it.default),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function const_(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it, parent }),\n token(it.tokens.assign),\n token(it.tokens.value),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function typedef(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n ts.type(type(it.idlType)),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function includes(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n reference_token(it.tokens.target, it),\n token(it.tokens.includes),\n reference_token(it.tokens.mixin, it),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function callback(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.assign),\n ts.type(type(it.idlType)),\n token(it.tokens.open),\n ...it.arguments.map(argument),\n token(it.tokens.close),\n token(it.tokens.termination),\n ]), { data: it });\n }\n function enum_(it) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.base),\n name_token(it.tokens.name, { data: it }),\n token(it.tokens.open),\n iterate(it.values, it),\n token(it.tokens.close),\n token(it.tokens.termination)\n ]), { data: it });\n }\n function enum_value(v, parent) {\n return ts.wrap([\n ts.trivia(v.tokens.value.trivia),\n ts.definition(\n ts.wrap(['\"', ts.name(v.value, { data: v, parent }), '\"']),\n { data: v, parent }\n ),\n token(v.tokens.separator)\n ]);\n }\n function iterable_like(it, parent) {\n return ts.definition(ts.wrap([\n extended_attributes(it.extAttrs),\n token(it.tokens.readonly),\n token(it.tokens.async),\n token(it.tokens.base, ts.generic),\n token(it.tokens.open),\n ts.wrap(it.idlType.map(type)),\n token(it.tokens.close),\n token(it.tokens.argsOpen),\n ts.wrap(it.arguments.map(argument)),\n token(it.tokens.argsClose),\n token(it.tokens.termination)\n ]), { data: it, parent });\n }\n function eof(it) {\n return ts.trivia(it.trivia);\n }\n\n const table = {\n interface: container,\n \"interface mixin\": container,\n namespace: container,\n operation,\n attribute,\n constructor,\n dictionary: container,\n field,\n const: const_,\n typedef,\n includes,\n callback,\n enum: enum_,\n \"enum-value\": enum_value,\n iterable: iterable_like,\n maplike: iterable_like,\n setlike: iterable_like,\n \"callback interface\": container,\n eof\n };\n function dispatch(it, parent) {\n const dispatcher = table[it.type];\n if (!dispatcher) {\n throw new Error(`Type \"${it.type}\" is unsupported`);\n }\n return table[it.type](it, parent);\n }\n function iterate(things, parent) {\n if (!things) return;\n const results = things.map(thing => dispatch(thing, parent));\n return ts.wrap(results);\n }\n return iterate(ast);\n}\n","\"use strict\";\n\nimport { validationError as error } from \"./error.js\";\n\nfunction getMixinMap(all, unique) {\n const map = new Map();\n const includes = all.filter(def => def.type === \"includes\");\n for (const include of includes) {\n const mixin = unique.get(include.includes);\n if (!mixin) {\n continue;\n }\n const array = map.get(include.target);\n if (array) {\n array.push(mixin);\n } else {\n map.set(include.target, [mixin]);\n }\n }\n return map;\n}\n\n/**\n * @typedef {ReturnType<typeof groupDefinitions>} Definitions\n */\nfunction groupDefinitions(all) {\n const unique = new Map();\n const duplicates = new Set();\n const partials = new Map();\n for (const def of all) {\n if (def.partial) {\n const array = partials.get(def.name);\n if (array) {\n array.push(def);\n } else {\n partials.set(def.name, [def]);\n }\n continue;\n }\n if (!def.name) {\n continue;\n }\n if (!unique.has(def.name)) {\n unique.set(def.name, def);\n } else {\n duplicates.add(def);\n }\n }\n return {\n all,\n unique,\n partials,\n duplicates,\n mixinMap: getMixinMap(all, unique),\n cache: {\n typedefIncludesDictionary: new WeakMap(),\n dictionaryIncludesRequiredField: new WeakMap()\n },\n };\n}\n\nfunction* checkDuplicatedNames({ unique, duplicates }) {\n for (const dup of duplicates) {\n const { name } = dup;\n const message = `The name \"${name}\" of type \"${unique.get(name).type}\" was already seen`;\n yield error(dup.tokens.name, dup, \"no-duplicate\", message);\n }\n}\n\nfunction* validateIterable(ast) {\n const defs = groupDefinitions(ast);\n for (const def of defs.all) {\n if (def.validate) {\n yield* def.validate(defs);\n }\n }\n yield* checkDuplicatedNames(defs);\n}\n\n// Remove this once all of our support targets expose `.flat()` by default\nfunction flatten(array) {\n if (array.flat) {\n return array.flat();\n }\n return [].concat(...array);\n}\n\n/**\n * @param {*} ast AST or array of ASTs\n */\nexport function validate(ast) {\n return [...validateIterable(flatten(ast))];\n}\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nvar defaults = createCommonjsModule(function (module) {\nfunction getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nfunction changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n}\n\nmodule.exports = {\n defaults: getDefaults(),\n getDefaults,\n changeDefaults\n};\n});\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n// Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n// /c*$/ is vulnerable to REDOS.\n// invert: Remove suffix of non-c chars instead. Default falsey.\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nvar helpers = {\n escape,\n unescape,\n edit,\n cleanUrl,\n resolveUrl,\n noopTest,\n merge,\n splitCells,\n rtrim,\n findClosingBracket,\n checkSanitizeDeprecation,\n repeatString\n};\n\nconst { defaults: defaults$1 } = defaults;\nconst {\n rtrim: rtrim$1,\n splitCells: splitCells$1,\n escape: escape$1,\n findClosingBracket: findClosingBracket$1\n} = helpers;\n\nfunction outputLink(cap, link, raw) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw,\n href,\n title,\n text\n };\n } else {\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text)\n };\n }\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nvar Tokenizer_1 = class Tokenizer {\n constructor(options) {\n this.options = options || defaults$1;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n return { raw: '\\n' };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim$1(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim$1(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n }\n\n nptable(src) {\n const cap = this.rules.block.nptable.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *> ?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n text\n };\n }\n }\n\n list(src) {\n const cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw = cap[0];\n const bull = cap[2];\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n // Get each top-level item.\n const itemMatch = cap[0].match(this.rules.block.item);\n\n let next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked,\n endMatch;\n\n let l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n for (let i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item;\n\n if (!this.options.pedantic) {\n // Determine if current item contains the end of the list\n endMatch = item.match(new RegExp('\\\\n\\\\s*\\\\n {0,' + (bcurr[0].length - 1) + '}\\\\S'));\n if (endMatch) {\n addBack = item.length - endMatch.index + itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n\n item = item.substring(0, endMatch.index);\n raw = item;\n l = i + 1;\n }\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n if (\n !this.options.pedantic\n ? bnext[1].length >= bcurr[0].length || bnext[1].length > 3\n : bnext[1].length > bcurr[1].length\n ) {\n // nested list or continuation\n itemMatch.splice(i, 2, itemMatch[i] + (!this.options.pedantic && bnext[1].length < bcurr[0].length && !itemMatch[i].match(/\\n$/) ? '' : '\\n') + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else if (\n // different bullet style\n !this.options.pedantic || this.options.smartLists\n ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1]\n : isordered === (bnext[2].length === 1)\n ) {\n addBack = itemMatch.slice(i + 1).join('\\n').length;\n list.raw = list.raw.substring(0, list.raw.length - addBack);\n i = l - 1;\n }\n bcurr = bnext;\n }\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // trim item newlines at end\n item = rtrim$1(item, '\\n');\n if (i !== l - 1) {\n raw = raw + '\\n';\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(raw);\n if (i !== l - 1) {\n next = raw.slice(-2) === '\\n\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n return {\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0]\n };\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(\n item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''),\n item.header.length);\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1])\n };\n }\n }\n\n tag(src, inLink, inRawBlock) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink,\n inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape$1(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket$1(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0]);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape$1(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, inRawBlock, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape$1(cap[0])) : cap[0];\n } else {\n text = escape$1(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n};\n\nconst {\n noopTest: noopTest$1,\n edit: edit$1,\n merge: merge$1\n} = helpers;\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit$1(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\nblock.item = edit$1(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.listItemStart = edit$1(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit$1(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit$1(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit$1(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit$1(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge$1({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)', // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.nptable = edit$1(block.gfm.nptable)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.table = edit$1(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge$1({}, block.normal, {\n html: edit$1(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1, // fences not supported\n paragraph: edit$1(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit$1(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit$1(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit$1(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit$1(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit$1(inline.reflink)\n .replace('label', inline._label)\n .getRegex();\n\ninline.reflinkSearch = edit$1(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge$1({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n});\n\ninline.gfm.url = edit$1(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n});\n\nvar rules = {\n block,\n inline\n};\n\nconst { defaults: defaults$2 } = defaults;\nconst { block: block$1, inline: inline$1 } = rules;\nconst { repeatString: repeatString$1 } = helpers;\n\n/**\n * smartypants text replacement\n */\nfunction smartypants(text) {\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n */\nfunction mangle(text) {\n let out = '',\n i,\n ch;\n\n const l = text.length;\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nvar Lexer_1 = class Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n\n const rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ');\n\n this.blockTokens(src, this.tokens, true);\n\n this.inline(this.tokens);\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = [], top = true) {\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n let token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.type) {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // table no leading pipe (gfm)\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n\n inline(tokens) {\n let i,\n j,\n k,\n l2,\n row,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading': {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n case 'table': {\n token.tokens = {\n header: [],\n cells: []\n };\n\n // header\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n }\n\n // cells\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n case 'blockquote': {\n this.inline(token.tokens);\n break;\n }\n case 'list': {\n l2 = token.items.length;\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n break;\n }\n }\n }\n\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = [], inLink = false, inRawBlock = false) {\n let token, lastToken;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n const lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n const lastToken = tokens[tokens.length - 1];\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n};\n\nconst { defaults: defaults$3 } = defaults;\nconst {\n cleanUrl: cleanUrl$1,\n escape: escape$2\n} = helpers;\n\n/**\n * Renderer\n */\nvar Renderer_1 = class Renderer {\n constructor(options) {\n this.options = options || defaults$3;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape$2(lang, true)\n + '\">'\n + (escaped ? code : escape$2(code, true))\n + '</code></pre>\\n';\n }\n\n blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n }\n\n html(html) {\n return html;\n }\n\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + slugger.slug(raw)\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n }\n // ignore IDs\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n }\n\n hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n\n listitem(text) {\n return '<li>' + text + '</li>\\n';\n }\n\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\"'\n + (this.options.xhtml ? ' /' : '')\n + '> ';\n }\n\n paragraph(text) {\n return '<p>' + text + '</p>\\n';\n }\n\n table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n\n tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? '<' + type + ' align=\"' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n }\n\n // span level renderer\n strong(text) {\n return '<strong>' + text + '</strong>';\n }\n\n em(text) {\n return '<em>' + text + '</em>';\n }\n\n codespan(text) {\n return '<code>' + text + '</code>';\n }\n\n br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n\n del(text) {\n return '<del>' + text + '</del>';\n }\n\n link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '<a href=\"' + escape$2(href) + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n\n image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nvar TextRenderer_1 = class TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n};\n\n/**\n * Slugger generates header id\n */\nvar Slugger_1 = class Slugger {\n constructor() {\n this.seen = {};\n }\n\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n};\n\nconst { defaults: defaults$4 } = defaults;\nconst {\n unescape: unescape$1\n} = helpers;\n\n/**\n * Parsing & Compiling\n */\nvar Parser_1 = class Parser {\n constructor(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape$1(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.tokens.header[j]),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.cells.length;\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k]),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n};\n\nconst {\n merge: merge$2,\n checkSanitizeDeprecation: checkSanitizeDeprecation$1,\n escape: escape$3\n} = helpers;\nconst {\n getDefaults,\n changeDefaults,\n defaults: defaults$5\n} = defaults;\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n const tokens = Lexer_1.lex(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parse(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults$5;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(extension) {\n const opts = merge$2({}, extension);\n if (extension.renderer) {\n const renderer = marked.defaults.renderer || new Renderer_1();\n for (const prop in extension.renderer) {\n const prevRenderer = renderer[prop];\n renderer[prop] = (...args) => {\n let ret = extension.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (extension.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n for (const prop in extension.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n tokenizer[prop] = (...args) => {\n let ret = extension.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n if (extension.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = (token) => {\n extension.walkTokens(token);\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n marked.setOptions(opts);\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n for (const token of tokens) {\n callback(token);\n switch (token.type) {\n case 'table': {\n for (const cell of token.tokens.header) {\n marked.walkTokens(cell, callback);\n }\n for (const row of token.tokens.cells) {\n for (const cell of row) {\n marked.walkTokens(cell, callback);\n }\n }\n break;\n }\n case 'list': {\n marked.walkTokens(token.items, callback);\n break;\n }\n default: {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n};\n\n/**\n * Parse Inline\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n const tokens = Lexer_1.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>'\n + escape$3(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser_1;\nmarked.parser = Parser_1.parse;\n\nmarked.Renderer = Renderer_1;\nmarked.TextRenderer = TextRenderer_1;\n\nmarked.Lexer = Lexer_1;\nmarked.lexer = Lexer_1.lex;\n\nmarked.Tokenizer = Tokenizer_1;\n\nmarked.Slugger = Slugger_1;\n\nmarked.parse = marked;\n\nvar marked_1 = marked;\n\nexport default marked_1;\n","var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn) {\n var module = { exports: {} };\n\treturn fn(module, module.exports), module.exports;\n}\n\nfunction commonjsRequire (target) {\n\tthrow new Error('Could not dynamically require \"' + target + '\". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');\n}\n\n/* global define */\n\nvar pluralize = createCommonjsModule(function (module, exports) {\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof commonjsRequire === 'function' && 'object' === 'object' && 'object' === 'object') {\n // Node.\n module.exports = pluralize();\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(commonjsGlobal, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n});\n\nexport default pluralize;\n","/*! (c) Andrea Giammarchi (ISC) */var hyperHTML=function(N){\"use strict\";var t={};try{t.WeakMap=WeakMap}catch(e){t.WeakMap=function(t,e){var n=e.defineProperty,r=e.hasOwnProperty,i=a.prototype;return i.delete=function(e){return this.has(e)&&delete e[this._]},i.get=function(e){return this.has(e)?e[this._]:void 0},i.has=function(e){return r.call(e,this._)},i.set=function(e,t){return n(e,this._,{configurable:!0,value:t}),this},a;function a(e){n(this,\"_\",{value:\"_@ungap/weakmap\"+t++}),e&&e.forEach(o,this)}function o(e){this.set(e[0],e[1])}}(Math.random(),Object)}var s=t.WeakMap,i={};try{i.WeakSet=WeakSet}catch(e){!function(e,t){var n=r.prototype;function r(){t(this,\"_\",{value:\"_@ungap/weakmap\"+e++})}n.add=function(e){return this.has(e)||t(e,this._,{value:!0,configurable:!0}),this},n.has=function(e){return this.hasOwnProperty.call(e,this._)},n.delete=function(e){return this.has(e)&&delete e[this._]},i.WeakSet=r}(Math.random(),Object.defineProperty)}function m(e,t,n,r,i,a){for(var o=(\"selectedIndex\"in t),u=o;r<i;){var c,l=e(n[r],1);t.insertBefore(l,a),o&&u&&l.selected&&(u=!u,c=t.selectedIndex,t.selectedIndex=c<0?r:f.call(t.querySelectorAll(\"option\"),l)),r++}}function y(e,t){return e==t}function b(e){return e}function w(e,t,n,r,i,a,o){var u=a-i;if(u<1)return-1;for(;u<=n-t;){for(var c=t,l=i;c<n&&l<a&&o(e[c],r[l]);)c++,l++;if(l===a)return t;t=c+1}return-1}function x(e,t,n,r,i){return n<r?e(t[n],0):0<n?e(t[n-1],-0).nextSibling:i}function E(e,t,n,r){for(;n<r;)a(e(t[n++],-1))}function C(e,t,n,r,i,a,o,u,c,l,s,f,h){!function(e,t,n,r,i,a,o,u,c){for(var l=[],s=e.length,f=o,h=0;h<s;)switch(e[h++]){case 0:i++,f++;break;case 1:l.push(r[i]),m(t,n,r,i++,i,f<u?t(a[f],0):c);break;case-1:f++}for(h=0;h<s;)switch(e[h++]){case 0:o++;break;case-1:-1<l.indexOf(a[o])?o++:E(t,a,o++,o)}}(function(e,t,n,r,i,a,o){var u,c,l,s,f,h,d=n+a,v=[];e:for(m=0;m<=d;m++){if(50<m)return null;for(h=m-1,s=m?v[m-1]:[0,0],f=v[m]=[],u=-m;u<=m;u+=2){for(c=(l=u===-m||u!==m&&s[h+u-1]<s[h+u+1]?s[h+u+1]:s[h+u-1]+1)-u;l<a&&c<n&&o(r[i+l],e[t+c]);)l++,c++;if(l===a&&c===n)break e;f[m+u]=l}}for(var p=Array(m/2+d/2),g=p.length-1,m=v.length-1;0<=m;m--){for(;0<l&&0<c&&o(r[i+l-1],e[t+c-1]);)p[g--]=0,l--,c--;if(!m)break;h=m-1,s=m?v[m-1]:[0,0],(u=l-c)===-m||u!==m&&s[h+u-1]<s[h+u+1]?(c--,p[g--]=1):(l--,p[g--]=-1)}return p}(n,r,a,o,u,l,f)||function(e,t,n,r,i,a,o,u){var c=0,l=r<u?r:u,s=Array(l++),f=Array(l);f[0]=-1;for(var h=1;h<l;h++)f[h]=o;for(var d=i.slice(a,o),v=t;v<n;v++){var p,g=d.indexOf(e[v]);-1<g&&(-1<(c=k(f,l,p=g+a))&&(f[c]=p,s[c]={newi:v,oldi:p,prev:s[c-1]}))}for(c=--l,--o;f[c]>o;)--c;l=u+r-c;var m=Array(l),y=s[c];for(--n;y;){for(var b=y.newi,w=y.oldi;b<n;)m[--l]=1,--n;for(;w<o;)m[--l]=-1,--o;m[--l]=0,--n,--o,y=y.prev}for(;t<=n;)m[--l]=1,--n;for(;a<=o;)m[--l]=-1,--o;return m}(n,r,i,a,o,u,c,l),e,t,n,r,o,u,s,h)}var e=i.WeakSet,f=[].indexOf,k=function(e,t,n){for(var r=1,i=t;r<i;){var a=(r+i)/2>>>0;n<e[a]?i=a:r=1+a}return r},a=function(e){return(e.remove||function(){var e=this.parentNode;e&&e.removeChild(this)}).call(e)};function l(e,t,n,r){for(var i=(r=r||{}).compare||y,a=r.node||b,o=null==r.before?null:a(r.before,0),u=t.length,c=u,l=0,s=n.length,f=0;l<c&&f<s&&i(t[l],n[f]);)l++,f++;for(;l<c&&f<s&&i(t[c-1],n[s-1]);)c--,s--;var h=l===c,d=f===s;if(h&&d)return n;if(h&&f<s)return m(a,e,n,f,s,x(a,t,l,u,o)),n;if(d&&l<c)return E(a,t,l,c),n;var v=c-l,p=s-f,g=-1;if(v<p){if(-1<(g=w(n,f,s,t,l,c,i)))return m(a,e,n,f,g,a(t[l],0)),m(a,e,n,g+v,s,x(a,t,c,u,o)),n}else if(p<v&&-1<(g=w(t,l,c,n,f,s,i)))return E(a,t,l,g),E(a,t,g+p,c),n;return v<2||p<2?(m(a,e,n,f,s,a(t[l],0)),E(a,t,l,c)):v==p&&function(e,t,n,r,i,a){for(;r<i&&a(n[r],e[t-1]);)r++,t--;return 0===t}(n,s,t,l,c,i)?m(a,e,n,f,s,x(a,t,c,u,o)):C(a,e,n,f,s,p,t,l,c,v,u,i,o),n}var n,r={};function o(e,t){t=t||{};var n=N.createEvent(\"CustomEvent\");return n.initCustomEvent(e,!!t.bubbles,!!t.cancelable,t.detail),n}r.CustomEvent=\"function\"==typeof CustomEvent?CustomEvent:(o[n=\"prototype\"]=new o(\"\").constructor[n],o);var u=r.CustomEvent,c={};try{c.Map=Map}catch(e){c.Map=function(){var n=0,i=[],a=[];return{delete:function(e){var t=r(e);return t&&(i.splice(n,1),a.splice(n,1)),t},forEach:function(n,r){i.forEach(function(e,t){n.call(r,a[t],e,this)},this)},get:function(e){return r(e)?a[n]:void 0},has:r,set:function(e,t){return a[r(e)?n:i.push(e)-1]=t,this}};function r(e){return-1<(n=i.indexOf(e))}}}var h=c.Map;function d(){return this}function v(e,t){var n=\"_\"+e+\"$\";return{get:function(){return this[n]||p(this,n,t.call(this,e))},set:function(e){p(this,n,e)}}}var p=function(e,t,n){return Object.defineProperty(e,t,{configurable:!0,value:\"function\"==typeof n?function(){return e._wire$=n.apply(this,arguments)}:n})[t]};Object.defineProperties(d.prototype,{ELEMENT_NODE:{value:1},nodeType:{value:-1}});var g,A,S,O,T,M,_={},j={},L=[],P=j.hasOwnProperty,D=0,W={attributes:_,define:function(e,t){e.indexOf(\"-\")<0?(e in j||(D=L.push(e)),j[e]=t):_[e]=t},invoke:function(e,t){for(var n=0;n<D;n++){var r=L[n];if(P.call(e,r))return j[r](e[r],t)}}},$=Array.isArray||(A=(g={}.toString).call([]),function(e){return g.call(e)===A}),R=(S=N,O=\"fragment\",M=\"content\"in H(T=\"template\")?function(e){var t=H(T);return t.innerHTML=e,t.content}:function(e){var t,n=H(O),r=H(T);return F(n,/^[^\\S]*?<(col(?:group)?|t(?:head|body|foot|r|d|h))/i.test(e)?(t=RegExp.$1,r.innerHTML=\"<table>\"+e+\"</table>\",r.querySelectorAll(t)):(r.innerHTML=e,r.childNodes)),n},function(e,t){return(\"svg\"===t?function(e){var t=H(O),n=H(\"div\");return n.innerHTML='<svg xmlns=\"http://www.w3.org/2000/svg\">'+e+\"</svg>\",F(t,n.firstChild.childNodes),t}:M)(e)});function F(e,t){for(var n=t.length;n--;)e.appendChild(t[0])}function H(e){return e===O?S.createDocumentFragment():S.createElementNS(\"http://www.w3.org/1999/xhtml\",e)}var I,z,V,Z,G,q,B,J,K,Q,U=(z=\"appendChild\",V=\"cloneNode\",Z=\"createTextNode\",q=(G=\"importNode\")in(I=N),(B=I.createDocumentFragment())[z](I[Z](\"g\")),B[z](I[Z](\"\")),(q?I[G](B,!0):B[V](!0)).childNodes.length<2?function e(t,n){for(var r=t[V](),i=t.childNodes||[],a=i.length,o=0;n&&o<a;o++)r[z](e(i[o],n));return r}:q?I[G]:function(e,t){return e[V](!!t)}),X=\"\".trim||function(){return String(this).replace(/^\\s+|\\s+/g,\"\")},Y=\"-\"+Math.random().toFixed(6)+\"%\",ee=!1;try{J=N.createElement(\"template\"),Q=\"tabindex\",(K=\"content\")in J&&(J.innerHTML=\"<p \"+Q+'=\"'+Y+'\"></p>',J[K].childNodes[0].getAttribute(Q)==Y)||(Y=\"_dt: \"+Y.slice(1,-1)+\";\",ee=!0)}catch(e){}var te=\"\\x3c!--\"+Y+\"--\\x3e\",ne=8,re=1,ie=3,ae=/^(?:style|textarea)$/i,oe=/^(?:area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)$/i;var ue=\" \\\\f\\\\n\\\\r\\\\t\",ce=\"[^\"+ue+\"\\\\/>\\\"'=]+\",le=\"[\"+ue+\"]+\"+ce,se=\"<([A-Za-z]+[A-Za-z0-9:._-]*)((?:\",fe=\"(?:\\\\s*=\\\\s*(?:'[^']*?'|\\\"[^\\\"]*?\\\"|<[^>]*?>|\"+ce.replace(\"\\\\/\",\"\")+\"))?)\",he=new RegExp(se+le+fe+\"+)([\"+ue+\"]*/?>)\",\"g\"),de=new RegExp(se+le+fe+\"*)([\"+ue+\"]*/>)\",\"g\"),ve=new RegExp(\"(\"+le+\"\\\\s*=\\\\s*)(['\\\"]?)\"+te+\"\\\\2\",\"gi\");function pe(e,t,n,r){return\"<\"+t+n.replace(ve,ge)+r}function ge(e,t,n){return t+(n||'\"')+Y+(n||'\"')}function me(e,t,n){return oe.test(t)?e:\"<\"+t+n+\"></\"+t+\">\"}var ye=ee?function(e,t){var n=t.join(\" \");return t.slice.call(e,0).sort(function(e,t){return n.indexOf(e.name)<=n.indexOf(t.name)?-1:1})}:function(e,t){return t.slice.call(e,0)};function be(e,t,n,r){for(var i=e.childNodes,a=i.length,o=0;o<a;){var u=i[o];switch(u.nodeType){case re:var c=r.concat(o);!function(e,t,n,r){var i,a=e.attributes,o=[],u=[],c=ye(a,n),l=c.length,s=0;for(;s<l;){var f=c[s++],h=f.value===Y;if(h||1<(i=f.value.split(te)).length){var d=f.name;if(o.indexOf(d)<0){o.push(d);var v=n.shift().replace(h?/^(?:|[\\S\\s]*?\\s)(\\S+?)\\s*=\\s*('|\")?$/:new RegExp(\"^(?:|[\\\\S\\\\s]*?\\\\s)(\"+d+\")\\\\s*=\\\\s*('|\\\")[\\\\S\\\\s]*\",\"i\"),\"$1\"),p=a[v]||a[v.toLowerCase()];if(h)t.push(we(p,r,v,null));else{for(var g=i.length-2;g--;)n.shift();t.push(we(p,r,v,i))}}u.push(f)}}l=u.length;var m=(s=0)<l&&ee&&!(\"ownerSVGElement\"in e);for(;s<l;){var y=u[s++];m&&(y.value=\"\"),e.removeAttribute(y.name)}var b=e.nodeName;if(/^script$/i.test(b)){var w=N.createElement(b);for(l=a.length,s=0;s<l;)w.setAttributeNode(a[s++].cloneNode(!0));w.textContent=e.textContent,e.parentNode.replaceChild(w,e)}}(u,t,n,c),be(u,t,n,c);break;case ne:var l=u.textContent;if(l===Y)n.shift(),t.push(ae.test(e.nodeName)?Ne(e,r):{type:\"any\",node:u,path:r.concat(o)});else switch(l.slice(0,2)){case\"/*\":if(\"*/\"!==l.slice(-2))break;case\"👻\":e.removeChild(u),o--,a--}break;case ie:ae.test(e.nodeName)&&X.call(u.textContent)===te&&(n.shift(),t.push(Ne(e,r)))}o++}}function we(e,t,n,r){return{type:\"attr\",node:e,path:t,name:n,sparse:r}}function Ne(e,t){return{type:\"text\",node:e,path:t}}var xe,Ee=(xe=new s,{get:function(e){return xe.get(e)},set:function(e,t){return xe.set(e,t),t}});function Ce(o,f){var e=(o.convert||function(e){return e.join(te).replace(de,me).replace(he,pe)})(f),t=o.transform;t&&(e=t(e));var n=R(e,o.type);Se(n);var u=[];return be(n,u,f.slice(0),[]),{content:n,updates:function(c){for(var l=[],s=u.length,e=0,t=0;e<s;){var n=u[e++],r=function(e,t){for(var n=t.length,r=0;r<n;)e=e.childNodes[t[r++]];return e}(c,n.path);switch(n.type){case\"any\":l.push({fn:o.any(r,[]),sparse:!1});break;case\"attr\":var i=n.sparse,a=o.attribute(r,n.name,n.node);null===i?l.push({fn:a,sparse:!1}):(t+=i.length-2,l.push({fn:a,sparse:!0,values:i}));break;case\"text\":l.push({fn:o.text(r),sparse:!1}),r.textContent=\"\"}}return s+=t,function(){var e=arguments.length;if(s!==e-1)throw new Error(e-1+\" values instead of \"+s+\"\\n\"+f.join(\"${value}\"));for(var t=1,n=1;t<e;){var r=l[t-n];if(r.sparse){var i=r.values,a=i[0],o=1,u=i.length;for(n+=u-2;o<u;)a+=arguments[t++]+i[o++];r.fn(a)}else r.fn(arguments[t++])}return c}}}}var ke=[];function Ae(i){var a=ke,o=Se;return function(e){var t,n,r;return a!==e&&(t=i,n=a=e,r=Ee.get(n)||Ee.set(n,Ce(t,n)),o=r.updates(U.call(N,r.content,!0))),o.apply(null,arguments)}}function Se(e){for(var t=e.childNodes,n=t.length;n--;){var r=t[n];1!==r.nodeType&&0===X.call(r.textContent).length&&e.removeChild(r)}}var Oe,Te,Me=(Oe=/acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i,Te=/([^A-Z])([A-Z]+)/g,function(e,t){return\"ownerSVGElement\"in e?function(e,t){var n;return(n=t?t.cloneNode(!0):(e.setAttribute(\"style\",\"--hyper:style;\"),e.getAttributeNode(\"style\"))).value=\"\",e.setAttributeNode(n),je(n,!0)}(e,t):je(e.style,!1)});function _e(e,t,n){return t+\"-\"+n.toLowerCase()}function je(a,o){var u,c;return function(e){var t,n,r,i;switch(typeof e){case\"object\":if(e){if(\"object\"===u){if(!o&&c!==e)for(n in c)n in e||(a[n]=\"\")}else o?a.value=\"\":a.cssText=\"\";for(n in t=o?{}:a,e)r=\"number\"!=typeof(i=e[n])||Oe.test(n)?i:i+\"px\",!o&&/^--/.test(n)?t.setProperty(n,r):t[n]=r;u=\"object\",o?a.value=function(e){var t,n=[];for(t in e)n.push(t.replace(Te,_e),\":\",e[t],\";\");return n.join(\"\")}(c=t):c=e;break}default:c!=e&&(u=\"string\",c=e,o?a.value=e||\"\":a.cssText=e||\"\")}}}var Le,Pe,De=(Le=[].slice,(Pe=We.prototype).ELEMENT_NODE=1,Pe.nodeType=111,Pe.remove=function(e){var t,n=this.childNodes,r=this.firstChild,i=this.lastChild;return this._=null,e&&2===n.length?i.parentNode.removeChild(i):((t=this.ownerDocument.createRange()).setStartBefore(e?n[1]:r),t.setEndAfter(i),t.deleteContents()),r},Pe.valueOf=function(e){var t=this._,n=null==t;if(n&&(t=this._=this.ownerDocument.createDocumentFragment()),n||e)for(var r=this.childNodes,i=0,a=r.length;i<a;i++)t.appendChild(r[i]);return t},We);function We(e){var t=this.childNodes=Le.call(e,0);this.firstChild=t[0],this.lastChild=t[t.length-1],this.ownerDocument=t[0].ownerDocument,this._=null}function $e(e){return{html:e}}function Re(e,t){switch(e.nodeType){case Ke:return 1/t<0?t?e.remove(!0):e.lastChild:t?e.valueOf(!0):e.firstChild;case Je:return Re(e.render(),t);default:return e}}function Fe(e,t){t(e.placeholder),\"text\"in e?Promise.resolve(e.text).then(String).then(t):\"any\"in e?Promise.resolve(e.any).then(t):\"html\"in e?Promise.resolve(e.html).then($e).then(t):Promise.resolve(W.invoke(e,t)).then(t)}function He(e){return null!=e&&\"then\"in e}var Ie,ze,Ve,Ze,Ge,qe=\"ownerSVGElement\",Be=\"connected\",Je=d.prototype.nodeType,Ke=De.prototype.nodeType,Qe=(ze=(Ie={Event:u,WeakSet:e}).Event,Ve=Ie.WeakSet,Ze=!0,Ge=null,function(e){return Ze&&(Ze=!Ze,Ge=new Ve,function(t){var i=new Ve,a=new Ve;try{new MutationObserver(u).observe(t,{subtree:!0,childList:!0})}catch(e){var n=0,r=[],o=function(e){r.push(e),clearTimeout(n),n=setTimeout(function(){u(r.splice(n=0,r.length))},0)};t.addEventListener(\"DOMNodeRemoved\",function(e){o({addedNodes:[],removedNodes:[e.target]})},!0),t.addEventListener(\"DOMNodeInserted\",function(e){o({addedNodes:[e.target],removedNodes:[]})},!0)}function u(e){for(var t,n=e.length,r=0;r<n;r++)c((t=e[r]).removedNodes,\"disconnected\",a,i),c(t.addedNodes,\"connected\",i,a)}function c(e,t,n,r){for(var i,a=new ze(t),o=e.length,u=0;u<o;1===(i=e[u++]).nodeType&&function e(t,n,r,i,a){Ge.has(t)&&!i.has(t)&&(a.delete(t),i.add(t),t.dispatchEvent(n));for(var o=t.children||[],u=o.length,c=0;c<u;e(o[c++],n,r,i,a));}(i,a,t,n,r));}}(e.ownerDocument)),Ge.add(e),e}),Ue=/^(?:form|list)$/i,Xe=[].slice;function Ye(e){return this.type=e,Ae(this)}var et=!(Ye.prototype={attribute:function(n,r,e){var i,t=qe in n;if(\"style\"===r)return Me(n,e,t);if(\".\"===r.slice(0,1))return l=n,s=r.slice(1),t?function(t){try{l[s]=t}catch(e){l.setAttribute(s,t)}}:function(e){l[s]=e};if(\"?\"===r.slice(0,1))return o=n,u=r.slice(1),function(e){c!==!!e&&((c=!!e)?o.setAttribute(u,\"\"):o.removeAttribute(u))};if(/^on/.test(r)){var a=r.slice(2);return a===Be||\"disconnected\"===a?Qe(n):r.toLowerCase()in n&&(a=a.toLowerCase()),function(e){i!==e&&(i&&n.removeEventListener(a,i,!1),(i=e)&&n.addEventListener(a,e,!1))}}if(\"data\"===r||!t&&r in n&&!Ue.test(r))return function(e){i!==e&&(i=e,n[r]!==e&&null==e?(n[r]=\"\",n.removeAttribute(r)):n[r]=e)};if(r in W.attributes)return function(e){var t=W.attributes[r](n,e);i!==t&&(null==(i=t)?n.removeAttribute(r):n.setAttribute(r,t))};var o,u,c,l,s,f=!1,h=e.cloneNode(!0);return function(e){i!==e&&(i=e,h.value!==e&&(null==e?(f&&(f=!1,n.removeAttributeNode(h)),h.value=e):(h.value=e,f||(f=!0,n.setAttributeNode(h)))))}},any:function(r,i){var a,o={node:Re,before:r},u=qe in r?\"svg\":\"html\",c=!1;return function e(t){switch(typeof t){case\"string\":case\"number\":case\"boolean\":c?a!==t&&(a=t,i[0].textContent=t):(c=!0,a=t,i=l(r.parentNode,i,[(n=t,r.ownerDocument.createTextNode(n))],o));break;case\"function\":e(t(r));break;case\"object\":case\"undefined\":if(null==t){c=!1,i=l(r.parentNode,i,[],o);break}default:if(c=!1,$(a=t))if(0===t.length)i.length&&(i=l(r.parentNode,i,[],o));else switch(typeof t[0]){case\"string\":case\"number\":case\"boolean\":e({html:t});break;case\"object\":if($(t[0])&&(t=t.concat.apply([],t)),He(t[0])){Promise.all(t).then(e);break}default:i=l(r.parentNode,i,t,o)}else\"ELEMENT_NODE\"in t?i=l(r.parentNode,i,11===t.nodeType?Xe.call(t.childNodes):[t],o):He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?i=l(r.parentNode,i,Xe.call(R([].concat(t.html).join(\"\"),u).childNodes),o):\"length\"in t?e(Xe.call(t)):e(W.invoke(t,e))}var n}},text:function(r){var i;return function e(t){var n;i!==t&&(\"object\"==(n=typeof(i=t))&&t?He(t)?t.then(e):\"placeholder\"in t?Fe(t,e):\"text\"in t?e(String(t.text)):\"any\"in t?e(t.any):\"html\"in t?e([].concat(t.html).join(\"\")):\"length\"in t?e(Xe.call(t).join(\"\")):e(W.invoke(t,e)):\"function\"==n?e(t(r)):r.textContent=null==t?\"\":t)}}}),tt=function(e){var t,r,i,a,n=(t=(N.defaultView.navigator||{}).userAgent,/(Firefox|Safari)\\/(\\d+)/.test(t)&&!/(Chrom[eium]+|Android)\\/(\\d+)/.test(t)),o=!(\"raw\"in e)||e.propertyIsEnumerable(\"raw\")||!Object.isFrozen(e.raw);return n||o?(r={},i=function(e){for(var t=\".\",n=0;n<e.length;n++)t+=e[n].length+\".\"+e[n];return r[t]||(r[t]=e)},tt=o?i:(a=new s,function(e){return a.get(e)||(n=i(t=e),a.set(t,n),n);var t,n})):et=!0,nt(e)};function nt(e){return et?e:tt(e)}function rt(e){for(var t=arguments.length,n=[nt(e)],r=1;r<t;)n.push(arguments[r++]);return n}var it=new s,at=function(t){var n,r,i;return function(){var e=rt.apply(null,arguments);return i!==e[0]?(i=e[0],r=new Ye(t),n=ut(r.apply(r,e))):r.apply(r,e),n}},ot=function(e,t){var n=t.indexOf(\":\"),r=it.get(e),i=t;return-1<n&&(i=t.slice(n+1),t=t.slice(0,n)||\"html\"),r||it.set(e,r={}),r[i]||(r[i]=at(t))},ut=function(e){var t=e.childNodes,n=t.length;return 1===n?t[0]:n?new De(t):e},ct=new s;function lt(){var e=ct.get(this),t=rt.apply(null,arguments);return e&&e.template===t[0]?e.tagger.apply(null,t):function(e){var t=new Ye(qe in this?\"svg\":\"html\");ct.set(this,{tagger:t,template:e}),this.textContent=\"\",this.appendChild(t.apply(null,arguments))}.apply(this,t),this}var st,ft,ht,dt,vt=W.define,pt=Ye.prototype;function gt(e){return arguments.length<2?null==e?at(\"html\"):\"string\"==typeof e?gt.wire(null,e):\"raw\"in e?at(\"html\")(e):\"nodeType\"in e?gt.bind(e):ot(e,\"html\"):(\"raw\"in e?at(\"html\"):gt.wire).apply(null,arguments)}return gt.Component=d,gt.bind=function(e){return lt.bind(e)},gt.define=vt,gt.diff=l,(gt.hyper=gt).observe=Qe,gt.tagger=pt,gt.wire=function(e,t){return null==e?at(t||\"html\"):ot(e,t||\"html\")},gt._={WeakMap:s,WeakSet:e},st=at,ft=new s,ht=Object.create,dt=function(e,t){var n={w:null,p:null};return t.set(e,n),n},Object.defineProperties(d,{for:{configurable:!0,value:function(e,t){return function(e,t,n,r){var i,a,o,u=t.get(e)||dt(e,t);switch(typeof r){case\"object\":case\"function\":var c=u.w||(u.w=new s);return c.get(r)||(i=c,a=r,o=new e(n),i.set(a,o),o);default:var l=u.p||(u.p=ht(null));return l[r]||(l[r]=new e(n))}}(this,ft.get(e)||(n=e,r=new h,ft.set(n,r),r),e,null==t?\"default\":t);var n,r}}}),Object.defineProperties(d.prototype,{handleEvent:{value:function(e){var t=e.currentTarget;this[\"getAttribute\"in t&&t.getAttribute(\"data-call\")||\"on\"+e.type](e)}},html:v(\"html\",st),svg:v(\"svg\",st),state:v(\"state\",function(){return this.defaultState}),defaultState:{get:function(){return{}}},dispatch:{value:function(e,t){var n=this._wire$;if(n){var r=new u(e,{bubbles:!0,cancelable:!0,detail:t});return r.component=this,(n.dispatchEvent?n:n.firstChild).dispatchEvent(r)}return!1}},setState:{value:function(e,t){var n=this.state,r=\"function\"==typeof e?e.call(this,n):e;for(var i in r)n[i]=r[i];return!1!==t&&this.render(),this}}}),gt}(document);\nexport default hyperHTML;\nexport const {Component, bind, define, diff, hyper, wire} = hyperHTML;\n","// @ts-check\n// Temporary workaround until browsers get real import-maps\n\nimport * as _idb from \"../../node_modules/idb/build/esm/index.js\";\nimport * as _webidl2 from \"../../node_modules/webidl2/index.js\";\nimport _marked from \"../../node_modules/marked/lib/marked.esm.js\";\nimport _pluralize from \"../../js/deps/builds/pluralize.js\";\nimport hyperHTML from \"../../node_modules/hyperhtml/esm.js\";\n\n/** @type {import(\"idb\")} */\n// @ts-ignore\nexport const idb = _idb;\nexport const webidl2 = _webidl2;\n/** @type {import(\"hyperhtml\").default} */\n// @ts-ignore\nexport const html = hyperHTML;\n/** @type {import(\"marked\")} */\n// @ts-ignore\nexport const marked = _marked;\n/** @type {import(\"pluralize\")} */\n// @ts-ignore\nexport const pluralize = _pluralize;\n","// @ts-check\n// Module core/utils\n// As the name implies, this contains a ragtag gang of methods that just don't fit\n// anywhere else.\nimport { lang as docLang } from \"./l10n.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\nexport const name = \"core/utils\";\n\nconst dashes = /-/g;\n/**\n * Hashes a string from char code. Can return a negative number.\n * Based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0\n *\n * @param {String} text\n */\nfunction hashString(text) {\n let hash = 0;\n for (const char of text) {\n hash = (Math.imul(31, hash) + char.charCodeAt(0)) | 0;\n }\n return String(hash);\n}\n\nconst localizationStrings = {\n en: {\n x_and_y: \" and \",\n x_y_and_z: \", and \",\n },\n de: {\n x_and_y: \" und \",\n x_y_and_z: \" und \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport const ISODate = new Intl.DateTimeFormat([\"en-ca-iso8601\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n});\n\n// CSS selector for matching elements that are non-normative\nexport const nonNormativeSelector =\n \".informative, .note, .issue, .example, .ednote, .practice, .introductory\";\n\n/**\n * Creates a link element that represents a resource hint.\n *\n * @param {ResourceHintOption} opts Configure the resource hint.\n * @return {HTMLLinkElement} A link element ready to use.\n */\nexport function createResourceHint(opts) {\n const url = new URL(opts.href, document.baseURI);\n const linkElem = document.createElement(\"link\");\n let { href } = url;\n linkElem.rel = opts.hint;\n switch (linkElem.rel) {\n case \"dns-prefetch\":\n case \"preconnect\":\n href = url.origin;\n if (opts.corsMode || url.origin !== document.location.origin) {\n linkElem.crossOrigin = opts.corsMode || \"anonymous\";\n }\n break;\n case \"preload\":\n if (\"as\" in opts) {\n linkElem.setAttribute(\"as\", opts.as);\n }\n break;\n }\n linkElem.href = href;\n if (!opts.dontRemove) {\n linkElem.classList.add(\"removeOnSave\");\n }\n return linkElem;\n}\n\n// RESPEC STUFF\nexport function removeReSpec(doc) {\n doc.querySelectorAll(\".remove, script[data-requiremodule]\").forEach(elem => {\n elem.remove();\n });\n}\n\n/**\n * Adds error class to each element while emitting a warning\n * @param {HTMLElement} elem\n * @param {String} msg message to show in warning\n * @param {String=} title error message to add on each element\n */\nfunction markAsOffending(elem, msg, title) {\n elem.classList.add(\"respec-offending-element\");\n if (!elem.hasAttribute(\"title\")) {\n elem.setAttribute(\"title\", title || msg);\n }\n if (!elem.id) {\n addId(elem, \"respec-offender\");\n }\n}\n\n// STRING HELPERS\n// Takes an array and returns a string that separates each of its items with the proper commas and\n// \"and\". The second argument is a mapping function that can convert the items before they are\n// joined\nexport function joinAnd(array = [], mapper = item => item, lang = docLang) {\n const items = array.map(mapper);\n if (Intl.ListFormat && typeof Intl.ListFormat === \"function\") {\n const formatter = new Intl.ListFormat(lang, {\n style: \"long\",\n type: \"conjunction\",\n });\n return formatter.format(items);\n }\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items.toString();\n case 2: // x and y\n return items.join(l10n.x_and_y);\n default: {\n // x, y, and z\n const str = items.join(\", \");\n const lastComma = str.lastIndexOf(\",\");\n const and = l10n.x_y_and_z;\n return `${str.substr(0, lastComma)}${and}${str.slice(lastComma + 2)}`;\n }\n }\n}\n\n// Takes a string, applies some XML escapes, and returns the escaped string.\n// Note that overall using either Handlebars' escaped output or jQuery is much\n// preferred to operating on strings directly.\nexport function xmlEscape(s) {\n return s\n .replace(/&/g, \"&\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/</g, \"<\");\n}\n\n/**\n * Trims string at both ends and replaces all other white space with a single space\n * @param {string} str\n */\nexport function norm(str) {\n return str.trim().replace(/\\s+/g, \" \");\n}\n\n/**\n * @param {string} lang\n */\nfunction resolveLanguageAlias(lang) {\n const aliases = {\n \"zh-hans\": \"zh\",\n \"zh-cn\": \"zh\",\n };\n return aliases[lang] || lang;\n}\n\n/**\n * @template {Record<string, Record<string, string|Function>>} T\n * @param {T} localizationStrings\n * @returns {T[keyof T]}\n */\nexport function getIntlData(localizationStrings, lang = docLang) {\n lang = resolveLanguageAlias(lang.toLowerCase());\n // Proxy return type is a known bug:\n // https://github.com/Microsoft/TypeScript/issues/20846\n // @ts-ignore\n return new Proxy(localizationStrings, {\n /** @param {string} key */\n get(data, key) {\n const result = (data[lang] && data[lang][key]) || data.en[key];\n if (!result) {\n throw new Error(`No l10n data for key: \"${key}\"`);\n }\n return result;\n },\n });\n}\n\n// --- DATE HELPERS -------------------------------------------------------------------------------\n// Takes a Date object and an optional separator and returns the year,month,day representation with\n// the custom separator (defaulting to none) and proper 0-padding\nexport function concatDate(date, sep = \"\") {\n return ISODate.format(date).replace(dashes, sep);\n}\n\n// formats a date to \"yyyy-mm-dd\"\nexport function toShortIsoDate(date) {\n return ISODate.format(date);\n}\n\n// given either a Date object or a date in YYYY-MM-DD format,\n// return a human-formatted date suitable for use in a W3C specification\nexport function humanDate(\n date = new Date(),\n lang = document.documentElement.lang || \"en\"\n) {\n if (!(date instanceof Date)) date = new Date(date);\n const langs = [lang, \"en\"];\n const day = date.toLocaleString(langs, {\n day: \"2-digit\",\n timeZone: \"UTC\",\n });\n const month = date.toLocaleString(langs, {\n month: \"long\",\n timeZone: \"UTC\",\n });\n const year = date.toLocaleString(langs, {\n year: \"numeric\",\n timeZone: \"UTC\",\n });\n // date month year\n return `${day} ${month} ${year}`;\n}\n// given either a Date object or a date in YYYY-MM-DD format,\n// return an ISO formatted date suitable for use in a xsd:datetime item\nexport function isoDate(date) {\n return (date instanceof Date ? date : new Date(date)).toISOString();\n}\n\n// Given an object, it converts it to a key value pair separated by\n// (\"=\", configurable) and a delimiter (\" ,\" configurable).\n// for example, {\"foo\": \"bar\", \"baz\": 1} becomes \"foo=bar, baz=1\"\nexport function toKeyValuePairs(obj, delimiter = \", \", separator = \"=\") {\n return Array.from(Object.entries(obj))\n .map(([key, value]) => `${key}${separator}${JSON.stringify(value)}`)\n .join(delimiter);\n}\n\n// STYLE HELPERS\n// take a document and either a link or an array of links to CSS and appends\n// a <link/> element to the head pointing to each\nexport function linkCSS(doc, styles) {\n const stylesArray = [].concat(styles);\n const frag = stylesArray\n .map(url => {\n const link = doc.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = url;\n return link;\n })\n .reduce((elem, nextLink) => {\n elem.appendChild(nextLink);\n return elem;\n }, doc.createDocumentFragment());\n doc.head.appendChild(frag);\n}\n\n// TRANSFORMATIONS\n// Run list of transforms over content and return result.\n// Please note that this is a legacy method that is only kept in order\n// to maintain compatibility\n// with RSv1. It is therefore not tested and not actively supported.\n/**\n * @this {any}\n * @param {string} content\n * @param {string} [flist]\n */\nexport function runTransforms(content, flist, ...funcArgs) {\n const args = [this, content, ...funcArgs];\n if (flist) {\n const methods = flist.split(/\\s+/);\n for (const meth of methods) {\n /** @type {any} */\n const method = window[meth];\n if (method) {\n // the initial call passed |this| directly, so we keep it that way\n try {\n content = method.apply(this, args);\n } catch (e) {\n const msg = `call to \\`${meth}()\\` failed with: ${e}.`;\n const hint = \"See developer console for stack trace.\";\n showWarning(msg, \"utils/runTransforms\", { hint });\n console.error(e);\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Cached request handler\n * @param {RequestInfo} input\n * @param {number} maxAge cache expiration duration in ms. defaults to 24 hours (86400000 ms)\n * @return {Promise<Response>}\n * if a cached response is available and it's not stale, return it\n * else: request from network, cache and return fresh response.\n * If network fails, return a stale cached version if exists (else throw)\n */\nexport async function fetchAndCache(input, maxAge = 86400000) {\n const request = new Request(input);\n const url = new URL(request.url);\n\n // use data from cache data if valid and render\n let cache;\n let cachedResponse;\n if (\"caches\" in window) {\n try {\n cache = await caches.open(url.origin);\n cachedResponse = await cache.match(request);\n if (\n cachedResponse &&\n new Date(cachedResponse.headers.get(\"Expires\")) > new Date()\n ) {\n return cachedResponse;\n }\n } catch (err) {\n console.error(\"Failed to use Cache API.\", err);\n }\n }\n\n // otherwise fetch new data and cache\n const response = await fetch(request);\n if (!response.ok) {\n if (cachedResponse) {\n // return stale version\n console.warn(`Returning a stale cached response for ${url}`);\n return cachedResponse;\n }\n }\n\n // cache response\n if (cache && response.ok) {\n const clonedResponse = response.clone();\n const customHeaders = new Headers(response.headers);\n const expiryDate = new Date(Date.now() + maxAge);\n customHeaders.set(\"Expires\", expiryDate.toISOString());\n const cacheResponse = new Response(await clonedResponse.blob(), {\n headers: customHeaders,\n });\n // put in cache, and forget it (there is no recovery if it throws, but that's ok).\n await cache.put(request, cacheResponse).catch(console.error);\n }\n return response;\n}\n\n// --- DOM HELPERS -------------------------------\n\nexport function htmlJoinComma(array, mapper = item => item) {\n const items = array.map(mapper);\n const joined = items.slice(0, -1).map(item => html`${item}, `);\n return html`${joined}${items[items.length - 1]}`;\n}\n\n/**\n * Separates each item with proper commas and \"and\".\n * @param {string[]} array\n * @param {(str: any) => object} mapper\n */\nexport function htmlJoinAnd(array, mapper = item => item) {\n const items = array.map(mapper);\n switch (items.length) {\n case 0:\n case 1: // \"x\"\n return items[0];\n case 2: // x and y\n return html`${items[0]}${l10n.x_and_y}${items[1]}`;\n default: {\n const joined = htmlJoinComma(items.slice(0, -1));\n return html`${joined}${l10n.x_y_and_z}${items[items.length - 1]}`;\n }\n }\n}\n\n/**\n * Creates and sets an ID to an element (elem) by hashing the text content.\n *\n * @param {HTMLElement} elem element to hash from\n * @param {String} prefix prefix to prepend to the generated id\n */\nexport function addHashId(elem, prefix = \"\") {\n const text = norm(elem.textContent);\n const hash = hashString(text);\n return addId(elem, prefix, hash);\n}\n\n/**\n * Creates and sets an ID to an element (elem)\n * using a specific prefix if provided, and a specific text if given.\n * @param {HTMLElement} elem element\n * @param {String} pfx prefix\n * @param {String} txt text\n * @param {Boolean} noLC do not convert to lowercase\n * @returns {String} generated (or existing) id for element\n */\nexport function addId(elem, pfx = \"\", txt = \"\", noLC = false) {\n if (elem.id) {\n return elem.id;\n }\n if (!txt) {\n txt = (elem.title ? elem.title : elem.textContent).trim();\n }\n let id = noLC ? txt : txt.toLowerCase();\n id = id\n .trim()\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .replace(/\\W+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n\n if (!id) {\n id = \"generatedID\";\n } else if (/\\.$/.test(id) || !/^[a-z]/i.test(pfx || id)) {\n id = `x${id}`; // trailing . doesn't play well with jQuery\n }\n if (pfx) {\n id = `${pfx}-${id}`;\n }\n if (elem.ownerDocument.getElementById(id)) {\n let i = 0;\n let nextId = `${id}-${i}`;\n while (elem.ownerDocument.getElementById(nextId)) {\n i += 1;\n nextId = `${id}-${i}`;\n }\n id = nextId;\n }\n elem.id = id;\n return id;\n}\n\n/**\n * Returns all the descendant text nodes of an element.\n * @param {Node} el\n * @param {string[]} exclusions node localName to exclude\n * @param {object} options\n * @param {boolean} options.wsNodes if nodes that only have whitespace are returned.\n * @returns {Text[]}\n */\nexport function getTextNodes(el, exclusions = [], options = { wsNodes: true }) {\n const exclusionQuery = exclusions.join(\", \");\n const acceptNode = (/** @type {Text} */ node) => {\n if (!options.wsNodes && !node.data.trim()) {\n return NodeFilter.FILTER_REJECT;\n }\n if (exclusionQuery && node.parentElement.closest(exclusionQuery)) {\n return NodeFilter.FILTER_REJECT;\n }\n return NodeFilter.FILTER_ACCEPT;\n };\n const nodeIterator = document.createNodeIterator(\n el,\n NodeFilter.SHOW_TEXT,\n acceptNode\n );\n /** @type {Text[]} */\n const textNodes = [];\n let node;\n while ((node = nodeIterator.nextNode())) {\n textNodes.push(/** @type {Text} */ (node));\n }\n return textNodes;\n}\n\n/**\n * For any element, returns an array of title strings that applies\n * the algorithm used for determining the actual title of a\n * <dfn> element (but can apply to other as well).\n * if args.isDefinition is true, then the element is a definition, not a\n * reference to a definition. Any @title will be replaced with\n * @data-lt to be consistent with Bikeshed / Shepherd.\n * This method now *prefers* the data-lt attribute for the list of\n * titles. That attribute is added by this method to dfn elements, so\n * subsequent calls to this method will return the data-lt based list.\n * @param {HTMLElement} elem\n * @returns {String[]} array of title strings\n */\nexport function getDfnTitles(elem) {\n const titleSet = new Set();\n // data-lt-noDefault avoid using the text content of a definition\n // in the definition list.\n // ltNodefault is === \"data-lt-noDefault\"... someone screwed up 😖\n const normText = \"ltNodefault\" in elem.dataset ? \"\" : norm(elem.textContent);\n const child = /** @type {HTMLElement | undefined} */ (elem.children[0]);\n if (elem.dataset.lt) {\n // prefer @data-lt for the list of title aliases\n elem.dataset.lt\n .split(\"|\")\n .map(item => norm(item))\n .forEach(item => titleSet.add(item));\n } else if (\n elem.childNodes.length === 1 &&\n elem.getElementsByTagName(\"abbr\").length === 1 &&\n child.title\n ) {\n titleSet.add(child.title);\n } else if (elem.textContent === '\"\"') {\n titleSet.add(\"the-empty-string\");\n }\n\n titleSet.add(normText);\n titleSet.delete(\"\");\n\n // We could have done this with @data-lt (as the logic is same), but if\n // @data-lt was not present, we would end up using @data-local-lt as element's\n // id (in other words, we prefer textContent over @data-local-lt for dfn id)\n if (elem.dataset.localLt) {\n const localLt = elem.dataset.localLt.split(\"|\");\n localLt.forEach(item => titleSet.add(norm(item)));\n }\n\n const titles = [...titleSet];\n return titles;\n}\n\n/**\n * For an element (usually <a>), returns an array of targets that\n * element might refer to, of the form\n * @typedef {object} LinkTarget\n * @property {string} for\n * @property {string} title\n *\n * For an element like:\n * <p data-link-for=\"Int1\"><a data-link-for=\"Int2\">Int3.member</a></p>\n * we'll return:\n * * {for: \"int2\", title: \"int3.member\"}\n * * {for: \"int3\", title: \"member\"}\n * * {for: \"\", title: \"int3.member\"}\n * @param {HTMLElement} elem\n * @returns {LinkTarget[]}\n */\nexport function getLinkTargets(elem) {\n /** @type {HTMLElement} */\n const linkForElem = elem.closest(\"[data-link-for]\");\n const linkFor = linkForElem ? linkForElem.dataset.linkFor : \"\";\n const titles = getDfnTitles(elem);\n const results = titles.reduce((result, title) => {\n // supports legacy <dfn>Foo.Bar()</dfn> definitions\n const split = title.split(\".\");\n if (split.length === 2) {\n // If there are multiple '.'s, this won't match an\n // Interface/member pair anyway.\n result.push({ for: split[0], title: split[1] });\n }\n result.push({ for: linkFor, title });\n if (!linkForElem) result.push({ for: title, title });\n\n // Finally, we can try to match without link for\n if (linkFor !== \"\") result.push({ for: \"\", title });\n return result;\n }, []);\n return results;\n}\n\n/**\n * Changes name of a DOM Element\n * @param {Element} elem element to rename\n * @param {String} newName new element name\n * @returns {Element} new renamed element\n */\nexport function renameElement(elem, newName) {\n if (elem.localName === newName) return elem;\n const newElement = elem.ownerDocument.createElement(newName);\n // copy attributes\n for (const { name, value } of elem.attributes) {\n newElement.setAttribute(name, value);\n }\n // copy child nodes\n newElement.append(...elem.childNodes);\n elem.replaceWith(newElement);\n return newElement;\n}\n\nexport function refTypeFromContext(ref, element) {\n const closestInformative = element.closest(nonNormativeSelector);\n let isInformative = false;\n if (closestInformative) {\n // check if parent is not normative\n isInformative =\n !element.closest(\".normative\") ||\n !closestInformative.querySelector(\".normative\");\n }\n // prefixes `!` and `?` override section behavior\n if (ref.startsWith(\"!\")) {\n if (isInformative) {\n // A (forced) normative reference in informative section is illegal\n return { type: \"informative\", illegal: true };\n }\n isInformative = false;\n } else if (ref.startsWith(\"?\")) {\n isInformative = true;\n }\n const type = isInformative ? \"informative\" : \"normative\";\n return { type, illegal: false };\n}\n\n/**\n * Wraps inner contents with the wrapper node\n * @param {Node} outer outer node to be modified\n * @param {Element} wrapper wrapper node to be appended\n */\nexport function wrapInner(outer, wrapper) {\n wrapper.append(...outer.childNodes);\n outer.appendChild(wrapper);\n return outer;\n}\n\n/**\n * Applies the selector for all its ancestors.\n * @param {Element} element\n * @param {string} selector\n */\nexport function parents(element, selector) {\n /** @type {Element[]} */\n const list = [];\n let parent = element.parentElement;\n while (parent) {\n const closest = parent.closest(selector);\n if (!closest) {\n break;\n }\n list.push(closest);\n parent = closest.parentElement;\n }\n return list;\n}\n\n/**\n * Calculates indentation when the element starts after a newline.\n * The value will be empty if no newline or any non-whitespace exists after one.\n * @param {Element} element\n *\n * @example ` <div></div>` returns \" \" (4 spaces).\n */\nexport function getElementIndentation(element) {\n const { previousSibling } = element;\n if (!previousSibling || previousSibling.nodeType !== Node.TEXT_NODE) {\n return \"\";\n }\n const index = previousSibling.textContent.lastIndexOf(\"\\n\");\n if (index === -1) {\n return \"\";\n }\n const slice = previousSibling.textContent.slice(index + 1);\n if (/\\S/.test(slice)) {\n return \"\";\n }\n return slice;\n}\n\n/**\n * Generates simple ids. The id's increment after it yields.\n *\n * @param {String} namespace A string like \"highlight\".\n * @param {number} counter A number, which can start at a given value.\n */\nexport function msgIdGenerator(namespace, counter = 0) {\n function* idGenerator(namespace, counter) {\n while (true) {\n yield `${namespace}:${counter}`;\n counter++;\n }\n }\n const gen = idGenerator(namespace, counter);\n return () => {\n return gen.next().value;\n };\n}\n\nexport class InsensitiveStringSet extends Set {\n /**\n * @param {Array<String>} [keys] Optional, initial keys\n */\n constructor(keys = []) {\n super();\n for (const key of keys) {\n this.add(key);\n }\n }\n /**\n * @param {string} key\n */\n add(key) {\n if (!this.has(key) && !this.getCanonicalKey(key)) {\n return super.add(key);\n }\n return this;\n }\n /**\n * @param {string} key\n */\n has(key) {\n return (\n super.has(key) ||\n [...this.keys()].some(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n )\n );\n }\n /**\n * @param {string} key\n */\n delete(key) {\n return super.has(key)\n ? super.delete(key)\n : super.delete(this.getCanonicalKey(key));\n }\n /**\n * @param {string} key\n */\n getCanonicalKey(key) {\n return super.has(key)\n ? key\n : [...this.keys()].find(\n existingKey => existingKey.toLowerCase() === key.toLowerCase()\n );\n }\n}\n\nexport function makeSafeCopy(node) {\n const clone = node.cloneNode(true);\n clone.querySelectorAll(\"[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n clone.querySelectorAll(\"dfn\").forEach(dfn => renameElement(dfn, \"span\"));\n if (clone.hasAttribute(\"id\")) clone.removeAttribute(\"id\");\n removeCommentNodes(clone);\n return clone;\n}\n\nexport function removeCommentNodes(node) {\n const walker = document.createTreeWalker(node, NodeFilter.SHOW_COMMENT);\n for (const comment of [...walkTree(walker)]) {\n comment.remove();\n }\n}\n\n/**\n * @template {Node} T\n * @param {TreeWalker<T>} walker\n * @return {IterableIterator<T>}\n */\nfunction* walkTree(walker) {\n while (walker.nextNode()) {\n yield /** @type {T} */ (walker.currentNode);\n }\n}\n\n/**\n * @template ValueType\n * @extends {Map<string, ValueType>}\n */\nexport class CaseInsensitiveMap extends Map {\n /**\n * @param {Array<[string, ValueType]>} [entries]\n */\n constructor(entries = []) {\n super();\n entries.forEach(([key, elem]) => {\n this.set(key, elem);\n });\n return this;\n }\n /**\n * @param {String} key\n * @param {ValueType} value\n */\n set(key, value) {\n super.set(key.toLowerCase(), value);\n return this;\n }\n /**\n * @param {String} key\n */\n get(key) {\n return super.get(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n has(key) {\n return super.has(key.toLowerCase());\n }\n /**\n * @param {String} key\n */\n delete(key) {\n return super.delete(key.toLowerCase());\n }\n}\n\nexport class RespecError extends Error {\n /**\n * @param {Parameters<typeof showError>[0]} message\n * @param {Parameters<typeof showError>[1]} plugin\n * @param {Parameters<typeof showError>[2] & { isWarning: boolean }} options\n */\n constructor(message, plugin, options) {\n super(message);\n const name = options.isWarning ? \"ReSpecWarning\" : \"ReSpecError\";\n Object.assign(this, { message, plugin, name, ...options });\n if (options.elements) {\n options.elements.forEach(elem =>\n markAsOffending(elem, message, options.title)\n );\n }\n }\n\n toJSON() {\n const { message, name, stack } = this;\n // @ts-expect-error https://github.com/microsoft/TypeScript/issues/26792\n const { plugin, hint, elements, title, details } = this;\n return { message, name, plugin, hint, elements, title, details, stack };\n }\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showError(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: false };\n pub(\"error\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * @param {string} message\n * @param {string} pluginName Name of plugin that caused the error.\n * @param {object} [options]\n * @param {string} [options.hint] How to solve the error?\n * @param {HTMLElement[]} [options.elements] Offending elements.\n * @param {string} [options.title] Title attribute for offending elements. Can be a shorter form of the message.\n * @param {string} [options.details] Any further details/context.\n */\nexport function showWarning(message, pluginName, options = {}) {\n const opts = { ...options, isWarning: true };\n pub(\"warn\", new RespecError(message, pluginName, opts));\n}\n\n/**\n * Creates a quick markdown link to a property in the docs.\n *\n * @param {string} prop ReSpec configuration property to link to in docs.\n */\nexport function docLink(prop) {\n return `[\\`${prop}\\`](https://respec.org/docs/#${prop})`;\n}\n","// @ts-check\nimport { expose } from \"./expose-modules.js\";\nimport { showError } from \"./utils.js\";\n\n/**\n * Module core/pubsubhub\n *\n * Returns a singleton that can be used for message broadcasting\n * and message receiving. Replaces legacy \"msg\" code in ReSpec.\n */\nexport const name = \"core/pubsubhub\";\n\nconst subscriptions = new Map();\n\nexport function pub(topic, ...data) {\n if (!subscriptions.has(topic)) {\n return; // Nothing to do...\n }\n Array.from(subscriptions.get(topic)).forEach(cb => {\n try {\n cb(...data);\n } catch (err) {\n const msg = `Error when calling function ${cb.name}.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n if (window.parent === window.self) {\n return;\n }\n // If this is an iframe, postMessage parent (used in testing).\n const args = data\n // to structured clonable\n .map(arg => String(JSON.stringify(arg.stack || arg)));\n window.parent.postMessage({ topic, args }, window.parent.location.origin);\n}\n/**\n * Subscribes to a message type.\n *\n * @param {string} topic The topic to subscribe to (e.g., \"start-all\")\n * @param {Function} cb Callback function\n * @param {Object} [opts]\n * @param {Boolean} [opts.once] Add prop \"once\" for single notification.\n * @return {Object} An object that should be considered opaque,\n * used for unsubscribing from messages.\n */\nexport function sub(topic, cb, opts = { once: false }) {\n if (opts.once) {\n return sub(topic, function wrapper(...args) {\n unsub({ topic, cb: wrapper });\n cb(...args);\n });\n }\n if (subscriptions.has(topic)) {\n subscriptions.get(topic).add(cb);\n } else {\n subscriptions.set(topic, new Set([cb]));\n }\n return { topic, cb };\n}\n/**\n * Unsubscribe from messages.\n *\n * @param {Object} opaque The object that was returned from calling sub()\n */\nexport function unsub({ topic, cb }) {\n // opaque is whatever is returned by sub()\n const callbacks = subscriptions.get(topic);\n if (!callbacks || !callbacks.has(cb)) {\n console.warn(\"Already unsubscribed:\", topic, cb);\n return false;\n }\n return callbacks.delete(cb);\n}\n\nexpose(name, { sub });\n","// @ts-check\n// Module core/include-config\n// Inject's the document's configuration into the head as JSON.\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/include-config\";\n\nconst removeList = [\"githubToken\", \"githubUser\"];\n\nexport function run(config) {\n const userConfig = {};\n const amendConfig = newValues => Object.assign(userConfig, newValues);\n\n amendConfig(config);\n sub(\"amend-user-config\", amendConfig);\n\n sub(\"end-all\", () => {\n const script = document.createElement(\"script\");\n script.id = \"initialUserConfig\";\n script.type = \"application/json\";\n for (const prop of removeList) {\n if (prop in userConfig) delete userConfig[prop];\n }\n script.innerHTML = JSON.stringify(userConfig, null, 2);\n document.head.appendChild(script);\n });\n}\n","// @ts-check\n/**\n * module: core/exporter\n * Exports a ReSpec document, based on mime type, so it can be saved, etc.\n * Also performs cleanup, removing things that shouldn't be in published documents.\n * That is, elements that have a \"removeOnSave\" css class.\n */\n\nimport { removeCommentNodes, removeReSpec } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst mimeTypes = new Map([\n [\"text/html\", \"html\"],\n [\"application/xml\", \"xml\"],\n]);\n\n/**\n * Creates a dataURI from a ReSpec document. It also cleans up the document\n * removing various things.\n *\n * @param {String} mimeType mimetype. one of `mimeTypes` above\n * @param {Document} doc document to export. useful for testing purposes\n * @returns a stringified data-uri of document that can be saved.\n */\nexport function rsDocToDataURL(mimeType, doc = document) {\n const format = mimeTypes.get(mimeType);\n if (!format) {\n const validTypes = [...mimeTypes.values()].join(\", \");\n const msg = `Invalid format: ${mimeType}. Expected one of: ${validTypes}.`;\n throw new TypeError(msg);\n }\n const data = serialize(format, doc);\n const encodedString = encodeURIComponent(data);\n return `data:${mimeType};charset=utf-8,${encodedString}`;\n}\n\nexport function serialize(format, doc) {\n const cloneDoc = doc.cloneNode(true);\n cleanup(cloneDoc);\n let result = \"\";\n switch (format) {\n case \"xml\":\n result = new XMLSerializer().serializeToString(cloneDoc);\n break;\n default: {\n prettify(cloneDoc);\n if (cloneDoc.doctype) {\n result += new XMLSerializer().serializeToString(cloneDoc.doctype);\n }\n result += cloneDoc.documentElement.outerHTML;\n }\n }\n return result;\n}\n\nfunction cleanup(cloneDoc) {\n const { head, body, documentElement } = cloneDoc;\n removeCommentNodes(cloneDoc);\n\n cloneDoc\n .querySelectorAll(\".removeOnSave, #toc-nav\")\n .forEach(elem => elem.remove());\n body.classList.remove(\"toc-sidebar\");\n removeReSpec(documentElement);\n\n const insertions = cloneDoc.createDocumentFragment();\n\n // Move meta viewport, as it controls the rendering on mobile.\n const metaViewport = cloneDoc.querySelector(\"meta[name='viewport']\");\n if (metaViewport && head.firstChild !== metaViewport) {\n insertions.appendChild(metaViewport);\n }\n\n // Move charset to near top, as it needs to be in the first 512 bytes.\n let metaCharset = cloneDoc.querySelector(\n \"meta[charset], meta[content*='charset=']\"\n );\n if (!metaCharset) {\n metaCharset = html`<meta charset=\"utf-8\" />`;\n }\n insertions.appendChild(metaCharset);\n\n // Add meta generator\n const respecVersion = `ReSpec ${window.respecVersion || \"Developer Channel\"}`;\n const metaGenerator = html`\n <meta name=\"generator\" content=\"${respecVersion}\" />\n `;\n\n insertions.appendChild(metaGenerator);\n head.prepend(insertions);\n pub(\"beforesave\", documentElement);\n}\n\n/** @param {Document} cloneDoc */\nfunction prettify(cloneDoc) {\n cloneDoc.querySelectorAll(\"style\").forEach(el => {\n el.innerHTML = `\\n${el.innerHTML}\\n`;\n });\n cloneDoc.querySelectorAll(\"head > *\").forEach(el => {\n el.outerHTML = `\\n${el.outerHTML}`;\n });\n}\n\nexpose(\"core/exporter\", { rsDocToDataURL });\n","// @ts-check\n/**\n * This module adds a `respec` object to the `document` with the following\n * readonly properties:\n * - version: returns version of ReSpec Script.\n * - ready: returns a promise that settles when ReSpec finishes processing.\n *\n * This module also adds the legacy `document.respecIsReady` property for\n * backward compatibility. It is now an alias to `document.respec.ready`.\n */\nimport { serialize } from \"../core/exporter.js\";\nimport { showWarning } from \"../core/utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/respec-global\";\n\nclass ReSpec {\n constructor() {\n /** @type {Promise<void>} */\n this._respecDonePromise = new Promise(resolve => {\n sub(\"end-all\", resolve, { once: true });\n });\n\n this.errors = [];\n this.warnings = [];\n\n sub(\"error\", rsError => {\n console.error(rsError, rsError.toJSON());\n this.errors.push(rsError);\n });\n sub(\"warn\", rsError => {\n console.warn(rsError, rsError.toJSON());\n this.warnings.push(rsError);\n });\n }\n\n get version() {\n return window.respecVersion;\n }\n\n get ready() {\n return this._respecDonePromise;\n }\n\n async toHTML() {\n return serialize(\"html\", document);\n }\n}\n\nexport function init() {\n const respec = new ReSpec();\n Object.defineProperty(document, \"respec\", { value: respec });\n\n let respecIsReadyWarningShown = false;\n Object.defineProperty(document, \"respecIsReady\", {\n get() {\n if (!respecIsReadyWarningShown) {\n const msg =\n \"`document.respecIsReady` is deprecated and will be removed in a future release.\";\n const hint = \"Use `document.respec.ready` instead.\";\n showWarning(msg, name, { hint });\n respecIsReadyWarningShown = true;\n }\n return document.respec.ready;\n },\n });\n}\n","// @ts-check\n/**\n * Module core/post-process\n *\n * Corresponds to respecConfig.postProcess and config.afterEnd.\n * - postProcess: an array of functions that get called\n * after processing finishes. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile.\n * - afterEnd: final thing that is called.\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/post-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.postProcess)) {\n const promises = config.postProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `postProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`postProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n if (typeof config.afterEnd === \"function\") {\n await config.afterEnd(config, document);\n }\n}\n","// @ts-check\n/**\n * Module core/pre-process\n *\n * Corresponds to respecConfig.preProcess.\n * - preProcess: an array of functions that get called\n * before anything else happens. This is not recommended and the feature is not\n * tested. Use with care, if you know what you're doing. Chances are you really\n * want to be using a new module with your own profile\n */\nimport { showError } from \"./utils.js\";\n\nexport const name = \"core/pre-process\";\n\nexport async function run(config) {\n if (Array.isArray(config.preProcess)) {\n const promises = config.preProcess\n .filter(f => {\n const isFunction = typeof f === \"function\";\n if (!isFunction) {\n const msg = \"Every item in `preProcess` must be a JS function.\";\n showError(msg, name);\n }\n return isFunction;\n })\n .map(async f => {\n try {\n return await f(config, document);\n } catch (err) {\n const msg = `Function ${f.name} threw an error during \\`preProcess\\`.`;\n const hint = \"See developer console.\";\n showError(msg, name, { hint });\n console.error(err);\n }\n });\n await Promise.all(promises);\n }\n}\n","// @ts-check\n// Module core/base-runner\n// The module in charge of running the whole processing pipeline.\nimport { run as includeConfig } from \"./include-config.js\";\nimport { init as initReSpecGlobal } from \"./respec-global.js\";\nimport { run as overrideConfig } from \"./override-configuration.js\";\nimport { run as postProcess } from \"./post-process.js\";\nimport { run as preProcess } from \"./pre-process.js\";\nimport { pub } from \"./pubsubhub.js\";\nimport { removeReSpec } from \"./utils.js\";\n\nexport const name = \"core/base-runner\";\n\nexport async function runAll(plugs) {\n initReSpecGlobal();\n\n pub(\"start-all\", respecConfig);\n includeConfig(respecConfig);\n overrideConfig(respecConfig);\n performance.mark(`${name}-start`);\n await preProcess(respecConfig);\n\n const runnables = plugs.filter(p => isRunnableModule(p));\n runnables.forEach(\n plug => !plug.name && console.warn(\"Plugin lacks name:\", plug)\n );\n respecConfig.state = {};\n await executePreparePass(runnables, respecConfig);\n await executeRunPass(runnables, respecConfig);\n respecConfig.state = {};\n pub(\"plugins-done\", respecConfig);\n\n await postProcess(respecConfig);\n pub(\"end-all\");\n removeReSpec(document);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n}\n\nfunction isRunnableModule(plug) {\n return plug && (plug.run || plug.Plugin);\n}\n\nasync function executePreparePass(runnables, config) {\n for (const plug of runnables.filter(p => p.prepare)) {\n try {\n await plug.prepare(config);\n } catch (err) {\n console.error(err);\n }\n }\n}\n\nasync function executeRunPass(runnables, config) {\n for (const plug of runnables) {\n const name = plug.name || \"\";\n\n try {\n // eslint-disable-next-line no-async-promise-executor\n await new Promise(async (resolve, reject) => {\n const timerId = setTimeout(() => {\n const msg = `Plugin ${name} took too long.`;\n console.error(msg, plug);\n reject(new Error(msg));\n }, 15000);\n\n performance.mark(`${name}-start`);\n try {\n if (plug.Plugin) {\n await new plug.Plugin(config).run();\n resolve();\n } else if (plug.run) {\n await plug.run(config);\n resolve();\n }\n } catch (err) {\n reject(err);\n } finally {\n clearTimeout(timerId);\n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n","// @ts-check\n// Module core/override-configuration\n// A helper module that makes it possible to override settings specified in respecConfig\n// by passing them as a query string. This is useful when you just want to make a few\n// tweaks to a document before generating the snapshot, without mucking with the source.\n// For example, you can change the status and date by appending:\n// ?specStatus=LC&publishDate=2012-03-15\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/override-configuration\";\n\nexport function run(config) {\n const params = new URLSearchParams(document.location.search);\n const overrideEntries = Array.from(params)\n .filter(([key, value]) => !!key && !!value)\n .map(([codedKey, codedValue]) => {\n const key = decodeURIComponent(codedKey);\n const decodedValue = decodeURIComponent(codedValue.replace(/%3D/g, \"=\"));\n let value;\n try {\n value = JSON.parse(decodedValue);\n } catch {\n value = decodedValue;\n }\n return [key, value];\n });\n const overrideProps = Object.fromEntries(overrideEntries);\n Object.assign(config, overrideProps);\n pub(\"amend-user-config\", overrideProps);\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.respec-modal .close-button {\n position: absolute;\n z-index: inherit;\n padding: 0.2em;\n font-weight: bold;\n cursor: pointer;\n margin-left: 5px;\n border: none;\n background: transparent;\n}\n\n#respec-ui {\n position: fixed;\n display: flex;\n flex-direction: row-reverse;\n top: 20px;\n right: 20px;\n width: 202px;\n text-align: right;\n z-index: 9000;\n}\n\n#respec-pill,\n.respec-info-button {\n background: #fff;\n height: 2.5em;\n color: rgb(120, 120, 120);\n border: 1px solid #ccc;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n}\n\n.respec-info-button {\n border: none;\n opacity: 0.75;\n border-radius: 2em;\n margin-right: 1em;\n min-width: 3.5em;\n}\n\n.respec-info-button:focus,\n.respec-info-button:hover {\n opacity: 1;\n transition: opacity 0.2s;\n}\n\n#respec-pill:disabled {\n font-size: 2.8px;\n text-indent: -9999em;\n border-top: 1.1em solid rgba(40, 40, 40, 0.2);\n border-right: 1.1em solid rgba(40, 40, 40, 0.2);\n border-bottom: 1.1em solid rgba(40, 40, 40, 0.2);\n border-left: 1.1em solid #ffffff;\n transform: translateZ(0);\n animation: respec-spin 0.5s infinite linear;\n box-shadow: none;\n}\n\n#respec-pill:disabled,\n#respec-pill:disabled:after {\n border-radius: 50%;\n width: 10em;\n height: 10em;\n}\n\n@keyframes respec-spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.respec-hidden {\n visibility: hidden;\n opacity: 0;\n transition: visibility 0s 0.2s, opacity 0.2s linear;\n}\n\n.respec-visible {\n visibility: visible;\n opacity: 1;\n transition: opacity 0.2s linear;\n}\n\n#respec-pill:hover,\n#respec-pill:focus {\n color: rgb(0, 0, 0);\n background-color: rgb(245, 245, 245);\n transition: color 0.2s;\n}\n\n#respec-menu {\n position: absolute;\n margin: 0;\n padding: 0;\n font-family: sans-serif;\n background: #fff;\n box-shadow: 1px 1px 8px 0 rgba(100, 100, 100, 0.5);\n width: 200px;\n display: none;\n text-align: left;\n margin-top: 32px;\n font-size: 0.8em;\n}\n\n#respec-menu:not([hidden]) {\n display: block;\n}\n\n#respec-menu li {\n list-style-type: none;\n margin: 0;\n padding: 0;\n}\n\n.respec-save-buttons {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(47%, 2fr));\n grid-gap: 0.5cm;\n padding: 0.5cm;\n}\n\n.respec-save-button:link {\n padding-top: 16px;\n color: rgb(240, 240, 240);\n background: rgb(42, 90, 168);\n justify-self: stretch;\n height: 1cm;\n text-decoration: none;\n text-align: center;\n font-size: inherit;\n border: none;\n border-radius: 0.2cm;\n}\n\n.respec-save-button:link:hover {\n color: white;\n background: rgb(42, 90, 168);\n padding: 0;\n margin: 0;\n border: 0;\n padding-top: 16px;\n}\n\n.respec-save-button:link:focus {\n background: #193766;\n}\n\n#respec-ui button:focus,\n#respec-pill:focus,\n.respec-option:focus {\n outline: 0;\n outline-style: none;\n}\n\n#respec-pill-error {\n background-color: red;\n color: white;\n}\n\n#respec-pill-warning {\n background-color: orange;\n color: white;\n}\n\n.respec-warning-list,\n.respec-error-list {\n margin: 0;\n padding: 0;\n list-style: none;\n font-family: sans-serif;\n background-color: rgb(255, 251, 230);\n font-size: 0.85em;\n}\n\n.respec-warning-list > li,\n.respec-error-list > li {\n padding: 0.4em 0.7em;\n}\n\n.respec-warning-list > li::before {\n content: \"⚠️\";\n padding-right: 0.5em;\n}\n.respec-warning-list p,\n.respec-error-list p {\n padding: 0;\n margin: 0;\n}\n\n.respec-warning-list li {\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 245, 194);\n}\n\n.respec-error-list,\n.respec-error-list li {\n background-color: rgb(255, 240, 240);\n}\n\n.respec-error-list li::before {\n content: \"💥\";\n padding-right: 0.5em;\n}\n\n.respec-error-list li {\n padding: 0.4em 0.7em;\n color: rgb(92, 59, 0);\n border-bottom: thin solid rgb(255, 215, 215);\n}\n\n.respec-error-list li > p {\n margin: 0;\n padding: 0;\n display: inline-block;\n}\n\n.respec-error-list li > p:first-child,\n.respec-warning-list li > p:first-child {\n display: inline;\n}\n\n.respec-warning-list > li li,\n.respec-error-list > li li {\n margin: 0;\n list-style: disc;\n}\n\n#respec-overlay {\n display: block;\n position: fixed;\n z-index: 10000;\n top: 0px;\n left: 0px;\n height: 100%;\n width: 100%;\n background: #000;\n}\n\n.respec-show-overlay {\n transition: opacity 0.2s linear;\n opacity: 0.5;\n}\n\n.respec-hide-overlay {\n transition: opacity 0.2s linear;\n opacity: 0;\n}\n\n.respec-modal {\n display: block;\n position: fixed;\n z-index: 11000;\n margin: auto;\n top: 10%;\n background: #fff;\n border: 5px solid #666;\n min-width: 20%;\n width: 79%;\n padding: 0;\n max-height: 80%;\n overflow-y: auto;\n margin: 0 -0.5cm;\n}\n\n@media screen and (min-width: 78em) {\n .respec-modal {\n width: 62%;\n }\n}\n\n.respec-modal h3 {\n margin: 0;\n padding: 0.2em;\n text-align: center;\n color: black;\n background: linear-gradient(\n to bottom,\n rgba(238, 238, 238, 1) 0%,\n rgba(238, 238, 238, 1) 50%,\n rgba(204, 204, 204, 1) 100%\n );\n font-size: 1em;\n}\n\n.respec-modal .inside div p {\n padding-left: 1cm;\n}\n\n#respec-menu button.respec-option {\n background: white;\n padding: 0 0.2cm;\n border: none;\n width: 100%;\n text-align: left;\n font-size: inherit;\n padding: 1.2em 1.2em;\n}\n\n#respec-menu button.respec-option:hover,\n#respec-menu button:focus {\n background-color: #eeeeee;\n}\n\n.respec-cmd-icon {\n padding-right: 0.5em;\n}\n\n#respec-ui button.respec-option:last-child {\n border: none;\n border-radius: inherit;\n}\n\n.respec-button-copy-paste {\n position: absolute;\n height: 28px;\n width: 40px;\n cursor: pointer;\n background-image: linear-gradient(#fcfcfc, #eee);\n border: 1px solid rgb(144, 184, 222);\n border-left: 0;\n border-radius: 0px 0px 3px 0;\n -webkit-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n top: 0;\n left: 127px;\n}\n\n@media print {\n #respec-ui {\n display: none;\n }\n}\n\n.respec-iframe {\n width: 100%;\n min-height: 550px;\n height: 100%;\n overflow: hidden;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n.respec-iframe:not(.ready) {\n background: url(\"https://respec.org/xref/loader.gif\") no-repeat center;\n}\n\n.respec-iframe + a[href] {\n font-size: 0.9rem;\n float: right;\n margin: 0 0.5em 0.5em;\n border-bottom-width: 1px;\n}\n`;\n","// @ts-check\n/**\n * Module core/reindent\n *\n * Removes common indents across the IDL texts,\n * so that indentation inside <pre> won't affect the rendered result.\n */\n\nexport const name = \"core/reindent\";\n\n/**\n * @param {string} text\n */\nexport function reindent(text) {\n if (!text) {\n return text;\n }\n const lines = text.trimEnd().split(\"\\n\");\n while (lines.length && !lines[0].trim()) {\n lines.shift();\n }\n const indents = lines.filter(s => s.trim()).map(s => s.search(/[^\\s]/));\n const leastIndent = Math.min(...indents);\n return lines.map(s => s.slice(leastIndent)).join(\"\\n\");\n}\n\nexport function run() {\n for (const pre of document.getElementsByTagName(\"pre\")) {\n pre.innerHTML = reindent(pre.innerHTML);\n }\n}\n","// @ts-check\n/**\n * Module core/markdown\n * Handles the optional markdown processing.\n *\n * Markdown support is optional. It is enabled by setting the `format`\n * property of the configuration object to \"markdown.\"\n *\n * We use marked for parsing Markdown:\n * https://github.com/chjj/marked\n *\n * Note that the content of SECTION elements, and elements with a\n * class name of \"note\", \"issue\" or \"req\" are also parsed.\n *\n * The HTML created by the Markdown parser is turned into a nested\n * structure of SECTION elements, following the structure given by\n * the headings. For example, the following markup:\n *\n * Title\n * -----\n *\n * ### Subtitle ###\n *\n * Here's some text.\n *\n * ### Another subtitle ###\n *\n * More text.\n *\n * will be transformed into:\n *\n * <section>\n * <h2>Title</h2>\n * <section>\n * <h3>Subtitle</h3>\n * <p>Here's some text.</p>\n * </section>\n * <section>\n * <h3>Another subtitle</h3>\n * <p>More text.</p>\n * </section>\n * </section>\n *\n * The whitespace of pre elements are left alone.\n */\n\nimport { getElementIndentation } from \"./utils.js\";\nimport { marked } from \"./import-maps.js\";\nimport { reindent } from \"./reindent.js\";\nexport const name = \"core/markdown\";\n\nconst gtEntity = />/gm;\nconst ampEntity = /&/gm;\n\nclass Renderer extends marked.Renderer {\n code(code, infoString, isEscaped) {\n const { language, ...metaData } = Renderer.parseInfoString(infoString);\n\n // regex to check whether the language is webidl\n if (/(^webidl$)/i.test(language)) {\n return `<pre class=\"idl\">${code}</pre>`;\n }\n\n const html = super.code(code, language, isEscaped);\n\n const { example, illegalExample } = metaData;\n if (!example && !illegalExample) return html;\n\n const title = example || illegalExample;\n const className = `${language} ${example ? \"example\" : \"illegal-example\"}`;\n return html.replace(\"<pre>\", `<pre title=\"${title}\" class=\"${className}\">`);\n }\n\n /**\n * @param {string} infoString\n */\n static parseInfoString(infoString) {\n const firstSpace = infoString.search(/\\s/);\n if (firstSpace === -1) {\n return { language: infoString };\n }\n\n const language = infoString.slice(0, firstSpace);\n const metaDataStr = infoString.slice(firstSpace + 1);\n let metaData;\n if (metaDataStr) {\n try {\n metaData = JSON.parse(`{ ${metaDataStr} }`);\n } catch (error) {\n console.error(error);\n }\n }\n\n return { language, ...metaData };\n }\n\n heading(text, level, raw, slugger) {\n const headingWithIdRegex = /(.+)\\s+{#([\\w-]+)}$/;\n if (headingWithIdRegex.test(text)) {\n const [, textContent, id] = text.match(headingWithIdRegex);\n return `<h${level} id=\"${id}\">${textContent}</h${level}>`;\n }\n return super.heading(text, level, raw, slugger);\n }\n}\n\n/**\n * @param {string} text\n */\nexport function markdownToHtml(text) {\n const normalizedLeftPad = reindent(text);\n // As markdown is pulled from HTML, > and & are already escaped and\n // so blockquotes aren't picked up by the parser. This fixes it.\n const potentialMarkdown = normalizedLeftPad\n .replace(gtEntity, \">\")\n .replace(ampEntity, \"&\");\n // @ts-ignore\n const result = marked(potentialMarkdown, {\n sanitize: false,\n gfm: true,\n headerIds: false,\n langPrefix: \"\",\n renderer: new Renderer(),\n });\n return result;\n}\n\n/**\n * @param {string} selector\n * @return {(el: Element) => Element[]}\n */\nfunction convertElements(selector) {\n return element => {\n const elements = element.querySelectorAll(selector);\n elements.forEach(convertElement);\n return Array.from(elements);\n };\n}\n\n/**\n * @param {Element} element\n */\nfunction convertElement(element) {\n for (const pre of element.getElementsByTagName(\"pre\")) {\n // HTML parser implicitly removes a newline after <pre>\n // which breaks reindentation algorithm\n pre.prepend(\"\\n\");\n }\n element.innerHTML = markdownToHtml(element.innerHTML);\n}\n\n/**\n * CommonMark requires additional empty newlines between markdown and HTML lines.\n * This function adds them as a backward compatibility workaround.\n * @param {HTMLElement} element\n * @param {string} selector\n */\nfunction workaroundBlockLevelMarkdown(element, selector) {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = element.querySelectorAll(selector);\n for (const element of elements) {\n const { innerHTML } = element;\n if (/^<\\w/.test(innerHTML.trimStart())) {\n // if the block content starts with HTML-like format\n // then assume it doesn't need a workaround\n continue;\n }\n // Double newlines are needed to be parsed as Markdown\n const lines = innerHTML.split(\"\\n\");\n const firstTwo = lines.slice(0, 2).join(\"\\n\");\n const lastTwo = lines.slice(-2).join(\"\\n\");\n if (firstTwo.trim()) {\n element.prepend(\"\\n\\n\");\n }\n if (lastTwo.trim()) {\n // keep the indentation of the end tag\n const indentation = getElementIndentation(element);\n element.append(`\\n\\n${indentation}`);\n }\n }\n}\n\nclass Builder {\n constructor(doc) {\n this.doc = doc;\n this.root = doc.createDocumentFragment();\n this.stack = [this.root];\n this.current = this.root;\n }\n findPosition(header) {\n return parseInt(header.tagName.charAt(1), 10);\n }\n findParent(position) {\n let parent;\n while (position > 0) {\n position--;\n parent = this.stack[position];\n if (parent) return parent;\n }\n }\n findHeader({ firstChild: node }) {\n while (node) {\n if (/H[1-6]/.test(node.tagName)) {\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n addHeader(header) {\n const section = this.doc.createElement(\"section\");\n const position = this.findPosition(header);\n\n section.appendChild(header);\n this.findParent(position).appendChild(section);\n this.stack[position] = section;\n this.stack.length = position + 1;\n this.current = section;\n }\n\n addSection(node, process) {\n const header = this.findHeader(node);\n const position = header ? this.findPosition(header) : 1;\n const parent = this.findParent(position);\n\n if (header) {\n node.removeChild(header);\n }\n\n node.appendChild(process(node));\n\n if (header) {\n node.prepend(header);\n }\n\n parent.appendChild(node);\n this.current = parent;\n }\n\n addElement(node) {\n this.current.appendChild(node);\n }\n}\n\nfunction structure(fragment, doc) {\n function process(root) {\n const stack = new Builder(doc);\n while (root.firstChild) {\n const node = root.firstChild;\n if (node.nodeType !== Node.ELEMENT_NODE) {\n root.removeChild(node);\n continue;\n }\n switch (node.localName) {\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\":\n stack.addHeader(node);\n break;\n case \"section\":\n stack.addSection(node, process);\n break;\n default:\n stack.addElement(node);\n }\n }\n return stack.root;\n }\n return process(fragment);\n}\n\n/**\n * Re-structure DOM around elem whose markdown has been processed.\n * @param {Element} elem\n */\nexport function restructure(elem) {\n const structuredInternals = structure(elem, elem.ownerDocument);\n if (\n structuredInternals.firstElementChild.localName === \"section\" &&\n elem.localName === \"section\"\n ) {\n const section = structuredInternals.firstElementChild;\n section.remove();\n elem.append(...section.childNodes);\n } else {\n elem.textContent = \"\";\n }\n elem.appendChild(structuredInternals);\n}\n\n/**\n * @param {Iterable<Element>} elements\n */\nfunction substituteWithTextNodes(elements) {\n Array.from(elements).forEach(element => {\n element.replaceWith(element.textContent);\n });\n}\n\nconst processMDSections = convertElements(\"[data-format='markdown']:not(body)\");\nconst blockLevelElements =\n \"[data-format=markdown], section, div, address, article, aside, figure, header, main\";\n\nexport function run(conf) {\n const hasMDSections = !!document.querySelector(\n \"[data-format=markdown]:not(body)\"\n );\n const isMDFormat = conf.format === \"markdown\";\n if (!isMDFormat && !hasMDSections) {\n return; // Nothing to be done\n }\n // Only has markdown-format sections\n if (!isMDFormat) {\n for (const processedElem of processMDSections(document.body)) {\n restructure(processedElem);\n }\n return;\n }\n // We transplant the UI to do the markdown processing\n const rsUI = document.getElementById(\"respec-ui\");\n rsUI.remove();\n // The new body will replace the old body\n const newBody = document.body.cloneNode(true);\n // Marked expects markdown be flush against the left margin\n // so we need to normalize the inner text of some block\n // elements.\n workaroundBlockLevelMarkdown(newBody, blockLevelElements);\n convertElement(newBody);\n // Remove links where class .nolinks\n substituteWithTextNodes(newBody.querySelectorAll(\".nolinks a[href]\"));\n // Restructure the document properly\n const fragment = structure(newBody, document);\n // Frankenstein the whole thing back together\n newBody.append(rsUI, fragment);\n document.body.replaceWith(newBody);\n}\n","// @ts-check\n// Module core/ui\n// Handles the ReSpec UI\n// XXX TODO\n// - look at other UI things to add\n// - list issues\n// - lint: validator, link checker, check WebIDL, ID references\n// - save to GitHub\n// - make a release candidate that people can test\n// - once we have something decent, merge, ship as 3.2.0\nimport { html, pluralize } from \"./import-maps.js\";\nimport css from \"../styles/ui.css.js\";\nimport { joinAnd } from \"./utils.js\";\nimport { markdownToHtml } from \"./markdown.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/ui\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\ninsertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-ui-styles\";\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nfunction ariaDecorate(elem, ariaMap) {\n if (!elem) {\n return;\n }\n Array.from(ariaMap).forEach(([name, value]) => {\n elem.setAttribute(`aria-${name}`, value);\n });\n}\n\nconst respecUI = html`<div id=\"respec-ui\" class=\"removeOnSave\" hidden></div>`;\nconst menu = html`<ul\n id=\"respec-menu\"\n role=\"menu\"\n aria-labelledby=\"respec-pill\"\n hidden\n></ul>`;\nconst closeButton = html`<button\n class=\"close-button\"\n onclick=${() => ui.closeModal()}\n title=\"Close\"\n>\n ❌\n</button>`;\nwindow.addEventListener(\"load\", () => trapFocus(menu));\nlet modal;\nlet overlay;\nconst errors = [];\nconst warnings = [];\nconst buttons = {};\n\nsub(\"start-all\", () => document.body.prepend(respecUI), { once: true });\nsub(\"end-all\", () => document.body.prepend(respecUI), { once: true });\n\nconst respecPill = html`<button id=\"respec-pill\" disabled>ReSpec</button>`;\nrespecUI.appendChild(respecPill);\nrespecPill.addEventListener(\"click\", e => {\n e.stopPropagation();\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n menu.querySelector(\"li:first-child button\").focus();\n});\n\ndocument.documentElement.addEventListener(\"click\", () => {\n if (!menu.hidden) {\n toggleMenu();\n }\n});\nrespecUI.appendChild(menu);\n\nmenu.addEventListener(\"keydown\", e => {\n if (e.key === \"Escape\" && !menu.hidden) {\n respecPill.setAttribute(\"aria-expanded\", String(menu.hidden));\n toggleMenu();\n respecPill.focus();\n }\n});\n\nfunction toggleMenu() {\n menu.classList.toggle(\"respec-hidden\");\n menu.classList.toggle(\"respec-visible\");\n menu.hidden = !menu.hidden;\n}\n\n// Code adapted from https://hiddedevries.nl/en/blog/2017-01-29-using-javascript-to-trap-focus-in-an-element\nfunction trapFocus(element) {\n const focusableEls = element.querySelectorAll(\n \"a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled])\"\n );\n const firstFocusableEl = focusableEls[0];\n const lastFocusableEl = focusableEls[focusableEls.length - 1];\n if (firstFocusableEl) {\n firstFocusableEl.focus();\n }\n element.addEventListener(\"keydown\", e => {\n if (e.key !== \"Tab\") {\n return;\n }\n // shift + tab\n if (e.shiftKey) {\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focus();\n e.preventDefault();\n }\n }\n // tab\n else if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n });\n}\n\nconst ariaMap = new Map([\n [\"controls\", \"respec-menu\"],\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"label\", \"ReSpec Menu\"],\n]);\nariaDecorate(respecPill, ariaMap);\n\nfunction errWarn(err, arr, butName, title) {\n arr.push(err);\n if (!buttons.hasOwnProperty(butName)) {\n buttons[butName] = createWarnButton(butName, arr, title);\n respecUI.appendChild(buttons[butName]);\n }\n const button = buttons[butName];\n button.textContent = arr.length;\n const label = arr.length === 1 ? pluralize.singular(title) : title;\n const ariaMap = new Map([[\"label\", `${arr.length} ${label}`]]);\n ariaDecorate(button, ariaMap);\n}\n\nfunction createWarnButton(butName, arr, title) {\n const buttonId = `respec-pill-${butName}`;\n const button = html`<button\n id=\"${buttonId}\"\n class=\"respec-info-button\"\n ></button>`;\n button.addEventListener(\"click\", () => {\n button.setAttribute(\"aria-expanded\", \"true\");\n const ol = html`<ol class=\"${`respec-${butName}-list`}\"></ol>`;\n for (const err of arr) {\n const fragment = document\n .createRange()\n .createContextualFragment(rsErrorToHTML(err));\n const li = document.createElement(\"li\");\n // if it's only a single element, just copy the contents into li\n if (fragment.firstElementChild === fragment.lastElementChild) {\n li.append(...fragment.firstElementChild.childNodes);\n // Otherwise, take everything.\n } else {\n li.appendChild(fragment);\n }\n ol.appendChild(li);\n }\n ui.freshModal(title, ol, button);\n });\n const ariaMap = new Map([\n [\"expanded\", \"false\"],\n [\"haspopup\", \"true\"],\n [\"controls\", `respec-pill-${butName}-modal`],\n ]);\n ariaDecorate(button, ariaMap);\n return button;\n}\n\nexport const ui = {\n show() {\n try {\n respecUI.hidden = false;\n } catch (err) {\n console.error(err);\n }\n },\n hide() {\n respecUI.hidden = true;\n },\n enable() {\n respecPill.removeAttribute(\"disabled\");\n },\n /**\n * @param {string} _keyShort shortcut key. unused - kept for backward compatibility.\n */\n addCommand(label, handler, _keyShort, icon) {\n icon = icon || \"\";\n const id = `respec-button-${label.toLowerCase().replace(/\\s+/, \"-\")}`;\n const button = html`<button id=\"${id}\" class=\"respec-option\">\n <span class=\"respec-cmd-icon\" aria-hidden=\"true\">${icon}</span> ${label}…\n </button>`;\n const menuItem = html`<li role=\"menuitem\">${button}</li>`;\n menuItem.addEventListener(\"click\", handler);\n menu.appendChild(menuItem);\n return button;\n },\n error(rsError) {\n errWarn(rsError, errors, \"error\", \"ReSpec Errors\");\n },\n warning(rsError) {\n errWarn(rsError, warnings, \"warning\", \"ReSpec Warnings\");\n },\n closeModal(owner) {\n if (overlay) {\n overlay.classList.remove(\"respec-show-overlay\");\n overlay.classList.add(\"respec-hide-overlay\");\n overlay.addEventListener(\"transitionend\", () => {\n overlay.remove();\n overlay = null;\n });\n }\n if (owner) {\n owner.setAttribute(\"aria-expanded\", \"false\");\n }\n if (!modal) return;\n modal.remove();\n modal = null;\n respecPill.focus();\n },\n freshModal(title, content, currentOwner) {\n if (modal) modal.remove();\n if (overlay) overlay.remove();\n overlay = html`<div id=\"respec-overlay\" class=\"removeOnSave\"></div>`;\n const id = `${currentOwner.id}-modal`;\n const headingId = `${id}-heading`;\n modal = html`<div\n id=\"${id}\"\n class=\"respec-modal removeOnSave\"\n role=\"dialog\"\n aria-labelledby=\"${headingId}\"\n >\n ${closeButton}\n <h3 id=\"${headingId}\">${title}</h3>\n <div class=\"inside\">${content}</div>\n </div>`;\n const ariaMap = new Map([[\"labelledby\", headingId]]);\n ariaDecorate(modal, ariaMap);\n document.body.append(overlay, modal);\n overlay.addEventListener(\"click\", () => this.closeModal(currentOwner));\n overlay.classList.toggle(\"respec-show-overlay\");\n modal.hidden = false;\n trapFocus(modal);\n },\n};\ndocument.addEventListener(\"keydown\", ev => {\n if (ev.key === \"Escape\") {\n ui.closeModal();\n }\n});\nwindow.respecUI = ui;\nsub(\"error\", details => ui.error(details));\nsub(\"warn\", details => ui.warning(details));\n\nfunction rsErrorToHTML(err) {\n if (typeof err === \"string\") {\n return err;\n }\n\n const plugin = err.plugin ? `(${err.plugin}): ` : \"\";\n const hint = err.hint ? ` ${err.hint}` : \"\";\n const elements = Array.isArray(err.elements)\n ? ` Occurred at: ${joinAnd(err.elements.map(generateMarkdownLink))}.`\n : \"\";\n const details = err.details\n ? `\\n\\n<details>\\n${err.details}\\n</details>\\n`\n : \"\";\n\n const text = `${plugin}${err.message}${hint}${elements}${details}`;\n return markdownToHtml(text);\n}\n\n/**\n * @param {Element} element\n * @param {number} i\n */\nfunction generateMarkdownLink(element, i) {\n return `[${i + 1}](#${element.id})`;\n}\n","// @ts-check\n// Module core/location-hash\n// Resets window.location.hash to jump to the right point in the document\n\nexport const name = \"core/location-hash\";\n\nexport function run() {\n if (!location.hash) {\n return;\n }\n document.respec.ready.then(() => {\n let hash = decodeURIComponent(location.hash).substr(1);\n const hasLink = document.getElementById(hash);\n const isLegacyFrag = /\\W/.test(hash);\n // Allow some degree of recovery for legacy fragments format.\n // See https://github.com/w3c/respec/issues/1353\n if (!hasLink && isLegacyFrag) {\n const id = hash\n .replace(/[\\W]+/gim, \"-\")\n .replace(/^-+/, \"\")\n .replace(/-+$/, \"\");\n if (document.getElementById(id)) {\n hash = id;\n }\n }\n location.hash = `#${hash}`;\n });\n}\n","// @ts-check\n/**\n * @module w3c/group\n *\n * `group` is a shorthand configuration option for specifying `wg`, `wgId`,\n * `wgURI`, and `wgPatentURI` options.\n */\n\nimport {\n fetchAndCache,\n joinAnd,\n showError,\n showWarning,\n} from \"../core/utils.js\";\n\nexport const name = \"w3c/group\";\n\nconst W3C_GROUPS_API = \"https://respec.org/w3c/groups/\";\nconst LEGACY_OPTIONS = [\"wg\", \"wgURI\", \"wgId\", \"wgPatentURI\", \"wgPatentPolicy\"];\n\nexport async function run(conf) {\n const usedLegacyOptions = LEGACY_OPTIONS.filter(opt => conf[opt]);\n\n if (!conf.group) {\n if (usedLegacyOptions.length) {\n const outdatedOptionsStr = joinAnd(LEGACY_OPTIONS, s => `\\`${s}\\``);\n const msg = `Configuration options ${outdatedOptionsStr} are deprecated.`;\n const hint = `Please use the [\\`group\\`](https://respec.org/docs/#group) option instead.`;\n showWarning(msg, name, { hint });\n }\n return;\n }\n\n if (usedLegacyOptions.length) {\n const outdatedOptionsStr = joinAnd(usedLegacyOptions, s => `\\`${s}\\``);\n const msg = `Configuration options ${outdatedOptionsStr} are superseded by \\`group\\` and will be overridden by ReSpec.`;\n const hint = \"Please remove them from `respecConfig`.\";\n showWarning(msg, name, { hint });\n }\n\n const { group } = conf;\n const groupDetails = Array.isArray(group)\n ? await getMultipleGroupDetails(group)\n : await getGroupDetails(group);\n Object.assign(conf, groupDetails);\n}\n\n/** @param {string[]} groups */\nasync function getMultipleGroupDetails(groups) {\n const details = await Promise.all(groups.map(getGroupDetails));\n /** @type {{ [key in keyof GroupDetails]: GroupDetails[key][] }} */\n const result = {\n wg: [],\n wgId: [],\n wgURI: [],\n wgPatentURI: [],\n wgPatentPolicy: [],\n groupType: [],\n };\n for (const groupDetails of details.filter(o => o)) {\n for (const key of Object.keys(result)) {\n result[key].push(groupDetails[key]);\n }\n }\n return result;\n}\n\n/**\n * @param {string} group\n * @typedef {{ wgId: number, wg: string, wgURI: string, wgPatentURI: string, wgPatentPolicy: string, groupType: W3CGroupType }} GroupDetails\n * @returns {Promise<GroupDetails|undefined>}\n */\nasync function getGroupDetails(group) {\n let type = \"\";\n let shortname = group;\n if (group.includes(\"/\")) {\n [type, shortname] = group.split(\"/\", 2);\n }\n const url = new URL(`${shortname}/${type}`, W3C_GROUPS_API);\n const res = await fetchAndCache(url.href);\n if (res.ok) {\n const json = await res.json();\n const {\n id: wgId,\n name: wg,\n URI: wgURI,\n patentURI: wgPatentURI,\n patentPolicy: wgPatentPolicy,\n type: groupType,\n } = json;\n return { wg, wgId, wgURI, wgPatentURI, wgPatentPolicy, groupType };\n }\n\n const text = await res.text();\n const message = `Failed to fetch group details (HTTP: ${res.status}). ${text}`;\n const hint =\n res.status === 404\n ? \"See [supported group names](https://respec.org/w3c/groups/) to use with the \" +\n \"[`group`](https://respec.org/docs/#group) configuration option.\"\n : undefined;\n showError(message, name, { hint });\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-link\";\n\n/**\n * @param {object} link\n * @param {string} link.key\n * @param {string} [link.class]\n * @param {LinkData[]} [link.data]\n */\nexport default function showLink(link) {\n if (!link.key) {\n const msg =\n \"Found a link without `key` attribute in the configuration. See dev console.\";\n showWarning(msg, name);\n console.warn(msg, link);\n return;\n }\n return html`\n <dt class=\"${link.class ? link.class : null}\">${link.key}</dt>\n ${link.data ? link.data.map(showLinkData) : showLinkData(link)}\n `;\n}\n\n/**\n * @typedef {object} LinkData\n * @property {string} [LinkData.class]\n * @property {string} [LinkData.href]\n * @property {string} [LinkData.value]\n * @param {LinkData} data\n */\nfunction showLinkData(data) {\n return html`<dd class=\"${data.class ? data.class : null}\">\n ${data.href\n ? html`<a href=\"${data.href}\">${data.value || data.href}</a>`\n : data.value}\n </dd>`;\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { showWarning } from \"../../core/utils.js\";\n\nconst name = \"core/templates/show-logo\";\n\n/**\n * @param {object} logo\n * @param {string} logo.src\n * @param {string} logo.url\n * @param {string} logo.alt\n * @param {string} [logo.id]\n * @param {number} [logo.width]\n * @param {number} [logo.height]\n */\nexport default function showLogo(logo) {\n /** @type {HTMLAnchorElement} */\n const a = html`<a href=\"${logo.url || \"\"}\" class=\"logo\"></a>`;\n if (!logo.alt) {\n const msg = \"Found spec logo without an `alt` attribute.\";\n showWarning(msg, name, { elements: [a] });\n }\n /** @type {HTMLImageElement} */\n const img = html`<img\n id=\"${logo.id}\"\n alt=\"${logo.alt}\"\n width=\"${logo.width}\"\n height=\"${logo.height}\"\n />`;\n // avoid triggering 404 requests from dynamically generated\n // hyperHTML attribute values\n img.src = logo.src;\n a.append(img);\n return a;\n}\n","// @ts-check\nimport { humanDate, showError, toShortIsoDate } from \"../../core/utils.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst name = \"core/templates/show-people\";\n\nconst localizationStrings = {\n en: {\n until(date) {\n return html` Until ${date} `;\n },\n },\n es: {\n until(date) {\n return html` Hasta ${date} `;\n },\n },\n ko: {\n until(date) {\n return html` ${date} 이전 `;\n },\n },\n ja: {\n until(date) {\n return html` ${date} 以前 `;\n },\n },\n de: {\n until(date) {\n return html` bis ${date} `;\n },\n },\n zh: {\n until(date) {\n return html` 直到 ${date} `;\n },\n },\n};\n\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nconst orcidIcon = html`<svg\n width=\"16\"\n height=\"16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 256 256\"\n>\n <style>\n .st1 {\n fill: #fff;\n }\n </style>\n <path\n d=\"M256 128c0 70.7-57.3 128-128 128S0 198.7 0 128 57.3 0 128 0s128 57.3 128 128z\"\n fill=\"#a6ce39\"\n />\n <path\n class=\"st1\"\n d=\"M86.3 186.2H70.9V79.1h15.4v107.1zM108.9 79.1h41.6c39.6 0 57 28.3 57 53.6 0 27.5-21.5 53.6-56.8 53.6h-41.8V79.1zm15.4 93.3h24.5c34.9 0 42.9-26.5 42.9-39.7C191.7 111.2 178 93 148 93h-23.7v79.4zM88.7 56.8c0 5.5-4.5 10.1-10.1 10.1s-10.1-4.6-10.1-10.1c0-5.6 4.5-10.1 10.1-10.1s10.1 4.6 10.1 10.1z\"\n />\n</svg>`;\n\n/**\n * @typedef {object} Person\n * @property {string} [Person.name]\n * @property {string} [Person.company]\n * @property {string|number} [Person.w3cid]\n * @property {string} [Person.mailto]\n * @property {string} [Person.url]\n * @property {string} [Person.orcid]\n * @property {string} [Person.company]\n * @property {string} [Person.companyURL]\n * @property {string} [Person.note]\n * @property {string} [Person.retiredDate]\n * @property {PersonExtras} [Person.extras]\n *\n * @typedef {object} PersonExtras\n * @property {string} PersonExtras.name\n * @property {string} [PersonExtras.class]\n * @property {string} [PersonExtras.href]\n *\n * @param {Person[]} persons\n */\nexport default function showPeople(persons = []) {\n const l10n = localizationStrings[lang];\n return persons.map(getItem);\n\n function getItem(p) {\n const personName = [p.name]; // treated as opt-in HTML by hyperHTML\n const company = [p.company];\n const editorid = p.w3cid ? parseInt(p.w3cid, 10) : null;\n /** @type {HTMLElement} */\n const dd = html`<dd\n class=\"p-author h-card vcard\"\n data-editor-id=\"${editorid}\"\n ></dd>`;\n const span = document.createDocumentFragment();\n const contents = [];\n if (p.mailto) {\n contents.push(html`<a\n class=\"ed_mailto u-email email p-name\"\n href=\"${`mailto:${p.mailto}`}\"\n >${personName}</a\n >`);\n } else if (p.url) {\n contents.push(\n html`<a class=\"u-url url p-name fn\" href=\"${p.url}\">${personName}</a>`\n );\n } else {\n contents.push(html`<span class=\"p-name fn\">${personName}</span>`);\n }\n if (p.orcid) {\n contents.push(\n html`<a class=\"p-name orcid\" href=\"${p.orcid}\"\n >${orcidIcon.cloneNode(true)}\n </a>`\n );\n }\n if (p.company) {\n if (p.companyURL) {\n contents.push(\n html`\n (<a class=\"p-org org h-org h-card\" href=\"${p.companyURL}\"\n >${company}</a\n >)\n `\n );\n } else {\n contents.push(html` (${company}) `);\n }\n }\n if (p.note) contents.push(document.createTextNode(` (${p.note})`));\n if (p.extras) {\n const results = p.extras\n // Remove empty names\n .filter(extra => extra.name && extra.name.trim())\n // Convert to HTML\n .map(getExtra);\n for (const result of results) {\n contents.push(document.createTextNode(\", \"), result);\n }\n }\n if (p.retiredDate) {\n const retiredDate = new Date(p.retiredDate);\n const isValidDate = retiredDate.toString() !== \"Invalid Date\";\n const timeElem = document.createElement(\"time\");\n timeElem.textContent = isValidDate\n ? humanDate(retiredDate)\n : \"Invalid Date\"; // todo: Localise invalid date\n if (!isValidDate) {\n const msg = \"The date is invalid. The expected format is YYYY-MM-DD.\";\n const title = \"Invalid date\";\n showError(msg, name, { title, elements: [timeElem] });\n }\n timeElem.dateTime = toShortIsoDate(retiredDate);\n contents.push(html` - ${l10n.until(timeElem)} `);\n }\n\n // @ts-ignore: hyperhtml types only support Element but we use a DocumentFragment here\n html.bind(span)`${contents}`;\n dd.appendChild(span);\n return dd;\n }\n\n function getExtra(extra) {\n const span = html`<span class=\"${extra.class || null}\"></span>`;\n let textContainer = span;\n if (extra.href) {\n textContainer = html`<a href=\"${extra.href}\"></a>`;\n span.appendChild(textContainer);\n }\n textContainer.textContent = extra.name;\n return span;\n }\n}\n","// @ts-check\nimport { getIntlData, humanDate, showWarning } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nconst name = \"w3c/templates/headers\";\n\nconst ccLicense = \"https://creativecommons.org/licenses/by/4.0/legalcode\";\nconst w3cLicense = \"https://www.w3.org/Consortium/Legal/copyright-documents\";\nconst legalDisclaimer =\n \"https://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer\";\nconst w3cTrademark =\n \"https://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks\";\n\nconst localizationStrings = {\n en: {\n author: \"Author:\",\n authors: \"Authors:\",\n editor: \"Editor:\",\n editors: \"Editors:\",\n former_editor: \"Former editor:\",\n former_editors: \"Former editors:\",\n latest_editors_draft: \"Latest editor's draft:\",\n latest_published_version: \"Latest published version:\",\n edited_in_place: \"edited in place\",\n this_version: \"This version:\",\n test_suite: \"Test suite:\",\n implementation_report: \"Implementation report:\",\n prev_editor_draft: \"Previous editor's draft:\",\n prev_version: \"Previous version:\",\n prev_recommendation: \"Previous Recommendation:\",\n latest_recommendation: \"Latest Recommendation:\",\n },\n ko: {\n author: \"저자:\",\n authors: \"저자:\",\n editor: \"편집자:\",\n editors: \"편집자:\",\n former_editor: \"이전 편집자:\",\n former_editors: \"이전 편집자:\",\n latest_editors_draft: \"최신 편집 초안:\",\n latest_published_version: \"최신 버전:\",\n this_version: \"현재 버전:\",\n },\n zh: {\n author: \"作者:\",\n authors: \"作者:\",\n editor: \"编辑:\",\n editors: \"编辑:\",\n former_editor: \"原编辑:\",\n former_editors: \"原编辑:\",\n latest_editors_draft: \"最新编辑草稿:\",\n latest_published_version: \"最新发布版本:\",\n this_version: \"本版本:\",\n test_suite: \"测试套件:\",\n implementation_report: \"实现报告:\",\n prev_editor_draft: \"上一版编辑草稿:\",\n prev_version: \"上一版:\",\n prev_recommendation: \"上一版正式推荐标准:\",\n latest_recommendation: \"最新发布的正式推荐标准:\",\n },\n ja: {\n author: \"著者:\",\n authors: \"著者:\",\n editor: \"編者:\",\n editors: \"編者:\",\n former_editor: \"以前の版の編者:\",\n former_editors: \"以前の版の編者:\",\n latest_editors_draft: \"最新の編集用草案:\",\n latest_published_version: \"最新バージョン:\",\n this_version: \"このバージョン:\",\n test_suite: \"テストスイート:\",\n implementation_report: \"実装レポート:\",\n },\n nl: {\n author: \"Auteur:\",\n authors: \"Auteurs:\",\n editor: \"Redacteur:\",\n editors: \"Redacteurs:\",\n latest_editors_draft: \"Laatste werkversie:\",\n latest_published_version: \"Laatst gepubliceerde versie:\",\n this_version: \"Deze versie:\",\n },\n es: {\n author: \"Autor:\",\n authors: \"Autores:\",\n editor: \"Editor:\",\n editors: \"Editores:\",\n latest_editors_draft: \"Borrador de editor mas reciente:\",\n latest_published_version: \"Versión publicada mas reciente:\",\n this_version: \"Ésta versión:\",\n },\n de: {\n author: \"Autor/in:\",\n authors: \"Autor/innen:\",\n editor: \"Redaktion:\",\n editors: \"Redaktion:\",\n former_editor: \"Frühere Mitwirkende:\",\n former_editors: \"Frühere Mitwirkende:\",\n latest_editors_draft: \"Letzter Entwurf:\",\n latest_published_version: \"Letzte publizierte Fassung:\",\n this_version: \"Diese Fassung:\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nfunction getSpecSubTitleElem(conf) {\n let specSubTitleElem = document.querySelector(\"h2#subtitle\");\n\n if (specSubTitleElem && specSubTitleElem.parentElement) {\n specSubTitleElem.remove();\n conf.subtitle = specSubTitleElem.textContent.trim();\n } else if (conf.subtitle) {\n specSubTitleElem = document.createElement(\"h2\");\n specSubTitleElem.textContent = conf.subtitle;\n specSubTitleElem.id = \"subtitle\";\n }\n if (specSubTitleElem) {\n specSubTitleElem.classList.add(\"subtitle\");\n }\n return specSubTitleElem;\n}\n\nexport default (conf, options) => {\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${document.querySelector(\"h1#title\")}\n ${getSpecSubTitleElem(conf)}\n <h2>\n ${conf.prependW3C ? \"W3C \" : \"\"}${conf.isCR\n ? `${conf.longStatus}`\n : `${conf.textStatus}`}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >${conf.modificationDate\n ? html`, ${l10n.edited_in_place}${\" \"}\n ${inPlaceModificationDate(conf.modificationDate)}`\n : \"\"}\n </h2>\n <dl>\n ${!conf.isNoTrack\n ? html`\n <dt>${l10n.this_version}</dt>\n <dd>\n <a class=\"u-url\" href=\"${conf.thisVersion}\"\n >${conf.thisVersion}</a\n >\n </dd>\n <dt>${l10n.latest_published_version}</dt>\n <dd>\n ${conf.latestVersion\n ? html`<a href=\"${conf.latestVersion}\"\n >${conf.latestVersion}</a\n >`\n : \"none\"}\n </dd>\n `\n : \"\"}\n ${conf.edDraftURI\n ? html`\n <dt>${l10n.latest_editors_draft}</dt>\n <dd><a href=\"${conf.edDraftURI}\">${conf.edDraftURI}</a></dd>\n `\n : \"\"}\n ${conf.testSuiteURI\n ? html`\n <dt>${l10n.test_suite}</dt>\n <dd><a href=\"${conf.testSuiteURI}\">${conf.testSuiteURI}</a></dd>\n `\n : \"\"}\n ${conf.implementationReportURI\n ? html`\n <dt>${l10n.implementation_report}</dt>\n <dd>\n <a href=\"${conf.implementationReportURI}\"\n >${conf.implementationReportURI}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.isED && conf.prevED\n ? html`\n <dt>${l10n.prev_editor_draft}</dt>\n <dd><a href=\"${conf.prevED}\">${conf.prevED}</a></dd>\n `\n : \"\"}\n ${conf.showPreviousVersion\n ? html`\n <dt>${l10n.prev_version}</dt>\n <dd><a href=\"${conf.prevVersion}\">${conf.prevVersion}</a></dd>\n `\n : \"\"}\n ${!conf.prevRecURI\n ? \"\"\n : conf.isRec\n ? html`\n <dt>${l10n.prev_recommendation}</dt>\n <dd><a href=\"${conf.prevRecURI}\">${conf.prevRecURI}</a></dd>\n `\n : html`\n <dt>${l10n.latest_recommendation}</dt>\n <dd><a href=\"${conf.prevRecURI}\">${conf.prevRecURI}</a></dd>\n `}\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${conf.errata\n ? html`<p>\n Please check the\n <a href=\"${conf.errata}\"><strong>errata</strong></a> for any errors or\n issues reported since publication.\n </p>`\n : \"\"}\n ${conf.isRec\n ? html`<p>\n See also\n <a\n href=\"${`http://www.w3.org/2003/03/Translations/byTechnology?technology=${conf.shortName}`}\"\n >\n <strong>translations</strong></a\n >.\n </p>`\n : \"\"}\n ${conf.alternateFormats\n ? html`<p>\n ${options.multipleAlternates\n ? \"This document is also available in these non-normative formats:\"\n : \"This document is also available in this non-normative format:\"}\n ${options.alternatesHTML}\n </p>`\n : \"\"}\n ${renderCopyright(conf)}\n <hr title=\"Separator for header\" />\n </div>`;\n};\n\n/**\n * @param {string} date document in-place edit date as YYYY-MM-DD\n * @returns {HTMLTimeElement}\n */\nfunction inPlaceModificationDate(date) {\n const modificationHumanDate = humanDate(new Date(date));\n return html`<time class=\"dt-modified\" datetime=\"${date}\"\n >${modificationHumanDate}</time\n >`;\n}\n\n/**\n * @param {string} text\n * @param {string} url\n * @param {string=} cssClass\n */\nfunction linkLicense(text, url, cssClass) {\n return html`<a rel=\"license\" href=\"${url}\" class=\"${cssClass}\">${text}</a>`;\n}\n\nfunction renderCopyright(conf) {\n // If there is already a copyright, let's relocate it.\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n return existingCopyright;\n }\n if (conf.hasOwnProperty(\"overrideCopyright\")) {\n const msg = \"The `overrideCopyright` configuration option is deprecated.\";\n const hint =\n 'Please add a `<p class=\"copyright\">` element directly to your document instead';\n showWarning(msg, name, { hint });\n return html`${[conf.overrideCopyright]}`;\n }\n if (conf.isUnofficial && conf.licenseInfo) {\n return html`<p class=\"copyright\">\n This document is licensed under a\n ${linkLicense(conf.licenseInfo.name, conf.licenseInfo.url, \"subfoot\")}\n (${conf.licenseInfo.short}).\n </p>`;\n }\n return renderOfficialCopyright(conf);\n}\n\nfunction renderOfficialCopyright(conf) {\n return html`<p class=\"copyright\">\n <a href=\"https://www.w3.org/Consortium/Legal/ipr-notice#Copyright\"\n >Copyright</a\n >\n ©\n ${conf.copyrightStart ? `${conf.copyrightStart}-` : \"\"}${conf.publishYear}\n ${conf.additionalCopyrightHolders\n ? html` ${[conf.additionalCopyrightHolders]} & `\n : \"\"}\n <a href=\"https://www.w3.org/\"\n ><abbr title=\"World Wide Web Consortium\">W3C</abbr></a\n ><sup>®</sup> (<a href=\"https://www.csail.mit.edu/\"\n ><abbr title=\"Massachusetts Institute of Technology\">MIT</abbr></a\n >,\n <a href=\"https://www.ercim.eu/\"\n ><abbr\n title=\"European Research Consortium for Informatics and Mathematics\"\n >ERCIM</abbr\n ></a\n >, <a href=\"https://www.keio.ac.jp/\">Keio</a>,\n <a href=\"https://ev.buaa.edu.cn/\">Beihang</a>). ${noteIfDualLicense(conf)}\n W3C <a href=\"${legalDisclaimer}\">liability</a>,\n <a href=\"${w3cTrademark}\">trademark</a> and ${linkDocumentUse(conf)} rules\n apply.\n </p>`;\n}\n\nfunction noteIfDualLicense(conf) {\n if (!conf.isCCBY) {\n return;\n }\n return html`\n Some Rights Reserved: this document is dual-licensed,\n ${linkLicense(\"CC-BY\", ccLicense)} and\n ${linkLicense(\"W3C Document License\", w3cLicense)}.\n `;\n}\n\nfunction linkDocumentUse(conf) {\n if (conf.isCCBY) {\n return linkLicense(\n \"document use\",\n \"https://www.w3.org/Consortium/Legal/2013/copyright-documents-dual.html\"\n );\n }\n if (conf.isW3CSoftAndDocLicense) {\n return linkLicense(\n \"permissive document license\",\n \"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\"\n );\n }\n return linkLicense(\"document use\", w3cLicense);\n}\n","// @ts-check\nimport { html } from \"../../core/import-maps.js\";\nimport { l10n } from \"./headers.js\";\nimport showLink from \"../../core/templates/show-link.js\";\nimport showLogo from \"../../core/templates/show-logo.js\";\nimport showPeople from \"../../core/templates/show-people.js\";\n\nexport default (conf, options) => {\n const existingCopyright = document.querySelector(\".copyright\");\n if (existingCopyright) {\n existingCopyright.remove();\n }\n\n const specTitleElem = document.querySelector(\"h1#title\");\n const specTitleElemClone = specTitleElem.cloneNode(true);\n\n return html`<div class=\"head\">\n ${conf.logos.map(showLogo)} ${specTitleElem}\n ${conf.subtitle ? html`<h2 id=\"subtitle\">${conf.subtitle}</h2>` : \"\"}\n <h2>\n ${conf.longStatus}\n <time class=\"dt-published\" datetime=\"${conf.dashDate}\"\n >${conf.publishHumanDate}</time\n >\n </h2>\n <dl>\n ${conf.thisVersion\n ? html`\n <dt>${l10n.this_version}</dt>\n <dd>\n <a class=\"u-url\" href=\"${conf.thisVersion}\"\n >${conf.thisVersion}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.latestVersion\n ? html`\n <dt>${l10n.latest_published_version}</dt>\n <dd>\n <a href=\"${conf.latestVersion}\">${conf.latestVersion}</a>\n </dd>\n `\n : \"\"}\n ${conf.edDraftURI\n ? html`\n <dt>${l10n.latest_editors_draft}</dt>\n <dd><a href=\"${conf.edDraftURI}\">${conf.edDraftURI}</a></dd>\n `\n : \"\"}\n ${conf.testSuiteURI\n ? html`\n <dt>Test suite:</dt>\n <dd><a href=\"${conf.testSuiteURI}\">${conf.testSuiteURI}</a></dd>\n `\n : \"\"}\n ${conf.implementationReportURI\n ? html`\n <dt>Implementation report:</dt>\n <dd>\n <a href=\"${conf.implementationReportURI}\"\n >${conf.implementationReportURI}</a\n >\n </dd>\n `\n : \"\"}\n ${conf.prevVersion\n ? html`\n <dt>Previous version:</dt>\n <dd><a href=\"${conf.prevVersion}\">${conf.prevVersion}</a></dd>\n `\n : \"\"}\n ${!conf.isCGFinal\n ? html`\n ${conf.prevED\n ? html`\n <dt>Previous editor's draft:</dt>\n <dd><a href=\"${conf.prevED}\">${conf.prevED}</a></dd>\n `\n : \"\"}\n `\n : \"\"}\n <dt>${conf.multipleEditors ? l10n.editors : l10n.editor}</dt>\n ${showPeople(conf.editors)}\n ${Array.isArray(conf.formerEditors) && conf.formerEditors.length > 0\n ? html`\n <dt>\n ${conf.multipleFormerEditors\n ? l10n.former_editors\n : l10n.former_editor}\n </dt>\n ${showPeople(conf.formerEditors)}\n `\n : \"\"}\n ${conf.authors\n ? html`\n <dt>${conf.multipleAuthors ? l10n.authors : l10n.author}</dt>\n ${showPeople(conf.authors)}\n `\n : \"\"}\n ${conf.otherLinks ? conf.otherLinks.map(showLink) : \"\"}\n </dl>\n ${conf.alternateFormats\n ? html`<p>\n ${options.multipleAlternates\n ? \"This document is also available in these non-normative formats:\"\n : \"This document is also available in this non-normative format:\"}\n ${options.alternatesHTML}\n </p>`\n : \"\"}\n ${existingCopyright\n ? existingCopyright\n : html`<p class=\"copyright\">\n <a href=\"https://www.w3.org/Consortium/Legal/ipr-notice#Copyright\"\n >Copyright</a\n >\n ©\n ${conf.copyrightStart\n ? `${conf.copyrightStart}-`\n : \"\"}${conf.publishYear}\n ${conf.additionalCopyrightHolders\n ? html` ${[conf.additionalCopyrightHolders]} & `\n : \"\"}\n the Contributors to the ${specTitleElemClone.childNodes}\n Specification, published by the\n <a href=\"${conf.wgURI}\">${conf.wg}</a> under the\n ${conf.isCGFinal\n ? html`\n <a href=\"https://www.w3.org/community/about/agreements/fsa/\"\n >W3C Community Final Specification Agreement (FSA)</a\n >. A human-readable\n <a\n href=\"https://www.w3.org/community/about/agreements/fsa-deed/\"\n >summary</a\n >\n is available.\n `\n : html`\n <a href=\"https://www.w3.org/community/about/agreements/cla/\"\n >W3C Community Contributor License Agreement (CLA)</a\n >. A human-readable\n <a\n href=\"https://www.w3.org/community/about/agreements/cla-deed/\"\n >summary</a\n >\n is available.\n `}\n </p>`}\n <hr title=\"Separator for header\" />\n </div>`;\n};\n","// @ts-check\nimport { getIntlData } from \"../../core/utils.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nconst localizationStrings = {\n en: {\n sotd: \"Status of This Document\",\n },\n ko: {\n sotd: \"현재 문서의 상태\",\n },\n zh: {\n sotd: \"关于本文档\",\n },\n ja: {\n sotd: \"この文書の位置付け\",\n },\n nl: {\n sotd: \"Status van dit document\",\n },\n es: {\n sotd: \"Estado de este Document\",\n },\n de: {\n sotd: \"Status dieses Dokuments\",\n },\n};\n\nexport const l10n = getIntlData(localizationStrings);\n\nexport default (conf, opts) => {\n return html`\n <h2>${l10n.sotd}</h2>\n ${conf.isPreview ? renderPreview(conf) : \"\"}\n ${conf.isUnofficial\n ? renderIsUnofficial(opts)\n : conf.isTagFinding\n ? opts.additionalContent\n : conf.isNoTrack\n ? renderIsNoTrack(conf, opts)\n : html`\n <p><em>${conf.l10n.status_at_publication}</em></p>\n ${conf.isSubmission\n ? noteForSubmission(conf, opts)\n : html`\n ${!conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${!conf.overrideStatus\n ? html`\n ${linkToWorkingGroup(conf)} ${linkToCommunity(conf, opts)}\n `\n : \"\"}\n ${conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${conf.isRec ? renderIsRec(conf) : renderNotRec(conf)}\n ${renderDeliverer(conf)}\n <p>\n This document is governed by the\n <a\n id=\"w3c_process_revision\"\n href=\"https://www.w3.org/2020/Process-20200915/\"\n >15 September 2020 W3C Process Document</a\n >.\n </p>\n ${conf.addPatentNote\n ? html`<p>${[conf.addPatentNote]}</p>`\n : \"\"}\n `}\n `}\n ${opts.additionalSections}\n `;\n};\n\nexport function renderPreview(conf) {\n const { prUrl, prNumber, edDraftURI } = conf;\n return html`<details class=\"annoying-warning\" open=\"\">\n <summary>\n This is a\n preview${prUrl && prNumber\n ? html`\n of pull request\n <a href=\"${prUrl}\">#${prNumber}</a>\n `\n : \"\"}\n </summary>\n <p>\n Do not attempt to implement this version of the specification. Do not\n reference this version as authoritative in any way.\n ${edDraftURI\n ? html`\n Instead, see\n <a href=\"${edDraftURI}\">${edDraftURI}</a> for the Editor's draft.\n `\n : \"\"}\n </p>\n </details>`;\n}\n\nfunction renderIsUnofficial(opts) {\n const { additionalContent } = opts;\n return html`\n <p>\n This document is a draft of a potential specification. It has no official\n standing of any kind and does not represent the support or consensus of\n any standards organization.\n </p>\n ${additionalContent}\n `;\n}\n\nfunction renderIsNoTrack(conf, opts) {\n const { isMO } = conf;\n const { additionalContent } = opts;\n return html`\n <p>\n This document is merely a W3C-internal\n ${isMO ? \"member-confidential\" : \"\"} document. It has no official standing\n of any kind and does not represent consensus of the W3C Membership.\n </p>\n ${additionalContent}\n `;\n}\n\nfunction renderNotRec(conf) {\n let statusExplanation = \"\";\n let updatePolicy = html`This is a draft document and may be updated, replaced\n or obsoleted by other documents at any time. It is inappropriate to cite this\n document as other than work in progress.\n ${conf.updateableRec\n ? html`Future updates to this specification may incorporate\n <a href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}`;\n let reviewPolicy = \"\";\n if (conf.specStatus === \"CRD\") {\n statusExplanation =\n \"A Candidate Recommendation Draft integrates changes from the previous Candidate Recommendation that the Working Group intends to include in a subsequent Candidate Recommendation Snapshot.\";\n if (conf.pubMode === \"LS\") {\n updatePolicy =\n \"This document is maintained and updated at any time. Some parts of this document are work in progress. \";\n }\n } else if (conf.specStatus === \"CR\") {\n statusExplanation = html`A Candidate Recommendation Snapshot has received\n <a href=\"https://www.w3.org/2020/Process-20200915/#dfn-wide-review\"\n >wide review</a\n >\n and is intended to gather\n <a href=\"${conf.implementationReportURI}\">implementation experience</a>.`;\n updatePolicy = html`${conf.updateableRec\n ? html`Future updates to this specification may incorporate\n <a href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}`;\n if (conf.pubMode === \"LS\") {\n reviewPolicy = `Comments are welcome at any time but most especially before ${conf.humanCREnd}.`;\n } else {\n reviewPolicy = `This Candidate Recommendation is not expected to advance to Proposed Recommendation any earlier than ${conf.humanCREnd}.`;\n }\n } else if (conf.isPR) {\n reviewPolicy = html` The W3C Membership and other interested parties are\n invited to review the document and send comments through\n ${conf.humanPREnd}. Advisory Committee Representatives should consult\n their\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >. Note that substantive technical comments were expected during the\n Candidate Recommendation review period that ended ${conf.humanCREnd}.`;\n } else if (conf.isPER) {\n reviewPolicy = html` W3C Advisory Committee Members are invited to send\n formal review comments on this Proposed Edited Recommendation to the W3C\n Team until ${conf.humanPEREnd}. Members of the Advisory Committee will\n find the appropriate review form for this document by consulting their\n list of current\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >.`;\n }\n return html`<p>\n Publication as ${conf.anOrA} ${conf.textStatus} does not imply endorsement\n by the W3C Membership. ${statusExplanation}\n </p>\n ${updatePolicy ? html`<p>${updatePolicy}</p>` : \"\"}\n <p>${reviewPolicy}</p>`;\n}\n\nfunction renderIsRec({\n updateableRec,\n revisionTypes = [],\n humanRevisedRecEnd,\n}) {\n let reviewTarget = \"\";\n if (revisionTypes.includes(\"addition\")) {\n reviewTarget = \"additions\";\n }\n if (revisionTypes.includes(\"correction\") && !reviewTarget) {\n reviewTarget = \"corrections\";\n }\n return html`<p>\n A W3C Recommendation is a specification that, after extensive\n consensus-building, has received the endorsement of the W3C and its\n Members. W3C recommends the wide deployment of this specification as a\n standard for the Web.\n ${updateableRec\n ? html`Future updates to this Recommendation may incorporate\n <a\n href=\"https://www.w3.org/2020/Process-20200915/#allow-new-features\"\n >new features</a\n >.`\n : \"\"}\n </p>\n ${revisionTypes.includes(\"addition\")\n ? html`<p class=\"addition\">\n Proposed additions are marked in the document.\n </p>`\n : \"\"}\n ${revisionTypes.includes(\"correction\")\n ? html`<p class=\"correction\">\n Proposed corrections are marked in the document.\n </p>`\n : \"\"}\n ${reviewTarget\n ? html`<p>\n The W3C Membership and other interested parties are invited to review\n the proposed ${reviewTarget} and send comments through\n ${humanRevisedRecEnd}. Advisory Committee Representatives should\n consult their\n <a href=\"https://www.w3.org/2002/09/wbs/myQuestionnaires\"\n >WBS questionnaires</a\n >.\n </p>`\n : \"\"} `;\n}\n\nfunction renderDeliverer(conf) {\n const {\n isNote,\n wgId,\n isIGNote,\n multipleWGs,\n recNotExpected,\n wgPatentHTML,\n wgPatentURI,\n charterDisclosureURI,\n wgPatentPolicy,\n } = conf;\n\n const patentPolicyURL =\n wgPatentPolicy === \"PP2017\"\n ? \"https://www.w3.org/Consortium/Patent-Policy-20170801/\"\n : \"https://www.w3.org/Consortium/Patent-Policy/\";\n\n const producers = !isIGNote\n ? html`\n This document was produced by ${multipleWGs ? \"groups\" : \"a group\"}\n operating under the\n <a href=\"${patentPolicyURL}\"\n >${wgPatentPolicy === \"PP2017\" ? \"1 August 2017 \" : \"\"}W3C Patent\n Policy</a\n >.\n `\n : \"\";\n const wontBeRec = recNotExpected\n ? \"The group does not expect this document to become a W3C Recommendation.\"\n : \"\";\n return html`<p data-deliverer=\"${isNote || isIGNote ? wgId : null}\">\n ${producers} ${wontBeRec}\n ${!isNote && !isIGNote\n ? html`\n ${multipleWGs\n ? html` W3C maintains ${wgPatentHTML} `\n : html`\n W3C maintains a\n <a href=\"${[wgPatentURI]}\" rel=\"disclosure\"\n >public list of any patent disclosures</a\n >\n `}\n made in connection with the deliverables of\n ${multipleWGs\n ? \"each group; these pages also include\"\n : \"the group; that page also includes\"}\n instructions for disclosing a patent. An individual who has actual\n knowledge of a patent which the individual believes contains\n <a href=\"${patentPolicyURL}#def-essential\">Essential Claim(s)</a>\n must disclose the information in accordance with\n <a href=\"${patentPolicyURL}#sec-Disclosure\"\n >section 6 of the W3C Patent Policy</a\n >.\n `\n : \"\"}\n ${isIGNote\n ? html`\n The disclosure obligations of the Participants of this group are\n described in the\n <a href=\"${charterDisclosureURI}\">charter</a>.\n `\n : \"\"}\n </p>`;\n}\n\nfunction noteForSubmission(conf, opts) {\n return html`\n ${opts.additionalContent}\n ${conf.isMemberSubmission\n ? noteForMemberSubmission(conf)\n : conf.isTeamSubmission\n ? noteForTeamSubmission(conf, opts)\n : \"\"}\n `;\n}\n\nfunction noteForMemberSubmission(conf) {\n const teamComment = `https://www.w3.org/Submission/${conf.publishDate.getUTCFullYear()}/${\n conf.submissionCommentNumber\n }/Comment/`;\n\n const patentPolicyURL =\n conf.wgPatentPolicy === \"PP2017\"\n ? \"https://www.w3.org/Consortium/Patent-Policy-20170801/\"\n : \"https://www.w3.org/Consortium/Patent-Policy/\";\n\n return html`<p>\n By publishing this document, W3C acknowledges that the\n <a href=\"${conf.thisVersion}\">Submitting Members</a> have made a formal\n Submission request to W3C for discussion. Publication of this document by\n W3C indicates no endorsement of its content by W3C, nor that W3C has, is, or\n will be allocating any resources to the issues addressed by it. This\n document is not the product of a chartered W3C group, but is published as\n potential input to the\n <a href=\"https://www.w3.org/Consortium/Process\">W3C Process</a>. A\n <a href=\"${teamComment}\">W3C Team Comment</a> has been published in\n conjunction with this Member Submission. Publication of acknowledged Member\n Submissions at the W3C site is one of the benefits of\n <a href=\"https://www.w3.org/Consortium/Prospectus/Joining\">\n W3C Membership</a\n >. Please consult the requirements associated with Member Submissions of\n <a href=\"${patentPolicyURL}#sec-submissions\"\n >section 3.3 of the W3C Patent Policy</a\n >. Please consult the complete\n <a href=\"https://www.w3.org/Submission\"\n >list of acknowledged W3C Member Submissions</a\n >.\n </p>`;\n}\n\nfunction noteForTeamSubmission(conf, opts) {\n return html`\n ${renderPublicList(conf, opts)}\n <p>\n Please consult the complete\n <a href=\"https://www.w3.org/TeamSubmission/\">list of Team Submissions</a>.\n </p>\n `;\n}\n\nexport function renderPublicList(conf, opts) {\n const {\n mailToWGPublicListWithSubject,\n mailToWGPublicListSubscription,\n } = opts;\n const { wgPublicList, subjectPrefix } = conf;\n const archivesURL = `https://lists.w3.org/Archives/Public/${wgPublicList}/`;\n return html`<p>\n If you wish to make comments regarding this document, please send them to\n <a href=\"${mailToWGPublicListWithSubject}\">${wgPublicList}@w3.org</a>\n (<a href=\"${mailToWGPublicListSubscription}\">subscribe</a>,\n <a href=\"${archivesURL}\">archives</a>)${subjectPrefix\n ? html` with <code>${subjectPrefix}</code> at the start of your email's\n subject`\n : \"\"}.\n </p>`;\n}\n\nfunction linkToWorkingGroup(conf) {\n if (!conf.wg) {\n return;\n }\n let proposedChanges = null;\n if (conf.isRec && conf.revisionTypes && conf.revisionTypes.length) {\n if (conf.revisionTypes.includes(\"addition\")) {\n if (conf.revisionTypes.includes(\"correction\")) {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-changes\"\n >proposed changes</a\n >, introducing substantive changes and new features since the previous\n Recommentation.`;\n } else {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-addition\"\n >proposed additions</a\n >, introducing new features since the previous Recommentation.`;\n }\n } else if (conf.revisionTypes.includes(\"correction\")) {\n proposedChanges = html`It includes\n <a href=\"https://www.w3.org/2020/Process-20200915/#proposed-correction\"\n >proposed corrections</a\n >.`;\n }\n }\n return html`<p>\n This document was published by ${conf.wgHTML} as ${conf.anOrA}\n ${conf.longStatus}. ${proposedChanges}\n ${conf.notYetRec\n ? \"This document is intended to become a W3C Recommendation.\"\n : \"\"}\n </p>`;\n}\n\nexport function linkToCommunity(conf, opts) {\n if (!conf.github && !conf.wgPublicList) {\n return;\n }\n return html`<p>\n ${conf.github\n ? html`\n <a href=\"${conf.issueBase}\">GitHub Issues</a> are preferred for\n discussion of this specification.\n `\n : \"\"}\n ${conf.wgPublicList\n ? html`\n ${conf.github && conf.wgPublicList\n ? \"Alternatively, you can send comments to our mailing list.\"\n : \"Comments regarding this document are welcome.\"}\n Please send them to\n <a href=\"${opts.mailToWGPublicListWithSubject}\"\n >${conf.wgPublicList}@w3.org</a\n >\n (<a href=\"${opts.mailToWGPublicListSubscription}\">subscribe</a>,\n <a\n href=\"${`https://lists.w3.org/Archives/Public/${conf.wgPublicList}/`}\"\n >archives</a\n >)${conf.subjectPrefix\n ? html` with <code>${conf.subjectPrefix}</code> at the start of your\n email's subject`\n : \"\"}.\n `\n : \"\"}\n </p>`;\n}\n","// @ts-check\nimport {\n l10n,\n linkToCommunity,\n renderPreview,\n renderPublicList,\n} from \"./sotd.js\";\nimport { html } from \"../../core/import-maps.js\";\n\nexport default (conf, opts) => {\n return html`\n <h2>${l10n.sotd}</h2>\n ${conf.isPreview ? renderPreview(conf) : \"\"}\n <p>\n This specification was published by the\n <a href=\"${conf.wgURI}\">${conf.wg}</a>. It is not a W3C Standard nor is it\n on the W3C Standards Track.\n ${conf.isCGFinal\n ? html`\n Please note that under the\n <a href=\"https://www.w3.org/community/about/agreements/final/\"\n >W3C Community Final Specification Agreement (FSA)</a\n >\n other conditions apply.\n `\n : html`\n Please note that under the\n <a href=\"https://www.w3.org/community/about/agreements/cla/\"\n >W3C Community Contributor License Agreement (CLA)</a\n >\n there is a limited opt-out and other conditions apply.\n `}\n Learn more about\n <a href=\"https://www.w3.org/community/\"\n >W3C Community and Business Groups</a\n >.\n </p>\n ${!conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${!conf.github && conf.wgPublicList ? renderPublicList(conf, opts) : \"\"}\n ${conf.github ? linkToCommunity(conf, opts) : \"\"}\n ${conf.sotdAfterWGinfo ? opts.additionalContent : \"\"}\n ${opts.additionalSections}\n `;\n};\n","// @ts-check\n// Module w3c/headers\n// Generate the headers material based on the provided configuration.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n// - shortName: the small name that is used after /TR/ in published reports (required)\n// - editors: an array of people editing the document (at least one is required). People\n// are defined using:\n// - name: the person's name (required)\n// - url: URI for the person's home page\n// - company: the person's company\n// - companyURL: the URI for the person's company\n// - mailto: the person's email\n// - note: a note on the person (e.g. former editor)\n// - authors: an array of people who are contributing authors of the document.\n// - formerEditors: an array of people that had earlier edited the document but no longer edit.\n// - subtitle: a subtitle for the specification\n// - publishDate: the date to use for the publication, default to document.lastModified, and\n// failing that to now. The format is YYYY-MM-DD or a Date object.\n// - previousPublishDate: the date on which the previous version was published.\n// - previousMaturity: the specStatus of the previous version\n// - errata: the URI of the errata document, if any\n// - alternateFormats: a list of alternate formats for the document, each of which being\n// defined by:\n// - uri: the URI to the alternate\n// - label: a label for the alternate\n// - lang: optional language\n// - type: optional MIME type\n// - logos: a list of logos to use instead of the W3C logo, each of which being defined by:\n// - src: the URI to the logo (target of <img src=>)\n// - alt: alternate text for the image (<img alt=>), defaults to \"Logo\" or \"Logo 1\", \"Logo 2\", ...\n// if src is not specified, this is the text of the \"logo\"\n// - height: optional height of the logo (<img height=>)\n// - width: optional width of the logo (<img width=>)\n// - url: the URI to the organization represented by the logo (target of <a href=>)\n// - id: optional id for the logo, permits custom CSS (wraps logo in <span id=>)\n// - each logo element must specify either src or alt\n// - testSuiteURI: the URI to the test suite, if any\n// - implementationReportURI: the URI to the implementation report, if any\n// - noRecTrack: set to true if this document is not intended to be on the Recommendation track\n// - edDraftURI: the URI of the Editor's Draft for this document, if any. Required if\n// specStatus is set to \"ED\".\n// - additionalCopyrightHolders: a copyright owner in addition to W3C (or the only one if specStatus\n// is unofficial)\n// - overrideCopyright: provides markup to completely override the copyright\n// - copyrightStart: the year from which the copyright starts running\n// - prevED: the URI of the previous Editor's Draft if it has moved\n// - prevRecShortname: the short name of the previous Recommendation, if the name has changed\n// - prevRecURI: the URI of the previous Recommendation if not directly generated from\n// prevRecShortname.\n// - wg: the name of the WG in charge of the document. This may be an array in which case wgURI\n// and wgPatentURI need to be arrays as well, of the same length and in the same order\n// - wgURI: the URI to the group's page, or an array of such\n// - wgPatentURI: the URI to the group's patent information page, or an array of such. NOTE: this\n// is VERY IMPORTANT information to provide and get right, do not just paste this without checking\n// that you're doing it right\n// - wgPublicList: the name of the mailing list where discussion takes place. Note that this cannot\n// be an array as it is assumed that there is a single list to discuss the document, even if it\n// is handled by multiple groups\n// - charterDisclosureURI: used for IGs (when publishing IG-NOTEs) to provide a link to the IPR commitment\n// defined in their charter.\n// - addPatentNote: used to add patent-related information to the SotD, for instance if there's an open\n// PAG on the document.\n// - thisVersion: the URI to the dated current version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - latestVersion: the URI to the latest (undated) version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - prevVersion: the URI to the previous (dated) version of the specification. ONLY ever use this for CG/BG\n// documents, for all others it is autogenerated.\n// - subjectPrefix: the string that is expected to be used as a subject prefix when posting to the mailing\n// list of the group.\n// - otherLinks: an array of other links that you might want in the header (e.g., link github, twitter, etc).\n// Example of usage: [{key: \"foo\", href:\"https://b\"}, {key: \"bar\", href:\"https://\"}].\n// Allowed values are:\n// - key: the key for the <dt> (e.g., \"Bug Tracker\"). Required.\n// - value: The value that will appear in the <dd> (e.g., \"GitHub\"). Optional.\n// - href: a URL for the value (e.g., \"https://foo.com/issues\"). Optional.\n// - class: a string representing CSS classes. Optional.\n// - license: can be one of the following\n// - \"cc-by\", which is experimentally available in some groups (but likely to be phased out).\n// Note that this is a dual licensing regime.\n// - \"cc0\", an extremely permissive license. It is only recommended if you are working on a document that is\n// intended to be pushed to the WHATWG.\n// - \"w3c-software\", a permissive and attributions license (but GPL-compatible).\n// - \"w3c-software-doc\", (default) the W3C Software and Document License\n// https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\nimport {\n ISODate,\n concatDate,\n docLink,\n htmlJoinAnd,\n showError,\n showWarning,\n} from \"../core/utils.js\";\nimport cgbgHeadersTmpl from \"./templates/cgbg-headers.js\";\nimport cgbgSotdTmpl from \"./templates/cgbg-sotd.js\";\nimport headersTmpl from \"./templates/headers.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { pub } from \"../core/pubsubhub.js\";\nimport sotdTmpl from \"./templates/sotd.js\";\n\nexport const name = \"w3c/headers\";\n\nconst W3CDate = new Intl.DateTimeFormat([\"en-AU\"], {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"long\",\n day: \"2-digit\",\n});\n\nconst status2maturity = {\n LS: \"WD\",\n LD: \"WD\",\n FPWD: \"WD\",\n LC: \"WD\",\n FPLC: \"WD\",\n \"FPWD-NOTE\": \"NOTE\",\n \"WD-NOTE\": \"WD\",\n \"LC-NOTE\": \"LC\",\n \"IG-NOTE\": \"NOTE\",\n \"WG-NOTE\": \"NOTE\",\n};\n\nconst status2rdf = {\n NOTE: \"w3p:NOTE\",\n WD: \"w3p:WD\",\n LC: \"w3p:LastCall\",\n CR: \"w3p:CR\",\n CRD: \"w3p:CRD\",\n PR: \"w3p:PR\",\n REC: \"w3p:REC\",\n PER: \"w3p:PER\",\n RSCND: \"w3p:RSCND\",\n};\nconst status2text = {\n NOTE: \"Working Group Note\",\n \"WG-NOTE\": \"Working Group Note\",\n \"CG-NOTE\": \"Co-ordination Group Note\",\n \"IG-NOTE\": \"Interest Group Note\",\n \"Member-SUBM\": \"Member Submission\",\n \"Team-SUBM\": \"Team Submission\",\n MO: \"Member-Only Document\",\n ED: \"Editor's Draft\",\n LS: \"Living Standard\",\n LD: \"Living Document\",\n FPWD: \"First Public Working Draft\",\n WD: \"Working Draft\",\n \"FPWD-NOTE\": \"Working Group Note\",\n \"WD-NOTE\": \"Working Draft\",\n \"LC-NOTE\": \"Working Draft\",\n FPLC: \"First Public and Last Call Working Draft\",\n LC: \"Last Call Working Draft\",\n CR: \"Candidate Recommendation\",\n CRD: \"Candidate Recommendation\",\n PR: \"Proposed Recommendation\",\n PER: \"Proposed Edited Recommendation\",\n REC: \"Recommendation\",\n RSCND: \"Rescinded Recommendation\",\n unofficial: \"Unofficial Draft\",\n base: \"Document\",\n finding: \"TAG Finding\",\n \"draft-finding\": \"Draft TAG Finding\",\n \"CG-DRAFT\": \"Draft Community Group Report\",\n \"CG-FINAL\": \"Final Community Group Report\",\n \"BG-DRAFT\": \"Draft Business Group Report\",\n \"BG-FINAL\": \"Final Business Group Report\",\n};\nconst status2long = {\n ...status2text,\n CR: \"Candidate Recommendation Snapshot\",\n CRD: \"Candidate Recommendation Draft\",\n \"FPWD-NOTE\": \"First Public Working Group Note\",\n \"LC-NOTE\": \"Last Call Working Draft\",\n};\nconst maybeRecTrack = [\"FPWD\", \"WD\"];\nconst recTrackStatus = [\"FPLC\", \"LC\", \"CR\", \"CRD\", \"PR\", \"PER\", \"REC\"];\nexport const cgStatus = [\"CG-DRAFT\", \"CG-FINAL\"];\nexport const bgStatus = [\"BG-DRAFT\", \"BG-FINAL\"];\nexport const cgbgStatus = [...cgStatus, ...bgStatus];\nconst noTrackStatus = [\n \"base\",\n ...cgStatus,\n ...bgStatus,\n \"draft-finding\",\n \"finding\",\n \"MO\",\n \"unofficial\",\n];\nconst precededByAn = [\"ED\", \"IG-NOTE\"];\nconst licenses = new Map([\n [\n \"cc0\",\n {\n name: \"Creative Commons 0 Public Domain Dedication\",\n short: \"CC0\",\n url: \"https://creativecommons.org/publicdomain/zero/1.0/\",\n },\n ],\n [\n \"w3c-software\",\n {\n name: \"W3C Software Notice and License\",\n short: \"W3C Software\",\n url:\n \"https://www.w3.org/Consortium/Legal/2002/copyright-software-20021231\",\n },\n ],\n [\n \"w3c-software-doc\",\n {\n name: \"W3C Software and Document Notice and License\",\n short: \"W3C Software and Document\",\n url:\n \"https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\",\n },\n ],\n [\n \"cc-by\",\n {\n name: \"Creative Commons Attribution 4.0 International Public License\",\n short: \"CC-BY\",\n url: \"https://creativecommons.org/licenses/by/4.0/legalcode\",\n },\n ],\n]);\n\nconst patentPolicies = [\"PP2017\", \"PP2020\"];\n\nconst baseLogo = Object.freeze({\n id: \"\",\n alt: \"\",\n href: \"\",\n src: \"\",\n height: \"48\",\n width: \"72\",\n});\n\n/**\n * @param {*} conf\n * @param {string} prop\n * @param {string | number | Date} fallbackDate\n */\nfunction validateDateAndRecover(conf, prop, fallbackDate = new Date()) {\n const date = conf[prop] ? new Date(conf[prop]) : new Date(fallbackDate);\n // if date is valid\n if (Number.isFinite(date.valueOf())) {\n const formattedDate = ISODate.format(date);\n return new Date(formattedDate);\n }\n const msg =\n `[\\`${prop}\\`](https://github.com/w3c/respec/wiki/${prop}) ` +\n `is not a valid date: \"${conf[prop]}\". Expected format 'YYYY-MM-DD'.`;\n showError(msg, name);\n return new Date(ISODate.format(new Date()));\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = `Missing required configuration: ${docLink(\"specStatus\")}.`;\n const hint = `Please select an appropriate status from ${docLink(\n \"specStatus\"\n )} based on your W3C group. If in doubt, use \\`\"unofficial\"\\`.`;\n showError(msg, name, { hint });\n }\n conf.isUnofficial = conf.specStatus === \"unofficial\";\n if (conf.isUnofficial && !Array.isArray(conf.logos)) {\n conf.logos = [];\n }\n if (conf.isUnofficial) {\n if (conf.license && !licenses.has(conf.license)) {\n const msg = `The ${docLink(\n \"license\"\n )} configuration option has an invalid value: \"\\`${\n conf.license\n }\\`\". Defaulting to \"cc-by\".`;\n const licensesKeys = [...licenses.keys()]\n .map(key => `\\`\"${key}\"\\``)\n .join(\", \");\n const hint = `Please explicitly set ${docLink(\n \"license\"\n )} to one of: ${licensesKeys}.`;\n showError(msg, name, { hint });\n conf.license = \"cc-by\";\n }\n // default it to cc-by\n if (conf.license === undefined) {\n conf.license = \"cc-by\";\n }\n }\n\n conf.isCCBY = conf.license === \"cc-by\";\n conf.isW3CSoftAndDocLicense = conf.license === \"w3c-software-doc\";\n if (!conf.isUnofficial && [\"cc-by\"].includes(conf.license)) {\n const msg = `You cannot use license \"\\`${conf.license}\\`\" with W3C Specs.`;\n const hint = `Please set ${docLink(\n \"license\"\n )} to \"w3c-software-doc\" instead.`;\n showError(msg, name, { hint });\n }\n conf.licenseInfo = licenses.get(conf.license);\n conf.isCGBG = cgbgStatus.includes(conf.specStatus);\n conf.isCGFinal = conf.isCGBG && conf.specStatus.endsWith(\"G-FINAL\");\n conf.isBasic = conf.specStatus === \"base\";\n conf.isRegular = !conf.isCGBG && !conf.isBasic;\n\n if (conf.isRegular && !conf.shortName) {\n const msg = \"Missing required configuration: `shortName`\";\n showError(msg, name);\n }\n if (conf.testSuiteURI) {\n const url = new URL(conf.testSuiteURI, location.href);\n const { host, pathname } = url;\n if (\n host === \"github.com\" &&\n pathname.startsWith(\"/w3c/web-platform-tests/\")\n ) {\n const msg =\n \"Web Platform Tests have moved to a new Github Organization at https://github.com/web-platform-tests. \";\n const hint =\n `Please update your ${docLink(\"testSuiteURI\")} to point to the ` +\n `new tests repository (e.g., https://github.com/web-platform-tests/wpt/tree/master/${conf.shortName} ).`;\n showWarning(msg, name, { hint });\n }\n }\n if (!conf.subtitle) conf.subtitle = \"\";\n conf.publishDate = validateDateAndRecover(\n conf,\n \"publishDate\",\n document.lastModified\n );\n conf.publishYear = conf.publishDate.getUTCFullYear();\n conf.publishHumanDate = W3CDate.format(conf.publishDate);\n conf.isNoTrack = noTrackStatus.includes(conf.specStatus);\n conf.isRecTrack = conf.noRecTrack\n ? false\n : recTrackStatus.concat(maybeRecTrack).includes(conf.specStatus);\n conf.isMemberSubmission = conf.specStatus === \"Member-SUBM\";\n if (conf.isMemberSubmission) {\n const memSubmissionLogo = {\n alt: \"W3C Member Submission\",\n href: \"https://www.w3.org/Submission/\",\n src: \"https://www.w3.org/Icons/member_subm-v.svg\",\n width: \"211\",\n };\n conf.logos.push({ ...baseLogo, ...memSubmissionLogo });\n }\n conf.isTeamSubmission = conf.specStatus === \"Team-SUBM\";\n if (conf.isTeamSubmission) {\n const teamSubmissionLogo = {\n alt: \"W3C Team Submission\",\n href: \"https://www.w3.org/TeamSubmission/\",\n src: \"https://www.w3.org/Icons/team_subm-v.svg\",\n width: \"211\",\n };\n conf.logos.push({ ...baseLogo, ...teamSubmissionLogo });\n }\n conf.isSubmission = conf.isMemberSubmission || conf.isTeamSubmission;\n conf.anOrA = precededByAn.includes(conf.specStatus) ? \"an\" : \"a\";\n conf.isTagFinding =\n conf.specStatus === \"finding\" || conf.specStatus === \"draft-finding\";\n\n if (conf.isRecTrack && !hasGitHubIssuesLink(conf)) {\n const msg = `Rec-track documents must link to Github issues from their head.`;\n const hint = `Please use the [\\`github\\`](https://respec.org/docs/#github) configuration option.`;\n showError(msg, name, { hint });\n }\n if (!conf.edDraftURI) {\n conf.edDraftURI = \"\";\n if (conf.specStatus === \"ED\") {\n const msg = \"Editor's Drafts should set edDraftURI.\";\n showWarning(msg, name);\n }\n }\n conf.maturity = status2maturity[conf.specStatus]\n ? status2maturity[conf.specStatus]\n : conf.specStatus;\n let publishSpace = \"TR\";\n if (conf.specStatus === \"Member-SUBM\") publishSpace = \"Submission\";\n else if (conf.specStatus === \"Team-SUBM\") publishSpace = \"TeamSubmission\";\n if (conf.isRegular)\n conf.thisVersion = `https://www.w3.org/${publishSpace}/${conf.publishDate.getUTCFullYear()}/${\n conf.maturity\n }-${conf.shortName}-${concatDate(conf.publishDate)}/`;\n if (conf.specStatus === \"ED\") conf.thisVersion = conf.edDraftURI;\n const skipLatestVersion =\n conf.specStatus === \"ED\" && conf.latestVersion === null;\n if (conf.isRegular && !skipLatestVersion)\n conf.latestVersion = `https://www.w3.org/${publishSpace}/${conf.shortName}/`;\n if (conf.isTagFinding) {\n conf.latestVersion = `https://www.w3.org/2001/tag/doc/${conf.shortName}`;\n conf.thisVersion = `${conf.latestVersion}-${ISODate.format(\n conf.publishDate\n )}`;\n }\n if (conf.previousPublishDate) {\n if (!conf.previousMaturity && !conf.isTagFinding) {\n const msg = \"`previousPublishDate` is set, but not `previousMaturity`.\";\n showError(msg, name);\n }\n\n conf.previousPublishDate = validateDateAndRecover(\n conf,\n \"previousPublishDate\"\n );\n\n const pmat = status2maturity[conf.previousMaturity]\n ? status2maturity[conf.previousMaturity]\n : conf.previousMaturity;\n if (conf.isTagFinding) {\n conf.prevVersion = `${conf.latestVersion}-${ISODate.format(\n conf.previousPublishDate\n )}`;\n } else if (conf.isCGBG) {\n conf.prevVersion = conf.prevVersion || \"\";\n } else if (conf.isBasic) {\n conf.prevVersion = \"\";\n } else {\n conf.prevVersion = `https://www.w3.org/TR/${conf.previousPublishDate.getUTCFullYear()}/${pmat}-${\n conf.shortName\n }-${concatDate(conf.previousPublishDate)}/`;\n }\n } else {\n if (\n !conf.specStatus.endsWith(\"NOTE\") &&\n conf.specStatus !== \"FPWD\" &&\n conf.specStatus !== \"FPLC\" &&\n conf.specStatus !== \"ED\" &&\n !conf.noRecTrack &&\n !conf.isNoTrack &&\n !conf.isSubmission\n ) {\n const msg = \"Document on track but no previous version.\";\n const hint =\n \"Add [`previousMaturity`](https://respec.org/docs/#previousMaturity) \" +\n \"and [`previousPublishDate`](https://respec.org/docs/#previousPublishDate) to ReSpec's config.\";\n showError(msg, name, { hint });\n }\n if (!conf.prevVersion) conf.prevVersion = \"\";\n }\n if (conf.prevRecShortname && !conf.prevRecURI)\n conf.prevRecURI = `https://www.w3.org/TR/${conf.prevRecShortname}`;\n const peopCheck = function (it) {\n if (!it.name) {\n const msg = \"All authors and editors must have a `name` property.\";\n const hint =\n \"See [Person](https://respec.org/docs/#person) configuration for available options.\";\n\n showError(msg, name, { hint });\n }\n if (it.orcid) {\n try {\n it.orcid = normalizeOrcid(it.orcid);\n } catch (e) {\n const msg = `\"${it.orcid}\" is not an ORCID. ${e.message}`;\n showError(msg, name);\n // A failed orcid link could link to something outside of orcid,\n // which would be misleading.\n delete it.orcid;\n }\n }\n };\n if (!conf.formerEditors) conf.formerEditors = [];\n if (conf.editors) {\n conf.editors.forEach(peopCheck);\n // Move any editors with retiredDate to formerEditors.\n for (let i = 0; i < conf.editors.length; i++) {\n const editor = conf.editors[i];\n if (\"retiredDate\" in editor) {\n conf.formerEditors.push(editor);\n conf.editors.splice(i--, 1);\n }\n }\n }\n if (!conf.editors || conf.editors.length === 0) {\n const msg = \"At least one editor is required\";\n showError(msg, name);\n }\n if (conf.formerEditors.length) {\n conf.formerEditors.forEach(peopCheck);\n }\n if (conf.authors) {\n conf.authors.forEach(peopCheck);\n }\n conf.multipleEditors = conf.editors && conf.editors.length > 1;\n conf.multipleFormerEditors = conf.formerEditors.length > 1;\n conf.multipleAuthors = conf.authors && conf.authors.length > 1;\n (conf.alternateFormats || []).forEach(it => {\n if (!it.uri || !it.label) {\n const msg = \"All alternate formats must have a uri and a label.\";\n showError(msg, name);\n }\n });\n if (conf.copyrightStart && conf.copyrightStart == conf.publishYear)\n conf.copyrightStart = \"\";\n conf.longStatus = status2long[conf.specStatus];\n conf.textStatus = status2text[conf.specStatus];\n if (status2rdf[conf.specStatus]) {\n conf.rdfStatus = status2rdf[conf.specStatus];\n }\n conf.showThisVersion = !conf.isNoTrack || conf.isTagFinding;\n conf.showPreviousVersion =\n conf.specStatus !== \"FPWD\" &&\n conf.specStatus !== \"FPLC\" &&\n conf.specStatus !== \"ED\" &&\n !conf.isNoTrack &&\n !conf.isSubmission;\n if (conf.specStatus.endsWith(\"NOTE\") && !conf.prevVersion)\n conf.showPreviousVersion = false;\n if (conf.isTagFinding)\n conf.showPreviousVersion = conf.previousPublishDate ? true : false;\n conf.notYetRec = conf.isRecTrack && conf.specStatus !== \"REC\";\n conf.isRec = conf.isRecTrack && conf.specStatus === \"REC\";\n if (conf.isRec && !conf.errata) {\n const msg = \"Recommendations must have an errata link.\";\n const hint =\n \"Add an [`errata`](https://respec.org/docs/#errata) URL to your respecConfig.\";\n showError(msg, name, { hint });\n }\n conf.prependW3C = !conf.isUnofficial;\n conf.isED = conf.specStatus === \"ED\";\n conf.isCR = conf.specStatus === \"CR\" || conf.specStatus === \"CRD\";\n conf.isCRDraft = conf.specStatus === \"CRD\";\n conf.isPR = conf.specStatus === \"PR\";\n conf.isPER = conf.specStatus === \"PER\";\n conf.isMO = conf.specStatus === \"MO\";\n conf.isNote = [\"FPWD-NOTE\", \"WG-NOTE\"].includes(conf.specStatus);\n conf.isIGNote = conf.specStatus === \"IG-NOTE\";\n conf.dashDate = ISODate.format(conf.publishDate);\n conf.publishISODate = conf.publishDate.toISOString();\n conf.shortISODate = ISODate.format(conf.publishDate);\n validatePatentPolicies(conf);\n\n if (conf.hasOwnProperty(\"wgPatentURI\") && !Array.isArray(conf.wgPatentURI)) {\n Object.defineProperty(conf, \"wgId\", {\n get() {\n // it's always at \"pp-impl\" + 1\n const urlParts = this.wgPatentURI.split(\"/\");\n const pos = urlParts.findIndex(item => item === \"pp-impl\") + 1;\n return urlParts[pos] || \"\";\n },\n });\n } else {\n conf.wgId = conf.wgId ? conf.wgId : \"\";\n }\n // configuration done - yay!\n\n const options = {\n get multipleAlternates() {\n return conf.alternateFormats && conf.alternateFormats.length > 1;\n },\n get alternatesHTML() {\n return (\n conf.alternateFormats &&\n htmlJoinAnd(conf.alternateFormats, alt => {\n const lang = alt.hasOwnProperty(\"lang\") && alt.lang ? alt.lang : null;\n const type = alt.hasOwnProperty(\"type\") && alt.type ? alt.type : null;\n return html`<a\n rel=\"alternate\"\n href=\"${alt.uri}\"\n hreflang=\"${lang}\"\n type=\"${type}\"\n >${alt.label}</a\n >`;\n })\n );\n },\n };\n\n // insert into document\n const header = (conf.isCGBG ? cgbgHeadersTmpl : headersTmpl)(conf, options);\n document.body.prepend(header);\n document.body.classList.add(\"h-entry\");\n\n // handle SotD\n const sotd =\n document.getElementById(\"sotd\") || document.createElement(\"section\");\n if ((conf.isCGBG || !conf.isNoTrack || conf.isTagFinding) && !sotd.id) {\n const msg =\n \"A custom SotD paragraph is required for your type of document.\";\n showError(msg, name);\n }\n sotd.id = sotd.id || \"sotd\";\n sotd.classList.add(\"introductory\");\n // NOTE:\n // When arrays, wg and wgURI have to be the same length (and in the same order).\n // Technically wgURI could be longer but the rest is ignored.\n // However wgPatentURI can be shorter. This covers the case where multiple groups\n // publish together but some aren't used for patent policy purposes (typically this\n // happens when one is foolish enough to do joint work with the TAG). In such cases,\n // the groups whose patent policy applies need to be listed first, and wgPatentURI\n // can be shorter — but it still needs to be an array.\n const wgPotentialArray = [conf.wg, conf.wgURI, conf.wgPatentURI];\n if (\n wgPotentialArray.some(item => Array.isArray(item)) &&\n !wgPotentialArray.every(item => Array.isArray(item))\n ) {\n const msg =\n \"If one of '`wg`', '`wgURI`', or '`wgPatentURI`' is an array, they all have to be.\";\n showError(msg, name);\n }\n if (conf.isCGBG && !conf.wg) {\n const msg =\n \"[`wg`](https://github.com/w3c/respec/wiki/wg)\" +\n \" configuration option is required for this kind of document.\";\n showError(msg, name);\n }\n if (Array.isArray(conf.wg)) {\n conf.multipleWGs = conf.wg.length > 1;\n conf.wgHTML = htmlJoinAnd(conf.wg, (wg, idx) => {\n return html`the <a href=\"${conf.wgURI[idx]}\">${wg}</a>`;\n });\n const pats = [];\n for (let i = 0, n = conf.wg.length; i < n; i++) {\n pats.push(\n html`a\n <a href=\"${conf.wgPatentURI[i]}\" rel=\"disclosure\"\n >public list of any patent disclosures (${conf.wg[i]})</a\n >`\n );\n }\n conf.wgPatentHTML = htmlJoinAnd(pats);\n } else {\n conf.multipleWGs = false;\n if (conf.wg) {\n conf.wgHTML = html`the <a href=\"${conf.wgURI}\">${conf.wg}</a>`;\n }\n }\n if (conf.specStatus === \"PR\" && !conf.crEnd) {\n const msg =\n '`specStatus` is \"PR\" but no `crEnd` is specified (needed to indicate end of previous CR).';\n showError(msg, name);\n }\n\n if (conf.specStatus === \"CR\" && !conf.crEnd) {\n const msg =\n '`specStatus` is \"CR\", but no `crEnd` is specified in Respec config.';\n showError(msg, name);\n }\n conf.crEnd = validateDateAndRecover(conf, \"crEnd\");\n conf.humanCREnd = W3CDate.format(conf.crEnd);\n\n if (conf.specStatus === \"PR\" && !conf.prEnd) {\n const msg = `\\`specStatus\\` is \"PR\" but no \\`prEnd\\` is specified.`;\n showError(msg, name);\n }\n conf.prEnd = validateDateAndRecover(conf, \"prEnd\");\n conf.humanPREnd = W3CDate.format(conf.prEnd);\n\n if (conf.specStatus === \"PER\" && !conf.perEnd) {\n const msg = \"Status is PER but no perEnd is specified\";\n showError(msg, name);\n }\n conf.perEnd = validateDateAndRecover(conf, \"perEnd\");\n conf.humanPEREnd = W3CDate.format(conf.perEnd);\n\n const revisionTypes = [\"addition\", \"correction\"];\n if (\n conf.specStatus === \"REC\" &&\n conf.revisionTypes &&\n conf.revisionTypes.length > 0\n ) {\n const unknownRevisionType = conf.revisionTypes.find(\n x => !revisionTypes.includes(x)\n );\n if (unknownRevisionType) {\n const msg = `\\`specStatus\\` is \"REC\" with unknown revision type '${unknownRevisionType}'`;\n showError(msg, name);\n }\n if (conf.revisionTypes.includes(\"addition\") && !conf.updateableRec) {\n const msg = `\\`specStatus\\` is \"REC\" with proposed additions but the Rec is not marked as a allowing new features.`;\n showError(msg, name);\n }\n }\n\n if (\n conf.specStatus === \"REC\" &&\n conf.updateableRec &&\n conf.revisionTypes &&\n conf.revisionTypes.length > 0 &&\n !conf.revisedRecEnd\n ) {\n const msg = `\\`specStatus\\` is \"REC\" with proposed corrections or additions but no \\`revisedRecEnd\\` is specified.`;\n showError(msg, name);\n }\n conf.revisedRecEnd = validateDateAndRecover(conf, \"revisedRecEnd\");\n conf.humanRevisedRecEnd = W3CDate.format(conf.revisedRecEnd);\n\n conf.recNotExpected =\n conf.noRecTrack || conf.recNotExpected\n ? true\n : !conf.isRecTrack &&\n conf.maturity == \"WD\" &&\n conf.specStatus !== \"FPWD-NOTE\";\n if (conf.noRecTrack && recTrackStatus.includes(conf.specStatus)) {\n const msg = `Document configured as [\\`noRecTrack\\`](https://github.com/w3c/respec/wiki/noRecTrack), but its status (\"${conf.specStatus}\") puts it on the W3C Rec Track.`;\n const hint = `Status cannot be any of: ${recTrackStatus.join(\", \")}.`;\n showError(msg, name, { hint });\n }\n if (conf.isIGNote && !conf.charterDisclosureURI) {\n const msg =\n \"IG-NOTEs must link to charter's disclosure section using `charterDisclosureURI`.\";\n showError(msg, name);\n }\n if (!sotd.classList.contains(\"override\")) {\n html.bind(sotd)`${populateSoTD(conf, sotd)}`;\n }\n\n if (!conf.implementationReportURI && conf.isCR) {\n const msg =\n \"CR documents must have an [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).\";\n showError(msg, name);\n }\n if (!conf.implementationReportURI && conf.isPR) {\n const msg =\n \"PR documents should include an \" +\n \" [`implementationReportURI`](https://github.com/w3c/respec/wiki/implementationReportURI) that describes [implementation experience](https://www.w3.org/2019/Process-20190301/#implementation-experience).\";\n showWarning(msg, name);\n }\n\n // Requested by https://github.com/w3c/respec/issues/504\n // Makes a record of a few auto-generated things.\n pub(\"amend-user-config\", {\n publishISODate: conf.publishISODate,\n generatedSubtitle: `${conf.longStatus} ${conf.publishHumanDate}`,\n });\n}\n\nfunction validatePatentPolicies(conf) {\n if (!conf.wgPatentPolicy) return;\n\n const policies = new Set([].concat(conf.wgPatentPolicy));\n if (\n policies.size &&\n ![...policies].every(policy => patentPolicies.includes(policy))\n ) {\n const msg = `Invalid [\\`wgPatentPolicy\\`](https://respec.org/docs#wgPatentPolicy) value: \"${conf.wgPatentPolicy}\".`;\n const hint = `Please use one of: ${patentPolicies\n .map(p => `\\`${p}\\``)\n .join(\", \")} .`;\n showError(msg, name, { hint });\n }\n if (policies.size !== 1) {\n const msg =\n \"When collaborating across multiple groups, they must use the same patent policy.\";\n const hint = `Please check the patent policies of each group. The patent policies were: ${[\n ...policies,\n ].join(\", \")}.`;\n showError(msg, name, { hint });\n }\n // We take the first policy\n conf.wgPatentPolicy = [...policies][0];\n}\n\n/**\n * @param {*} conf\n * @param {HTMLElement} sotd\n */\nfunction populateSoTD(conf, sotd) {\n const options = {\n ...collectSotdContent(sotd, conf),\n\n get mailToWGPublicList() {\n return `mailto:${conf.wgPublicList}@w3.org`;\n },\n get mailToWGPublicListWithSubject() {\n const fragment = conf.subjectPrefix\n ? `?subject=${encodeURIComponent(conf.subjectPrefix)}`\n : \"\";\n return this.mailToWGPublicList + fragment;\n },\n get mailToWGPublicListSubscription() {\n return `mailto:${conf.wgPublicList}-request@w3.org?subject=subscribe`;\n },\n };\n const template = conf.isCGBG ? cgbgSotdTmpl : sotdTmpl;\n return template(conf, options);\n}\n\n/**\n * @param {HTMLElement} sotd\n */\nfunction collectSotdContent(sotd, { isTagFinding = false }) {\n const sotdClone = sotd.cloneNode(true);\n const additionalContent = document.createDocumentFragment();\n // we collect everything until we hit a section,\n // that becomes the custom content.\n while (sotdClone.hasChildNodes()) {\n if (\n isElement(sotdClone.firstChild) &&\n sotdClone.firstChild.localName === \"section\"\n ) {\n break;\n }\n additionalContent.appendChild(sotdClone.firstChild);\n }\n if (isTagFinding && !additionalContent.hasChildNodes()) {\n const msg = `ReSpec does not support automated SotD generation for TAG findings.`;\n const hint = `Please add the prerequisite content in the 'sotd' section.`;\n showWarning(msg, name, { hint });\n }\n return {\n additionalContent,\n // Whatever sections are left, we throw at the end.\n additionalSections: sotdClone.childNodes,\n };\n}\n\n/**\n * @param {string} orcid Either an ORCID URL or just the 16-digit ID which comes after the /\n * @return {string} the full ORCID URL. Throws an error if the ID is invalid.\n */\nfunction normalizeOrcid(orcid) {\n const orcidUrl = new URL(orcid, \"https://orcid.org/\");\n if (orcidUrl.origin !== \"https://orcid.org\") {\n throw new Error(\n `The origin should be \"https://orcid.org\", not \"${orcidUrl.origin}\".`\n );\n }\n\n // trailing slash would mess up checksum\n const orcidId = orcidUrl.pathname.slice(1).replace(/\\/$/, \"\");\n if (!/^\\d{4}-\\d{4}-\\d{4}-\\d{3}(\\d|X)$/.test(orcidId)) {\n throw new Error(\n `ORCIDs have the format \"1234-1234-1234-1234\", not \"${orcidId}\"`\n );\n }\n\n // calculate checksum as per https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier\n const lastDigit = orcidId[orcidId.length - 1];\n const remainder = orcidId\n .split(\"\")\n .slice(0, -1)\n .filter(c => /\\d/.test(c))\n .map(Number)\n .reduce((acc, c) => (acc + c) * 2, 0);\n const lastDigitInt = (12 - (remainder % 11)) % 11;\n const lastDigitShould = lastDigitInt === 10 ? \"X\" : String(lastDigitInt);\n if (lastDigit !== lastDigitShould) {\n throw new Error(`\"${orcidId}\" has an invalid checksum.`);\n }\n\n return orcidUrl.href;\n}\n\n/**\n * @param {Node} node\n * @return {node is Element}\n */\nfunction isElement(node) {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\nfunction hasGitHubIssuesLink(conf) {\n return (\n conf.github ||\n (conf.otherLinks &&\n conf.otherLinks.find(linkGroup =>\n linkGroup.data.find(\n l =>\n l.href &&\n l.href.toString().match(/^https:\\/\\/github\\.com\\/.*\\/issues/)\n )\n ))\n );\n}\n","// @ts-check\n/**\n * @typedef {object} LinterResult\n * @property {string} description\n * @property {string} help\n * @property {string} howToFix\n * @property {string} name\n * @property {number} occurrences\n * @property {HTMLElement[]} offendingElements\n *\n * @typedef {(conf: any, doc: Document) => (LinterResult | Promise<LinterResult>)} LintingFunction\n */\n\n/** @type {WeakMap<LinterRule, { name: string, lintingFunction: LintingFunction }>} */\nconst privs = new WeakMap();\n\n/**\n * Checks if the linter rule is enabled.\n *\n * @param {Object} conf ReSpec config object.\n * @param {string} name linter rule name\n */\nfunction canLint(conf, name) {\n return !(\n conf.hasOwnProperty(\"lint\") === false ||\n conf.lint === false ||\n !conf.lint[name]\n );\n}\n\nexport default class LinterRule {\n /**\n *\n * @param {String} name the name of the rule\n * @param {LintingFunction} lintingFunction\n */\n constructor(name, lintingFunction) {\n privs.set(this, { name, lintingFunction });\n }\n get name() {\n return privs.get(this).name;\n }\n /**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\n lint(conf = { lint: { [this.name]: false } }, doc = document) {\n if (canLint(conf, this.name)) {\n return privs.get(this).lintingFunction(conf, doc);\n }\n }\n}\n","// @ts-check\n/**\n * Linter rule \"check-charset\".\n *\n * Checks whether the document has `<meta charset=\"utf-8\">` properly.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-charset\";\nconst meta = {\n en: {\n description: `Document must only contain one \\`<meta>\\` tag with charset set to 'utf-8'`,\n howToFix: `Add this line in your document \\`<head>\\` section - \\`<meta charset=\"utf-8\">\\` or set charset to \"utf-8\" if not set already.`,\n },\n zh: {\n description: `文档只能包含一个 charset 属性为 utf-8 的 \\`<meta>\\` 标签`,\n howToFix: `将此行添加到文档的 \\`<head>\\` 部分—— \\`<meta charset=\"utf-8\">\\` 或将 charset 设置为 utf-8(如果尚未设置)。`,\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction linterFunction(_, doc) {\n const metas = doc.querySelectorAll(\"meta[charset]\");\n const val = [];\n for (const meta of metas) {\n val.push(meta.getAttribute(\"charset\").trim().toLowerCase());\n }\n const utfExists = val.includes(\"utf-8\");\n\n // only a single meta[charset] and is set to utf-8, correct case\n if (utfExists && metas.length === 1) {\n return [];\n }\n // if more than one meta[charset] tag defined along with utf-8\n // or\n // no meta[charset] present in the document\n return {\n name,\n occurrences: metas.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-internal-slots\".\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-internal-slots\";\n\nconst meta = {\n en: {\n description: \"Internal slots should be preceded by a '.'\",\n howToFix: \"Add a '.' between the elements mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"var+a\")].filter(\n ({ previousSibling: { nodeName } }) => {\n const isPrevVar = nodeName && nodeName === \"VAR\";\n return isPrevVar;\n }\n );\n\n if (!offendingElements.length) {\n return;\n }\n\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"check-punctuation\". Makes sure the there are no punctuations missing at the end of a <p>\n * in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"check-punctuation\";\nconst punctuationMarks = [\".\", \":\", \"!\", \"?\"];\nconst humanMarks = punctuationMarks.map(mark => `\"${mark}\"`).join(\", \");\nconst meta = {\n en: {\n description: \"`p` elements should end with a punctuation mark.\",\n howToFix: `Please make sure \\`p\\` elements end with one of: ${humanMarks}.`,\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction lintingFunction(_, doc) {\n // Check string ends with one of ., !, ?, :, ], or is empty.\n const punctuatingRegExp = new RegExp(\n `[${punctuationMarks.join(\"\")}\\\\]]$|^ *$`,\n \"m\"\n );\n const offendingElements = [\n ...doc.querySelectorAll(\"p:not(#back-to-top)\"),\n ].filter(elem => !punctuatingRegExp.test(elem.textContent.trim()));\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Module core/linter\n *\n * Core linter module. Exports a linter object.\n */\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/linter\";\n\n/** @type {WeakMap<Linter, { rules: Set<import(\"./LinterRule\").default> }>} */\nconst privates = new WeakMap();\n\nclass Linter {\n constructor() {\n privates.set(this, {\n rules: new Set(),\n });\n }\n get rules() {\n return privates.get(this).rules;\n }\n /**\n * @param {...import(\"./LinterRule\").default} newRules\n */\n register(...newRules) {\n newRules.forEach(newRule => this.rules.add(newRule));\n }\n async lint(conf, doc = window.document) {\n const promisesToLint = [...privates.get(this).rules].map(rule =>\n toLinterWarning(rule.lint(conf, doc))\n );\n await promisesToLint;\n }\n}\n\nconst linter = new Linter();\nexport default linter;\n\nconst baseResult = {\n name: \"unknown\",\n description: \"\",\n occurrences: 0,\n howToFix: \"\",\n offendingElements: [], // DOM Nodes\n help: \"\", // where to get help\n};\n\n/**\n * @typedef {import(\"./LinterRule\").LinterResult} LinterResult\n * @param {LinterResult | Promise<LinterResult>} [resultPromise]\n */\nasync function toLinterWarning(resultPromise) {\n const result = await resultPromise;\n if (!result) {\n return;\n }\n const output = { ...baseResult, ...result };\n const {\n description,\n help,\n howToFix,\n name: linterName,\n occurrences,\n offendingElements,\n } = output;\n const msg = offendingElements.length\n ? description\n : `${description} (Count: ${occurrences})`;\n const plugin = `${name}/${linterName}`;\n const hint = `${howToFix} ${help}`;\n showWarning(msg, plugin, { hint, elements: offendingElements });\n}\n\nexport function run(conf) {\n if (conf.lint === false) {\n return; // nothing to do\n }\n // return early, continue processing other things\n (async () => {\n await document.respec.ready;\n try {\n await linter.lint(conf, document);\n } catch (err) {\n console.error(\"Error ocurred while running the linter\", err);\n }\n })();\n}\n","// @ts-check\n/**\n * Linter rule \"warn-local-ref\".\n * Warns about href's that link to nonexistent id's in a spec\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"local-refs-exist\";\n\nconst meta = {\n en: {\n description: \"Broken local reference found in document.\",\n howToFix: \"Please fix the links mentioned.\",\n help: \"See developer console.\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} _ The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"a[href^='#']\")].filter(\n isBrokenHyperlink\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\nfunction isBrokenHyperlink(elem) {\n const id = elem.getAttribute(\"href\").substring(1);\n const doc = elem.ownerDocument;\n return !doc.getElementById(id) && !doc.getElementsByName(id).length;\n}\n","// @ts-check\n/**\n * Linter rule \"no-headingless-sections\".\n *\n * Checks that there are no sections in the document that don't start\n * with a heading element (h1-6).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nconst name = \"no-headingless-sections\";\nconst meta = {\n en: {\n description: \"All sections must start with a `h2-6` element.\",\n howToFix: \"Add a `h2-6` to the offending section or use a `<div>`.\",\n help: \"See developer console.\",\n },\n nl: {\n description: \"Alle secties moeten beginnen met een `h2-6` element.\",\n howToFix:\n \"Voeg een `h2-6` toe aan de conflicterende sectie of gebruik een `<div>`.\",\n help: \"Zie de developer console.\",\n },\n zh: {\n description: \"所有章节(section)都必须以 `h2-6` 元素开头。\",\n howToFix: \"将 `h2-6` 添加到有问题的章节或使用 `<div>`。\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\nconst hasNoHeading = ({ firstElementChild: elem }) => {\n return elem === null || /^h[1-6]$/.test(elem.localName) === false;\n};\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../../core/LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [...doc.querySelectorAll(\"section\")].filter(\n hasNoHeading\n );\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Linter rule \"no-http-props\". Makes sure the there are no URLs that\n * start with http:// in the ReSpec config.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\n\nconst name = \"no-http-props\";\n\nconst meta = {\n en: {\n description: \"Insecure URLs are not allowed in `respecConfig`.\",\n howToFix: \"Please change the following properties to 'https://': \",\n },\n zh: {\n description: \"`respecConfig` 中不允许使用不安全的URL.\",\n howToFix: \"请将以下属性更改为 https://:\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n *\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n */\nfunction lintingFunction(conf, doc) {\n // We can only really perform this check over http/https\n if (!doc.location.href.startsWith(\"http\")) {\n return;\n }\n const offendingMembers = Object.getOwnPropertyNames(conf)\n // this check is cheap, \"prevED\" is w3c exception.\n .filter(key => key.endsWith(\"URI\") || key === \"prevED\")\n // this check is expensive, so separate step\n .filter(key =>\n new URL(conf[key], doc.location.href).href.startsWith(\"http://\")\n );\n if (!offendingMembers.length) {\n return;\n }\n /** @type {import(\"../../core/LinterRule\").LinterResult} */\n const result = {\n name,\n occurrences: offendingMembers.length,\n ...meta[lang],\n };\n result.howToFix += `${offendingMembers\n .map(item => `\\`${item}\\``)\n .join(\", \")}.`;\n return result;\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Linter rule \"no-unused-vars\".\n *\n * Checks that an variable is used if declared (the first use is treated as\n * declaration).\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { norm } from \"../utils.js\";\n\nconst name = \"no-unused-vars\";\n\nconst meta = {\n en: {\n description: \"Variable was defined, but never used.\",\n howToFix: \"Add a `data-ignore-unused` attribute to the `<var>`.\",\n help: \"See developer console.\",\n },\n};\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * @param {*} _\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction linterFunction(_, doc) {\n const offendingElements = [];\n\n /**\n * Check if a <section> contains a `\".algorithm\"`\n *\n * The selector matches:\n * ``` html\n * <section><ul class=\"algorithm\"></ul></section>\n * <section><div><ul class=\"algorithm\"></ul></div></section>\n * ```\n * The selector does not match:\n * ``` html\n * <section><section><ul class=\"algorithm\"></ul></section></section>\n * ```\n * @param {HTMLElement} section\n */\n const sectionContainsAlgorithm = section =>\n !!section.querySelector(\n \":scope > :not(section) ~ .algorithm, :scope > :not(section) .algorithm\"\n );\n\n for (const section of doc.querySelectorAll(\"section\")) {\n if (!sectionContainsAlgorithm(section)) continue;\n\n /**\n * `<var>` in this section, but excluding those in child sections.\n * @type {NodeListOf<HTMLElement>}\n */\n const varElems = section.querySelectorAll(\":scope > :not(section) var\");\n if (!varElems.length) continue;\n\n /** @type {Map<string, HTMLElement[]>} */\n const varUsage = new Map();\n for (const varElem of varElems) {\n const key = norm(varElem.textContent);\n const elems = varUsage.get(key) || varUsage.set(key, []).get(key);\n elems.push(varElem);\n }\n\n for (const vars of varUsage.values()) {\n if (vars.length === 1 && !vars[0].hasAttribute(\"data-ignore-unused\")) {\n offendingElements.push(vars[0]);\n }\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n };\n}\nexport const rule = new LinterRule(name, linterFunction);\n","// @ts-check\n/**\n * Checks that there is a section that has at least privacy and/or\n * security and considerations.\n *\n * The rule is \"privacy\" or \"security\", and \"considerations\", in any order,\n * case-insensitive, multi-line check.\n *\n */\nimport LinterRule from \"../../core/LinterRule.js\";\nimport { lang as defaultLang } from \"../../core/l10n.js\";\nconst name = \"privsec-section\";\nconst meta = {\n en: {\n description:\n \"Document must a 'Privacy and/or Security' Considerations section.\",\n howToFix: \"Add a privacy and/or security considerations section.\",\n help:\n \"See the [Self-Review Questionnaire](https://w3ctag.github.io/security-questionnaire/).\",\n },\n};\n\n// Fall back to english, if language is missing\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\nfunction hasPriSecConsiderations(doc) {\n return Array.from(doc.querySelectorAll(\"h2, h3, h4, h5, h6\")).some(\n ({ textContent: text }) => {\n const saysPrivOrSec = /(privacy|security)/im.test(text);\n const saysConsiderations = /(considerations)/im.test(text);\n return (saysPrivOrSec && saysConsiderations) || saysPrivOrSec;\n }\n );\n}\n\n/**\n * @param {*} conf\n * @param {Document} doc\n * @return {import(\"../LinterRule\").LinterResult}\n */\nfunction lintingFunction(conf, doc) {\n if (conf.isRecTrack && !hasPriSecConsiderations(doc)) {\n return { name, occurrences: 1, ...meta[lang] };\n }\n}\n\nexport const rule = new LinterRule(name, lintingFunction);\n","// @ts-check\n/**\n * Sets the core defaults\n */\nexport const name = \"core/defaults\";\nimport { rule as checkCharset } from \"./linter-rules/check-charset.js\";\nimport { rule as checkInternalSlots } from \"./linter-rules/check-internal-slots.js\";\nimport { rule as checkPunctuation } from \"./linter-rules/check-punctuation.js\";\nimport linter from \"./linter.js\";\nimport { rule as localRefsExist } from \"./linter-rules/local-refs-exist.js\";\nimport { rule as noHeadinglessSectionsRule } from \"./linter-rules/no-headingless-sections.js\";\nimport { rule as noHttpPropsRule } from \"./linter-rules/no-http-props.js\";\nimport { rule as noUnusedVars } from \"./linter-rules/no-unused-vars.js\";\nimport { rule as privsecSection } from \"./linter-rules/privsec-section.js\";\n\nlinter.register(\n noHttpPropsRule,\n noHeadinglessSectionsRule,\n noUnusedVars,\n checkPunctuation,\n localRefsExist,\n checkInternalSlots,\n checkCharset,\n privsecSection\n);\n\nexport const coreDefaults = {\n lint: {\n \"no-headingless-sections\": true,\n \"no-http-props\": true,\n \"no-unused-vars\": false,\n \"check-punctuation\": false,\n \"local-refs-exist\": true,\n \"check-internal-slots\": false,\n \"check-charset\": false,\n \"privsec-section\": false,\n },\n pluralize: true,\n specStatus: \"base\",\n highlightVars: true,\n addSectionLinks: true,\n};\n","// @ts-check\n/**\n * Linter rule \"wpt-tests-exist\".\n * Warns about nonexistent web platform tests.\n */\nimport LinterRule from \"../LinterRule.js\";\nimport { lang as defaultLang } from \"../l10n.js\";\nimport { showWarning } from \"../utils.js\";\n\nconst name = \"wpt-tests-exist\";\n\nconst meta = {\n en: {\n description: \"Non-existent Web Platform Tests\",\n howToFix: \"Please fix the tests mentioned.\",\n help: \"See developer console.\",\n },\n};\n\nconst lang = defaultLang in meta ? defaultLang : \"en\";\n\n/**\n * Runs linter rule.\n * @param {Object} conf The ReSpec config.\n * @param {Document} doc The document to be checked.\n * @return {Promise<import(\"../LinterRule\").LinterResult>}\n */\nasync function linterFunction(conf, doc) {\n const filesInWPT = await getFilesInWPT(conf.testSuiteURI, conf.githubAPI);\n if (!filesInWPT) {\n return;\n }\n\n const offendingElements = [];\n const offendingTests = new Set();\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = doc.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n for (const elem of testables) {\n const tests = elem.dataset.tests\n .split(/,/gm)\n .map(test => test.trim().split(\"#\")[0])\n .filter(test => test);\n\n const missingTests = tests.filter(test => !filesInWPT.has(test));\n if (missingTests.length) {\n offendingElements.push(elem);\n missingTests.forEach(test => offendingTests.add(test));\n }\n }\n\n if (!offendingElements.length) {\n return;\n }\n\n const missingTests = [...offendingTests].map(test => `\\`${test}\\``);\n return {\n name,\n offendingElements,\n occurrences: offendingElements.length,\n ...meta[lang],\n description: `${meta[lang].description}: ${missingTests.join(\", \")}.`,\n };\n}\n\nexport const rule = new LinterRule(name, linterFunction);\n\n/**\n * @param {string} testSuiteURI\n * @param {string} githubAPIBase\n */\nasync function getFilesInWPT(testSuiteURI, githubAPIBase) {\n let wptDirectory;\n try {\n const testSuiteURL = new URL(testSuiteURI);\n if (\n testSuiteURL.pathname.startsWith(\"/web-platform-tests/wpt/tree/master/\")\n ) {\n const re = /web-platform-tests\\/wpt\\/tree\\/master\\/(.+)/;\n wptDirectory = testSuiteURL.pathname.match(re)[1].replace(/\\//g, \"\");\n } else {\n wptDirectory = testSuiteURL.pathname.replace(/\\//g, \"\");\n }\n } catch (error) {\n const msg = \"Failed to parse WPT directory from testSuiteURI\";\n showWarning(msg, `linter/${name}`);\n console.error(error);\n return null;\n }\n\n const url = new URL(\"web-platform-tests/wpt/files\", `${githubAPIBase}/`);\n url.searchParams.set(\"path\", wptDirectory);\n\n const response = await fetch(url);\n if (!response.ok) {\n const error = await response.text();\n const msg =\n \"Failed to fetch files from WPT repository. \" +\n `Request failed with error: ${error} (${response.status})`;\n showWarning(msg, `linter/${name}`);\n return null;\n }\n /** @type {{ entries: string[] }} */\n const { entries } = await response.json();\n const files = entries.filter(entry => !entry.endsWith(\"/\"));\n return new Set(files);\n}\n","// @ts-check\n/**\n * Sets the defaults for W3C specs\n */\nexport const name = \"w3c/defaults\";\nimport { bgStatus, cgStatus, cgbgStatus } from \"./headers.js\";\nimport { docLink, showError } from \"../core/utils.js\";\nimport { coreDefaults } from \"../core/defaults.js\";\nimport linter from \"../core/linter.js\";\nimport { rule as privsecSectionRule } from \"../core/linter-rules/privsec-section.js\";\nimport { rule as wptTestsExist } from \"../core/linter-rules/wpt-tests-exist.js\";\n\nlinter.register(privsecSectionRule, wptTestsExist);\n\nconst w3cLogo = {\n src: \"https://www.w3.org/StyleSheets/TR/2016/logos/W3C\",\n alt: \"W3C\",\n height: 48,\n width: 72,\n url: \"https://www.w3.org/\",\n};\n\nconst w3cDefaults = {\n lint: {\n \"privsec-section\": true,\n \"wpt-tests-exist\": false,\n },\n doJsonLd: false,\n logos: [],\n xref: true,\n};\n\nexport function run(conf) {\n // assign the defaults\n const lint =\n conf.lint === false\n ? false\n : {\n ...coreDefaults.lint,\n ...w3cDefaults.lint,\n ...conf.lint,\n };\n\n if (conf.specStatus && conf.specStatus.toLowerCase() !== \"unofficial\") {\n w3cDefaults.logos.push(w3cLogo);\n if (!conf.hasOwnProperty(\"license\")) {\n w3cDefaults.license = \"w3c-software-doc\";\n }\n }\n\n Object.assign(conf, {\n ...coreDefaults,\n ...w3cDefaults,\n ...conf,\n lint,\n });\n\n if (conf.groupType && conf.specStatus) {\n validateStatusForGroup(conf);\n }\n}\n\nfunction validateStatusForGroup(conf) {\n const { specStatus, groupType } = conf;\n switch (groupType) {\n case \"cg\": {\n if (![...cgbgStatus, \"unofficial\"].includes(specStatus)) {\n const msg = `W3C Community Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please use one of: ${toMDCode(\n cgStatus\n )}. Automatically falling back to \\`\"CG-DRAFT\"\\`.`;\n showError(msg, name, { hint });\n conf.specStatus = \"CG-DRAFT\";\n }\n break;\n }\n case \"bg\": {\n if (![...bgStatus, \"unofficial\"].includes(specStatus)) {\n const msg = `W3C Business Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please use one of: ${toMDCode(\n bgStatus\n )}. Automatically falling back to \\`\"BG-DRAFT\"\\`.`;\n showError(msg, name, { hint });\n conf.specStatus = \"BG-DRAFT\";\n }\n break;\n }\n case \"wg\": {\n if (cgbgStatus.includes(specStatus)) {\n const msg = `W3C Working Group documents can't use \\`\"${specStatus}\"\\` for the ${docLink(\n \"specStatus\"\n )} configuration option.`;\n const hint = `Please see ${docLink(\n \"specStatus\"\n )} for appropriate values for this type of group.`;\n showError(msg, name, { hint });\n }\n break;\n }\n }\n}\n\nfunction toMDCode(list) {\n return list.map(item => `\\`\"${item}\"\\``).join(\", \");\n}\n","/* ReSpec specific CSS */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n@keyframes pop {\n 0% {\n transform: scale(1, 1);\n }\n 25% {\n transform: scale(1.25, 1.25);\n opacity: 0.75;\n }\n 100% {\n transform: scale(1, 1);\n }\n}\n\n/* Override code highlighter background */\n.hljs {\n background: transparent !important;\n}\n\n/* --- INLINES --- */\nh1 abbr,\nh2 abbr,\nh3 abbr,\nh4 abbr,\nh5 abbr,\nh6 abbr,\na abbr {\n border: none;\n}\n\ndfn {\n font-weight: bold;\n}\n\na.internalDFN {\n color: inherit;\n border-bottom: 1px solid #99c;\n text-decoration: none;\n}\n\na.externalDFN {\n color: inherit;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\na.bibref {\n text-decoration: none;\n}\n\n.respec-offending-element:target {\n animation: pop 0.25s ease-in-out 0s 1;\n}\n\n.respec-offending-element,\na[href].respec-offending-element {\n text-decoration: red wavy underline;\n}\n@supports not (text-decoration: red wavy underline) {\n .respec-offending-element:not(pre) {\n display: inline-block;\n }\n .respec-offending-element {\n /* Red squiggly line */\n background: url(data:image/gif;base64,R0lGODdhBAADAPEAANv///8AAP///wAAACwAAAAABAADAEACBZQjmIAFADs=)\n bottom repeat-x;\n }\n}\n\n#references :target {\n background: #eaf3ff;\n animation: pop 0.4s ease-in-out 0s 1;\n}\n\ncite .bibref {\n font-style: normal;\n}\n\ncode {\n color: #c63501;\n}\n\nth code {\n color: inherit;\n}\n\na[href].orcid {\n padding-left: 4px;\n padding-right: 4px;\n}\n\na[href].orcid > svg {\n margin-bottom: -2px;\n}\n\n/* --- TOC --- */\n\n.toc a,\n.tof a {\n text-decoration: none;\n}\n\na .secno,\na .figno {\n color: #000;\n}\n\nul.tof,\nol.tof {\n list-style: none outside none;\n}\n\n.caption {\n margin-top: 0.5em;\n font-style: italic;\n}\n\n/* --- TABLE --- */\n\ntable.simple {\n border-spacing: 0;\n border-collapse: collapse;\n border-bottom: 3px solid #005a9c;\n}\n\n.simple th {\n background: #005a9c;\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th a {\n color: #fff;\n padding: 3px 5px;\n text-align: left;\n}\n\n.simple th[scope=\"row\"] {\n background: inherit;\n color: inherit;\n border-top: 1px solid #ddd;\n}\n\n.simple td {\n padding: 3px 10px;\n border-top: 1px solid #ddd;\n}\n\n.simple tr:nth-child(even) {\n background: #f0f6ff;\n}\n\n/* --- DL --- */\n\n.section dd > p:first-child {\n margin-top: 0;\n}\n\n.section dd > p:last-child {\n margin-bottom: 0;\n}\n\n.section dd {\n margin-bottom: 1em;\n}\n\n.section dl.attrs dd,\n.section dl.eldef dd {\n margin-bottom: 0;\n}\n\n#issue-summary > ul {\n column-count: 2;\n}\n\n#issue-summary li {\n list-style: none;\n display: inline-block;\n}\n\ndetails.respec-tests-details {\n margin-left: 1em;\n display: inline-block;\n vertical-align: top;\n}\n\ndetails.respec-tests-details > * {\n padding-right: 2em;\n}\n\ndetails.respec-tests-details[open] {\n z-index: 999999;\n position: absolute;\n border: thin solid #cad3e2;\n border-radius: 0.3em;\n background-color: white;\n padding-bottom: 0.5em;\n}\n\ndetails.respec-tests-details[open] > summary {\n border-bottom: thin solid #cad3e2;\n padding-left: 1em;\n margin-bottom: 1em;\n line-height: 2em;\n}\n\ndetails.respec-tests-details > ul {\n width: 100%;\n margin-top: -0.3em;\n}\n\ndetails.respec-tests-details > li {\n padding-left: 1em;\n}\n\na[href].self-link:hover {\n opacity: 1;\n text-decoration: none;\n background-color: transparent;\n}\n\nh2,\nh3,\nh4,\nh5,\nh6 {\n position: relative;\n}\n\naside.example .marker > a.self-link {\n color: inherit;\n}\n\nh2 > a.self-link,\nh3 > a.self-link,\nh4 > a.self-link,\nh5 > a.self-link,\nh6 > a.self-link {\n border: none;\n color: inherit;\n font-size: 83%;\n height: 2em;\n left: -1.6em;\n opacity: 0.5;\n position: absolute;\n text-align: center;\n text-decoration: none;\n top: 0;\n transition: opacity 0.2s;\n width: 2em;\n}\n\nh2 > a.self-link::before,\nh3 > a.self-link::before,\nh4 > a.self-link::before,\nh5 > a.self-link::before,\nh6 > a.self-link::before {\n content: \"§\";\n display: block;\n}\n\n@media (max-width: 767px) {\n dd {\n margin-left: 0;\n }\n\n /* Don't position self-link in headings off-screen */\n h2 > a.self-link,\n h3 > a.self-link,\n h4 > a.self-link,\n h5 > a.self-link,\n h6 > a.self-link {\n left: auto;\n top: auto;\n }\n}\n\n@media print {\n .removeOnSave {\n display: none;\n }\n}\n`;\n","// @ts-check\n// Module core/style\n// Inserts the CSS that ReSpec uses into the document.\n//\n// IMPORTANT NOTE\n// To add you own styles, create a plugin that declares the css as a dependency\n// and create a build of your new ReSpec profile.\n//\n// CONFIGURATION\n// - noReSpecCSS: if you're using a profile that loads this module but you don't want\n// the style, set this to true\nimport css from \"../styles/respec.css.js\";\n\nexport const name = \"core/style\";\n\n// Opportunistically inserts the style, with the chance to reduce some FOUC\nconst styleElement = insertStyle();\n\nfunction insertStyle() {\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"respec-mainstyle\";\n styleElement.textContent = css;\n document.head.appendChild(styleElement);\n return styleElement;\n}\n\nexport function run(conf) {\n if (conf.noReSpecCSS) {\n styleElement.remove();\n }\n}\n","// @ts-check\n// Module w3c/style\n// Inserts a link to the appropriate W3C style for the specification's maturity level.\n// CONFIGURATION\n// - specStatus: the short code for the specification's maturity level or type (required)\n\nimport {\n createResourceHint,\n linkCSS,\n showWarning,\n toKeyValuePairs,\n} from \"../core/utils.js\";\nimport { sub } from \"../core/pubsubhub.js\";\nexport const name = \"w3c/style\";\nfunction attachFixupScript(doc, version) {\n const script = doc.createElement(\"script\");\n if (location.hash) {\n script.addEventListener(\n \"load\",\n () => {\n window.location.href = location.hash;\n },\n { once: true }\n );\n }\n script.src = `https://www.w3.org/scripts/TR/${version}/fixup.js`;\n doc.body.appendChild(script);\n}\n\n/**\n * Make a best effort to attach meta viewport at the top of the head.\n * Other plugins might subsequently push it down, but at least we start\n * at the right place. When ReSpec exports the HTML, it again moves the\n * meta viewport to the top of the head - so to make sure it's the first\n * thing the browser sees. See js/ui/save-html.js.\n */\nfunction createMetaViewport() {\n const meta = document.createElement(\"meta\");\n meta.name = \"viewport\";\n const contentProps = {\n width: \"device-width\",\n \"initial-scale\": \"1\",\n \"shrink-to-fit\": \"no\",\n };\n meta.content = toKeyValuePairs(contentProps).replace(/\"/g, \"\");\n return meta;\n}\n\nfunction createBaseStyle() {\n const link = document.createElement(\"link\");\n link.rel = \"stylesheet\";\n link.href = \"https://www.w3.org/StyleSheets/TR/2016/base.css\";\n link.classList.add(\"removeOnSave\");\n return link;\n}\n\nfunction selectStyleVersion(styleVersion) {\n let version = \"\";\n switch (styleVersion) {\n case null:\n case true:\n version = \"2016\";\n break;\n default:\n if (styleVersion && !isNaN(styleVersion)) {\n version = styleVersion.toString().trim();\n }\n }\n return version;\n}\n\nfunction createResourceHints() {\n /** @type ResourceHintOption[] */\n const opts = [\n {\n hint: \"preconnect\", // for W3C styles and scripts.\n href: \"https://www.w3.org\",\n },\n {\n hint: \"preload\", // all specs need it, and we attach it on end-all.\n href: \"https://www.w3.org/scripts/TR/2016/fixup.js\",\n as: \"script\",\n },\n {\n hint: \"preload\", // all specs include on base.css.\n href: \"https://www.w3.org/StyleSheets/TR/2016/base.css\",\n as: \"style\",\n },\n {\n hint: \"preload\", // all specs show the logo.\n href: \"https://www.w3.org/StyleSheets/TR/2016/logos/W3C\",\n as: \"image\",\n },\n ];\n const resourceHints = document.createDocumentFragment();\n for (const link of opts.map(createResourceHint)) {\n resourceHints.appendChild(link);\n }\n return resourceHints;\n}\n// Collect elements for insertion (document fragment)\nconst elements = createResourceHints();\n\n// Opportunistically apply base style\nelements.appendChild(createBaseStyle());\nif (!document.head.querySelector(\"meta[name=viewport]\")) {\n // Make meta viewport the first element in the head.\n elements.prepend(createMetaViewport());\n}\n\ndocument.head.prepend(elements);\n\nfunction styleMover(linkURL) {\n return exportDoc => {\n const w3cStyle = exportDoc.querySelector(`head link[href=\"${linkURL}\"]`);\n exportDoc.querySelector(\"head\").append(w3cStyle);\n };\n}\n\nexport function run(conf) {\n if (!conf.specStatus) {\n const msg = \"`respecConfig.specStatus` missing. Defaulting to 'base'.\";\n conf.specStatus = \"base\";\n showWarning(msg, name);\n }\n\n let styleFile = \"W3C-\";\n\n // Figure out which style file to use.\n switch (conf.specStatus.toUpperCase()) {\n case \"CG-DRAFT\":\n case \"CG-FINAL\":\n case \"BG-DRAFT\":\n case \"BG-FINAL\":\n styleFile = conf.specStatus.toLowerCase();\n break;\n case \"FPWD\":\n case \"LC\":\n case \"WD-NOTE\":\n case \"LC-NOTE\":\n styleFile += \"WD\";\n break;\n case \"WG-NOTE\":\n case \"FPWD-NOTE\":\n styleFile += \"WG-NOTE.css\";\n break;\n case \"UNOFFICIAL\":\n styleFile += \"UD\";\n break;\n case \"FINDING\":\n case \"FINDING-DRAFT\":\n case \"BASE\":\n styleFile = \"base.css\";\n break;\n default:\n styleFile += conf.specStatus;\n }\n\n // Select between released styles and experimental style.\n const version = selectStyleVersion(conf.useExperimentalStyles || \"2016\");\n // Attach W3C fixup script after we are done.\n if (version && !conf.noToc) {\n sub(\n \"end-all\",\n () => {\n attachFixupScript(document, version);\n },\n { once: true }\n );\n }\n const finalVersionPath = version ? `${version}/` : \"\";\n const finalStyleURL = `https://www.w3.org/StyleSheets/TR/${finalVersionPath}${styleFile}`;\n linkCSS(document, finalStyleURL);\n // Make sure the W3C stylesheet is the last stylesheet, as required by W3C Pub Rules.\n const moveStyle = styleMover(finalStyleURL);\n sub(\"beforesave\", moveStyle);\n}\n","// @ts-check\n// Module w3c/l10n\n// Looks at the lang attribute on the root element and uses it to manage the config.l10n object so\n// that other parts of the system can localise their text\nimport { html } from \"../core/import-maps.js\";\nimport { l10n } from \"../core/l10n.js\";\nexport const name = \"w3c/l10n\";\nconst additions = {\n en: {\n status_at_publication: html`This section describes the status of this\n document at the time of its publication. Other documents may supersede\n this document. A list of current W3C publications and the latest revision\n of this technical report can be found in the\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> at\n https://www.w3.org/TR/.`,\n },\n ko: {\n status_at_publication: html`이 부분은 현재 문서의 발행 당시 상태에 대해\n 기술합니다. 다른 문서가 이 문서를 대체할 수 있습니다. W3C 발행 문서의 최신\n 목록 및 테크니컬 리포트 최신판을 https://www.w3.org/TR/ 의\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> 에서\n 열람할 수 있습니다.`,\n },\n zh: {\n status_at_publication: html`本章节描述了本文档的发布状态。其它更新版本可能会覆盖本文档。W3C的文档列\n 表和最新版本可通过<a href=\"https://www.w3.org/TR/\">W3C技术报告</a\n >索引访问。`,\n },\n ja: {\n status_at_publication: html`この節には、公開時点でのこの文書の位置づけが記されている。他の文書によって置き換えられる可能性がある。現時点でのW3Cの発行文書とこのテクニカルレポートの最新版は、下記から参照できる。\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a>\n (https://www.w3.org/TR/)`,\n },\n es: {\n status_at_publication: html`Esta sección describe el estado del presente\n documento al momento de su publicación. El presente documento puede ser\n remplazado por otros. Una lista de las publicaciones actuales del W3C y la\n última revisión del presente informe técnico puede hallarse en\n http://www.w3.org/TR/\n <a href=\"https://www.w3.org/TR/\">el índice de informes técnicos</a> del\n W3C.`,\n },\n de: {\n status_at_publication: html`Dieser Abschnitt beschreibt den Status des\n Dokuments zum Zeitpunkt der Publikation. Neuere Dokumente können dieses\n Dokument obsolet machen. Eine Liste der aktuellen Publikatinen des W3C und\n die aktuellste Fassung dieser Spezifikation kann im\n <a href=\"https://www.w3.org/TR/\">W3C technical reports index</a> unter\n https://www.w3.org/TR/ abgerufen werden.`,\n },\n};\n\nObject.keys(additions).forEach(key => {\n if (!l10n[key]) l10n[key] = {};\n Object.assign(l10n[key], additions[key]);\n});\n","// @ts-check\n/**\n * core/github\n *\n * @see https://github.com/w3c/respec/wiki/github\n */\n\nimport { getIntlData, showError, showWarning } from \"../core/utils.js\";\nexport const name = \"core/github\";\n\nlet resolveGithubPromise;\nlet rejectGithubPromise;\n/** @type {Promise<{ apiBase: string, fullName: string, branch: string, repoURL: string } | null>} */\nexport const github = new Promise((resolve, reject) => {\n resolveGithubPromise = resolve;\n rejectGithubPromise = message => {\n showError(message, name);\n reject(new Error(message));\n };\n});\n\nconst localizationStrings = {\n en: {\n file_a_bug: \"File a bug\",\n participate: \"Participate:\",\n commit_history: \"Commit history\",\n },\n ko: {\n participate: \"참여\",\n },\n zh: {\n file_a_bug: \"反馈错误\",\n participate: \"参与:\",\n },\n ja: {\n commit_history: \"変更履歴\",\n file_a_bug: \"問題報告\",\n participate: \"参加方法:\",\n },\n nl: {\n commit_history: \"Revisiehistorie\",\n file_a_bug: \"Dien een melding in\",\n participate: \"Doe mee:\",\n },\n es: {\n commit_history: \"Historia de cambios\",\n file_a_bug: \"Nota un bug\",\n participate: \"Participe:\",\n },\n de: {\n commit_history: \"Revisionen\",\n file_a_bug: \"Fehler melden\",\n participate: \"Mitmachen:\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n if (!conf.hasOwnProperty(\"github\") || !conf.github) {\n // nothing to do, bail out.\n resolveGithubPromise(null);\n return;\n }\n if (\n typeof conf.github === \"object\" &&\n !conf.github.hasOwnProperty(\"repoURL\")\n ) {\n const msg =\n \"Config option `[github](https://github.com/w3c/respec/wiki/github)` \" +\n \"is missing property `repoURL`.\";\n rejectGithubPromise(msg);\n return;\n }\n let tempURL = conf.github.repoURL || conf.github;\n if (!tempURL.endsWith(\"/\")) tempURL += \"/\";\n let ghURL;\n try {\n ghURL = new URL(tempURL, \"https://github.com\");\n } catch {\n const msg = `\\`respecConf.github\\` is not a valid URL? (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n if (ghURL.origin !== \"https://github.com\") {\n const msg = `\\`respecConf.github\\` must be HTTPS and pointing to GitHub. (${ghURL})`;\n rejectGithubPromise(msg);\n return;\n }\n const [org, repo] = ghURL.pathname.split(\"/\").filter(item => item);\n if (!org || !repo) {\n const msg =\n \"`respecConf.github` URL needs a path with, for example, w3c/my-spec\";\n rejectGithubPromise(msg);\n return;\n }\n const branch = conf.github.branch || \"gh-pages\";\n const issueBase = new URL(\"./issues/\", ghURL).href;\n const newProps = {\n edDraftURI: `https://${org.toLowerCase()}.github.io/${repo}/`,\n githubToken: undefined,\n githubUser: undefined,\n issueBase,\n atRiskBase: issueBase,\n otherLinks: [],\n pullBase: new URL(\"./pulls/\", ghURL).href,\n shortName: repo,\n };\n const otherLink = {\n key: l10n.participate,\n data: [\n {\n value: `GitHub ${org}/${repo}`,\n href: ghURL,\n },\n {\n value: l10n.file_a_bug,\n href: newProps.issueBase,\n },\n {\n value: l10n.commit_history,\n href: new URL(`./commits/${branch}`, ghURL.href).href,\n },\n {\n value: \"Pull requests\",\n href: newProps.pullBase,\n },\n ],\n };\n // Assign new properties, but retain existing ones\n let githubAPI = \"https://respec.org/github\";\n if (conf.githubAPI) {\n if (new URL(conf.githubAPI).hostname === window.parent.location.hostname) {\n // for testing\n githubAPI = conf.githubAPI;\n } else {\n const msg = \"`respecConfig.githubAPI` should not be added manually.\";\n showWarning(msg, name);\n }\n }\n const normalizedGHObj = {\n branch,\n repoURL: ghURL.href,\n apiBase: githubAPI,\n fullName: `${org}/${repo}`,\n };\n resolveGithubPromise(normalizedGHObj);\n\n const normalizedConfig = {\n ...newProps,\n ...conf,\n github: normalizedGHObj,\n githubAPI,\n };\n Object.assign(conf, normalizedConfig);\n conf.otherLinks.unshift(otherLink);\n}\n","// @ts-check\n// Module core/data-include\n// Support for the data-include attribute. Causes external content to be included inside an\n// element that has data-include='some URI'. There is also a data-oninclude attribute that\n// features a white space separated list of global methods that will be called with the\n// module object, the content, and the included URI.\n//\n// IMPORTANT:\n// This module only really works when you are in an HTTP context, and will most likely\n// fail if you are editing your documents on your local drive. That is due to security\n// restrictions in the browser.\nimport { markdownToHtml, restructure } from \"./markdown.js\";\nimport { runTransforms, showError } from \"./utils.js\";\n\nexport const name = \"core/data-include\";\n\n/**\n * @param {HTMLElement} el\n * @param {string} data\n * @param {object} options\n * @param {boolean} options.replace\n */\nfunction fillWithText(el, data, { replace }) {\n const { includeFormat } = el.dataset;\n let fill = data;\n if (includeFormat === \"markdown\") {\n fill = markdownToHtml(fill);\n }\n\n if (includeFormat === \"text\") {\n el.textContent = fill;\n } else {\n el.innerHTML = fill;\n }\n\n if (includeFormat === \"markdown\") {\n restructure(el);\n }\n\n if (replace) {\n el.replaceWith(...el.childNodes);\n }\n}\n\n/**\n * @param {string} rawData\n * @param {string} id\n * @param {string} url\n */\nfunction processResponse(rawData, id, url) {\n /** @type {HTMLElement} */\n const el = document.querySelector(`[data-include-id=${id}]`);\n const data = runTransforms(rawData, el.dataset.oninclude, url);\n const replace = typeof el.dataset.includeReplace === \"string\";\n fillWithText(el, data, { replace });\n // If still in the dom tree, clean up\n if (!replace) {\n removeIncludeAttributes(el);\n }\n}\n/**\n * Removes attributes after they are used for inclusion, if present.\n *\n * @param {Element} el The element to clean up.\n */\nfunction removeIncludeAttributes(el) {\n [\n \"data-include\",\n \"data-include-format\",\n \"data-include-replace\",\n \"data-include-id\",\n \"oninclude\",\n ].forEach(attr => el.removeAttribute(attr));\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const includables = document.querySelectorAll(\"[data-include]\");\n\n const promisesToInclude = Array.from(includables).map(async el => {\n const url = el.dataset.include;\n if (!url) {\n return; // just skip it\n }\n const id = `include-${String(Math.random()).substr(2)}`;\n el.dataset.includeId = id;\n try {\n const response = await fetch(url);\n const text = await response.text();\n processResponse(text, id, url);\n } catch (err) {\n const msg = `\\`data-include\\` failed: \\`${url}\\` (${err.message}).`;\n console.error(msg, el, err);\n showError(msg, name, { elements: [el] });\n }\n });\n await Promise.all(promisesToInclude);\n}\n","/**\n * This module handles the creation of the h1#title of a spec and\n * makes sure the <title> always matches the h1.\n *\n * If no h1#title is included, then the <title> becomes the h1#title.\n *\n * When a h1#title is included, it always takes precedence over the\n * <title> of a spec. An error will be displayed in case of\n * any mismatch.\n *\n */\n\nimport { getIntlData, norm, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/title\";\n\nconst localizationStrings = {\n en: {\n default_title: \"No Title\",\n },\n de: {\n default_title: \"Kein Titel\",\n },\n zh: {\n default_title: \"无标题\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n /** @type {HTMLElement} */\n const h1Elem =\n document.querySelector(\"h1#title\") || html`<h1 id=\"title\"></h1>`;\n\n // check existing element is ok to use\n if (h1Elem.isConnected && h1Elem.textContent.trim() === \"\") {\n const msg =\n \"The document is missing a title, so using a default title. \" +\n \"To fix this, please give your document a `<title>`. \" +\n \"If you need special markup in the document's title, \" +\n 'please use a `<h1 id=\"title\">`.';\n const title = \"Document is missing a title\";\n showError(msg, name, { title, elements: [h1Elem] });\n }\n\n // Decorate the spec title\n if (!h1Elem.id) h1Elem.id = \"title\";\n h1Elem.classList.add(\"title\");\n\n setDocumentTitle(conf, h1Elem);\n\n // This will get relocated by a template later.\n document.body.prepend(h1Elem);\n}\n\nfunction setDocumentTitle(conf, h1Elem) {\n // If the h1 is newly created, it won't be connected. In this case\n // we use the <title> or a localized fallback.\n if (!h1Elem.isConnected) {\n h1Elem.textContent = document.title || `${l10n.default_title}`;\n }\n\n let documentTitle = norm(h1Elem.textContent);\n\n if (conf.isPreview && conf.prNumber) {\n const prUrl = conf.prUrl || `${conf.github.repoURL}pull/${conf.prNumber}`;\n const { childNodes } = html`\n Preview of PR <a href=\"${prUrl}\">#${conf.prNumber}</a>:\n `;\n h1Elem.prepend(...childNodes);\n documentTitle = `Preview of PR #${conf.prNumber}: ${documentTitle}`;\n }\n\n document.title = documentTitle;\n\n // conf.title is deperecated - we are keeping this here just to\n // retain backwards compat as we think the ePub generator\n // relies on it.\n conf.title = documentTitle;\n}\n","/**\n * This module updates the title and shortName\n * of a spec when there is a valid level configuration.\n *\n * Levels should be integers >= 0.\n */\n\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"w3c/level\";\n\nconst localizationStrings = {\n en: {\n level: \"Level\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run(conf) {\n if (!conf.hasOwnProperty(\"level\")) return;\n\n const h1Elem = document.querySelector(\"h1#title\");\n\n const level = parseInt(conf.level);\n if (!Number.isInteger(level) || level < 0) {\n const msg = `The \\`level\\` configuration option must be a number greater or equal to 0. It is currently set to \\`${level}\\``;\n const title = \"Invalid level config.\";\n showError(msg, name, { title, elements: [h1Elem] });\n return;\n }\n\n h1Elem.append(` ${l10n.level} ${level}`);\n document.title = `${document.title} ${l10n.level} ${level}`;\n conf.shortName = `${conf.shortName}-${level}`;\n conf.level = level;\n}\n","// @ts-check\n// Module w3c/abstract\n// Handle the abstract section properly.\nimport { getIntlData, showError } from \"../core/utils.js\";\nexport const name = \"w3c/abstract\";\n\nconst localizationStrings = {\n en: {\n abstract: \"Abstract\",\n },\n ko: {\n abstract: \"요약\",\n },\n zh: {\n abstract: \"摘要\",\n },\n ja: {\n abstract: \"要約\",\n },\n nl: {\n abstract: \"Samenvatting\",\n },\n es: {\n abstract: \"Resumen\",\n },\n de: {\n abstract: \"Zusammenfassung\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run() {\n const abs = document.getElementById(\"abstract\");\n if (!abs) {\n const msg = 'Document must have one element with `id=\"abstract\"`.';\n showError(msg, name);\n return;\n }\n abs.classList.add(\"introductory\");\n let abstractHeading = document.querySelector(\"#abstract>h2\");\n if (abstractHeading) {\n return;\n }\n abstractHeading = document.createElement(\"h2\");\n abstractHeading.textContent = l10n.abstract;\n abs.prepend(abstractHeading);\n}\n","// @ts-check\n// Module core/data-transform\n// Support for the data-transform attribute\n// Any element in the tree that has a data-transform attribute is processed here.\n// The data-transform attribute can contain a white space separated list of functions\n// to call (these must have been defined globally). Each is called with a reference to\n// the core/utils plugin and the innerHTML of the element. The output of each is fed\n// as the input to the next, and the output of the last one replaces the HTML content\n// of the element.\n// IMPORTANT:\n// It is unlikely that you should use this module. The odds are that unless you really\n// know what you are doing, you should be using a dedicated module instead. This feature\n// is not actively supported and support for it may be dropped. It is not accounted for\n// in the test suite, and therefore could easily break.\nimport { runTransforms } from \"./utils.js\";\n\nexport const name = \"core/data-transform\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const transformables = document.querySelectorAll(\"[data-transform]\");\n transformables.forEach(el => {\n el.innerHTML = runTransforms(el.innerHTML, el.dataset.transform);\n el.removeAttribute(\"data-transform\");\n });\n}\n","// @ts-check\n// Module core/data-abbr\n// - Finds all elements with data-abbr attribute and processes them.\nimport { showError } from \"./utils.js\";\nexport const name = \"core/dfn-abbr\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elements = document.querySelectorAll(\"[data-abbr]\");\n for (const elem of elements) {\n const { localName } = elem;\n switch (localName) {\n case \"dfn\":\n processDfnElement(elem);\n break;\n default: {\n const msg = `\\`data-abbr\\` attribute not supported on \\`${localName}\\` elements.`;\n showError(msg, name, {\n elements: [elem],\n title: \"Error: unsupported.\",\n });\n }\n }\n }\n}\n/**\n * @param {HTMLElement} dfn\n */\nfunction processDfnElement(dfn) {\n const abbr = generateAbbreviation(dfn);\n // get normalized <dfn> textContent to remove spaces, tabs, new lines.\n const fullForm = dfn.textContent.replace(/\\s\\s+/g, \" \").trim();\n dfn.insertAdjacentHTML(\n \"afterend\",\n ` (<abbr title=\"${fullForm}\">${abbr}</abbr>)`\n );\n const lt = dfn.dataset.lt || \"\";\n dfn.dataset.lt = lt\n .split(\"|\")\n .filter(i => i.trim())\n .concat(abbr)\n .join(\"|\");\n}\n\nfunction generateAbbreviation(elem) {\n if (elem.dataset.abbr) return elem.dataset.abbr;\n // Generates abbreviation from textContent\n // e.g., \"Permanent Account Number\" -> \"PAN\"\n return elem.textContent\n .match(/\\b([a-z])/gi)\n .join(\"\")\n .toUpperCase();\n}\n","// @ts-check\n// Parses an inline IDL string (`{{ idl string }}`)\n// and renders its components as HTML\n\nimport { htmlJoinComma, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst idlPrimitiveRegex = /^[a-z]+(\\s+[a-z]+)+$/; // {{unrestricted double}} {{ double }}\nconst exceptionRegex = /\\B\"([^\"]*)\"\\B/; // {{ \"SomeException\" }}\nconst methodRegex = /(\\w+)\\((.*)\\)$/;\nconst slotRegex = /^\\[\\[(\\w+)\\]\\]$/;\n// matches: `value` or `[[value]]`\n// NOTE: [[value]] is actually a slot, but database has this as type=\"attribute\"\nconst attributeRegex = /^((?:\\[\\[)?(?:\\w+)(?:\\]\\])?)$/;\nconst enumRegex = /^(\\w+)\\[\"([\\w- ]*)\"\\]$/;\n// TODO: const splitRegex = /(?<=\\]\\]|\\b)\\./\n// https://github.com/w3c/respec/pull/1848/files#r225087385\nconst methodSplitRegex = /\\.?(\\w+\\(.*\\)$)/;\n\n/**\n * @typedef {object} IdlBase\n * @property {\"base\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlAttribute\n * @property {\"attribute\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlInternalSlot\n * @property {\"internal-slot\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlMethod\n * @property {\"method\"} type\n * @property {string} identifier\n * @property {string[]} args\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlEnum\n * @property {\"enum\"} type\n * @property {string} [identifier]\n * @property {string} enumValue\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlException\n * @property {\"exception\"} type\n * @property {string} identifier\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {object} IdlPrimitive\n * @property {\"idl-primitive\"} type\n * @property {string} identifier\n * @property {boolean} renderParent\n * @property {InlineIdl | null} [parent]\n *\n * @typedef {IdlBase | IdlAttribute | IdlInternalSlot | IdlMethod | IdlEnum | IdlException | IdlPrimitive} InlineIdl\n */\n\n/**\n * @param {string} str\n * @returns {InlineIdl[]}\n */\nfunction parseInlineIDL(str) {\n const [nonMethodPart, methodPart] = str.split(methodSplitRegex);\n const tokens = nonMethodPart\n .split(/[./]/)\n .concat(methodPart)\n .filter(s => s && s.trim())\n .map(s => s.trim());\n const renderParent = !str.includes(\"/\");\n /** @type {InlineIdl[]} */\n const results = [];\n while (tokens.length) {\n const value = tokens.pop();\n // Method\n if (methodRegex.test(value)) {\n const [, identifier, allArgs] = value.match(methodRegex);\n const args = allArgs.split(/,\\s*/).filter(arg => arg);\n results.push({ type: \"method\", identifier, args, renderParent });\n continue;\n }\n // Enum[\"enum value\"]\n if (enumRegex.test(value)) {\n const [, identifier, enumValue] = value.match(enumRegex);\n results.push({ type: \"enum\", identifier, enumValue, renderParent });\n continue;\n }\n // Exception - \"NotAllowedError\"\n // Or alternate enum syntax: {{ EnumContainer / \"some enum value\" }}\n if (exceptionRegex.test(value)) {\n const [, identifier] = value.match(exceptionRegex);\n if (renderParent) {\n results.push({ type: \"exception\", identifier });\n } else {\n results.push({ type: \"enum\", enumValue: identifier, renderParent });\n }\n continue;\n }\n // internal slot\n if (slotRegex.test(value)) {\n const [, identifier] = value.match(slotRegex);\n results.push({ type: \"internal-slot\", identifier, renderParent });\n continue;\n }\n // attribute\n if (attributeRegex.test(value) && tokens.length) {\n const [, identifier] = value.match(attributeRegex);\n results.push({ type: \"attribute\", identifier, renderParent });\n continue;\n }\n if (idlPrimitiveRegex.test(value)) {\n results.push({ type: \"idl-primitive\", identifier: value, renderParent });\n continue;\n }\n // base, always final token\n if (attributeRegex.test(value) && tokens.length === 0) {\n results.push({ type: \"base\", identifier: value, renderParent });\n continue;\n }\n throw new SyntaxError(`IDL micro-syntax parsing error in \\`{{ ${str} }}\\``);\n }\n // link the list\n results.forEach((item, i, list) => {\n item.parent = list[i + 1] || null;\n });\n // return them in the order we found them...\n return results.reverse();\n}\n\n/**\n * @param {IdlBase} details\n */\nfunction renderBase(details) {\n // Check if base is a local variable in a section\n const { identifier, renderParent } = details;\n if (renderParent) {\n return html`<a data-xref-type=\"_IDL_\" data-link-type=\"idl\"\n ><code>${identifier}</code></a\n >`;\n }\n}\n\n/**\n * Internal slot: .[[identifier]] or [[identifier]]\n * @param {IdlInternalSlot} details\n */\nfunction renderInternalSlot(details) {\n const { identifier, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const lt = `[[${identifier}]]`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-xref-type=\"attribute\"\n data-link-for=${linkFor}\n data-xref-for=${linkFor}\n data-lt=\"${lt}\"\n ><code>[[${identifier}]]</code></a\n >`;\n return element;\n}\n\n/**\n * Attribute: .identifier\n * @param {IdlAttribute} details\n */\nfunction renderAttribute(details) {\n const { parent, identifier, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const element = html`${renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"attribute|dict-member\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Method: .identifier(arg1, arg2, ...), identifier(arg1, arg2, ...)\n * @param {IdlMethod} details\n */\nfunction renderMethod(details) {\n const { args, identifier, type, parent, renderParent } = details;\n const { identifier: linkFor } = parent || {};\n const argsText = htmlJoinComma(args, arg => html`<var>${arg}</var>`);\n const searchText = `${identifier}(${args.join(\", \")})`;\n const element = html`${parent && renderParent ? \".\" : \"\"}<a\n data-link-type=\"idl\"\n data-xref-type=\"${type}\"\n data-link-for=\"${linkFor}\"\n data-xref-for=\"${linkFor}\"\n data-lt=\"${searchText}\"\n ><code>${identifier}</code></a\n ><code>(${argsText})</code>`;\n return element;\n}\n\n/**\n * Enum:\n * Identifier[\"enum value\"]\n * Identifer / \"enum value\"\n * @param {IdlEnum} details\n */\nfunction renderEnum(details) {\n const { identifier, enumValue, parent } = details;\n const forContext = parent ? parent.identifier : identifier;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-xref-type=\"enum-value\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${!enumValue ? \"the-empty-string\" : null}\"\n ><code>${enumValue}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Exception value: \"NotAllowedError\"\n * Only the WebIDL spec can define exceptions\n * @param {IdlException} details\n */\nfunction renderException(details) {\n const { identifier } = details;\n const element = html`\"<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"exception\"\n ><code>${identifier}</code></a\n >\"`;\n return element;\n}\n\n/**\n * Interface types: {{ unrestricted double }} {{long long}}\n * Only the WebIDL spec defines these types.\n * @param {IdlPrimitive} details\n */\nfunction renderIdlPrimitiveType(details) {\n const { identifier } = details;\n const element = html`<a\n data-link-type=\"idl\"\n data-cite=\"WebIDL\"\n data-xref-type=\"interface\"\n ><code>${identifier}</code></a\n >`;\n return element;\n}\n\n/**\n * Generates HTML by parsing an IDL string\n * @param {String} str IDL string\n * @return {Node} html output\n */\nexport function idlStringToHtml(str) {\n let results;\n try {\n results = parseInlineIDL(str);\n } catch (error) {\n const el = html`<span>{{ ${str} }}</span>`;\n const title = \"Error: Invalid inline IDL string.\";\n showError(error.message, \"core/inlines\", { title, elements: [el] });\n return el;\n }\n const render = html(document.createDocumentFragment());\n const output = [];\n for (const details of results) {\n switch (details.type) {\n case \"base\": {\n const base = renderBase(details);\n if (base) output.push(base);\n break;\n }\n case \"attribute\":\n output.push(renderAttribute(details));\n break;\n case \"internal-slot\":\n output.push(renderInternalSlot(details));\n break;\n case \"method\":\n output.push(renderMethod(details));\n break;\n case \"enum\":\n output.push(renderEnum(details));\n break;\n case \"exception\":\n output.push(renderException(details));\n break;\n case \"idl-primitive\":\n output.push(renderIdlPrimitiveType(details));\n break;\n default:\n throw new Error(\"Unknown type.\");\n }\n }\n const result = render`${output}`;\n return result;\n}\n","// @ts-check\n/**\n * Module core/biblio-db\n *\n * Wraps IndexedDB, allowing the storage of references and aliases on the\n * client.\n *\n * It's a standalone module that can be imported into other modules.\n *\n */\nimport { idb } from \"./import-maps.js\";\n\nexport const name = \"core/biblio-db\";\n\n/**\n * @typedef {keyof BiblioDb} AllowedType\n * @type {Set<AllowedType>}\n */\nconst ALLOWED_TYPES = new Set([\"alias\", \"reference\"]);\n/* Database initialization tracker */\nconst readyPromise = openIdb();\n\n/**\n * @typedef {object} BiblioDb\n *\n * @property {object} alias Object store for alias objects\n * @property {string} alias.key\n * @property {object} alias.value\n * @property {object} alias.indexes\n * @property {string} alias.aliasOf\n *\n * @property {object} reference Object store for reference objects\n * @property {string} reference.key\n * @property {object} reference.value\n *\n * @returns {Promise<import(\"idb\").IDBPDatabase<BiblioDb>>}\n */\nasync function openIdb() {\n return await idb.openDB(\"respec-biblio2\", 12, {\n upgrade(db) {\n Array.from(db.objectStoreNames).map(storeName =>\n db.deleteObjectStore(storeName)\n );\n const store = db.createObjectStore(\"alias\", { keyPath: \"id\" });\n store.createIndex(\"aliasOf\", \"aliasOf\", { unique: false });\n db.createObjectStore(\"reference\", { keyPath: \"id\" });\n },\n });\n}\n\nexport const biblioDB = {\n get ready() {\n return readyPromise;\n },\n /**\n * Finds either a reference or an alias.\n * If it's an alias, it resolves it.\n *\n * @param {String} id The reference or alias to look for.\n * @return {Promise<Object?>} The reference or null.\n */\n async find(id) {\n if (await this.isAlias(id)) {\n id = await this.resolveAlias(id);\n }\n return await this.get(\"reference\", id);\n },\n /**\n * Checks if the database has an id for a given type.\n *\n * @param {AllowedType} type One of the ALLOWED_TYPES.\n * @param {String} id The reference to find.\n * @return {Promise<Boolean>} True if it has it, false otherwise.\n */\n async has(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return !!result;\n },\n /**\n * Checks if a given id is an alias.\n *\n * @param {String} id The reference to check.\n * @return {Promise<Boolean>} Resolves with true if found.\n */\n async isAlias(id) {\n return await this.has(\"alias\", id);\n },\n /**\n * Resolves an alias to its corresponding reference id.\n *\n * @param {String} id The id of the alias to look up.\n * @return {Promise<String>} The id of the resolved reference.\n */\n async resolveAlias(id) {\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n\n const objectStore = db.transaction(\"alias\", \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value.aliasOf : result;\n },\n /**\n * Get a reference or alias out of the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {string} id The id for what to look up.\n * @return {Promise<Object?>} Resolves with the retrieved object, or null.\n */\n async get(type, id) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (!id) {\n throw new TypeError(\"id is required\");\n }\n const db = await this.ready;\n const objectStore = db.transaction(type, \"readonly\").store;\n const range = IDBKeyRange.only(id);\n const result = await objectStore.openCursor(range);\n return result ? result.value : result;\n },\n /**\n * Adds references and aliases to database. This is usually the data from\n * Specref's output (parsed JSON).\n *\n * @param {Object} data An object that contains references and aliases.\n */\n async addAll(data) {\n if (!data) {\n return;\n }\n const aliasesAndRefs = { alias: [], reference: [] };\n for (const id of Object.keys(data)) {\n const obj = { id, ...data[id] };\n if (obj.aliasOf) {\n aliasesAndRefs.alias.push(obj);\n } else {\n aliasesAndRefs.reference.push(obj);\n }\n }\n const promisesToAdd = [...ALLOWED_TYPES].flatMap(type => {\n return aliasesAndRefs[type].map(details => this.add(type, details));\n });\n await Promise.all(promisesToAdd);\n },\n /**\n * Adds a reference or alias to the database.\n *\n * @param {AllowedType} type The type as per ALLOWED_TYPES.\n * @param {Object} details The object to store.\n */\n async add(type, details) {\n if (!ALLOWED_TYPES.has(type)) {\n throw new TypeError(`Invalid type: ${type}`);\n }\n if (typeof details !== \"object\") {\n throw new TypeError(\"details should be an object\");\n }\n if (type === \"alias\" && !details.hasOwnProperty(\"aliasOf\")) {\n throw new TypeError(\"Invalid alias object.\");\n }\n const db = await this.ready;\n const isInDB = await this.has(type, details.id);\n const store = db.transaction(type, \"readwrite\").store;\n // update or add, depending of already having it in db\n return isInDB ? await store.put(details) : await store.add(details);\n },\n /**\n * Closes the underlying database.\n *\n * @return {Promise<void>} Resolves after database closes.\n */\n async close() {\n const db = await this.ready;\n db.close();\n },\n\n /**\n * Clears the underlying database\n */\n async clear() {\n const db = await this.ready;\n const storeNames = [...ALLOWED_TYPES];\n const stores = db.transaction(storeNames, \"readwrite\");\n const clearStorePromises = storeNames.map(name => {\n return stores.objectStore(name).clear();\n });\n await Promise.all(clearStorePromises);\n },\n};\n","// @ts-check\n// Module core/biblio\n// Pre-processes bibliographic references\n// Configuration:\n// - localBiblio: override or supplement the official biblio with your own.\n\nimport { biblioDB } from \"./biblio-db.js\";\nimport { createResourceHint } from \"./utils.js\";\n\n/** @type {Conf['biblio']} */\nexport const biblio = {};\n\nexport const name = \"core/biblio\";\n\nconst bibrefsURL = new URL(\"https://api.specref.org/bibrefs?refs=\");\n\n// Opportunistically dns-prefetch to bibref server, as we don't know yet\n// if we will actually need to download references yet.\nconst link = createResourceHint({\n hint: \"dns-prefetch\",\n href: bibrefsURL.origin,\n});\ndocument.head.appendChild(link);\nlet doneResolver;\n\n/** @type {Promise<Conf['biblio']>} */\nconst done = new Promise(resolve => {\n doneResolver = resolve;\n});\n\nexport async function updateFromNetwork(\n refs,\n options = { forceUpdate: false }\n) {\n const refsToFetch = [...new Set(refs)].filter(ref => ref.trim());\n // Update database if needed, if we are online\n if (!refsToFetch.length || navigator.onLine === false) {\n return null;\n }\n let response;\n try {\n response = await fetch(bibrefsURL.href + refsToFetch.join(\",\"));\n } catch (err) {\n console.error(err);\n return null;\n }\n if ((!options.forceUpdate && !response.ok) || response.status !== 200) {\n return null;\n }\n /** @type {Conf['biblio']} */\n const data = await response.json();\n try {\n await biblioDB.addAll(data);\n } catch (err) {\n console.error(err);\n }\n return data;\n}\n\n/**\n * @param {string} key\n * @returns {Promise<BiblioData>}\n */\nexport async function resolveRef(key) {\n const biblio = await done;\n if (!biblio.hasOwnProperty(key)) {\n return null;\n }\n const entry = biblio[key];\n if (entry.aliasOf) {\n return await resolveRef(entry.aliasOf);\n }\n return entry;\n}\n\n/**\n * @param {string[]} neededRefs\n */\nasync function getReferencesFromIdb(neededRefs) {\n const idbRefs = [];\n\n // See if we have them in IDB\n try {\n await biblioDB.ready; // can throw\n const promisesToFind = neededRefs.map(async id => ({\n id,\n data: await biblioDB.find(id),\n }));\n idbRefs.push(...(await Promise.all(promisesToFind)));\n } catch (err) {\n // IndexedDB died, so we need to go to the network for all\n // references\n idbRefs.push(...neededRefs.map(id => ({ id, data: null })));\n console.warn(err);\n }\n\n return idbRefs;\n}\n\nexport class Plugin {\n /** @param {Conf} conf */\n constructor(conf) {\n this.conf = conf;\n }\n\n /**\n * Normative references take precedence over informative ones,\n * so any duplicates ones are removed from the informative set.\n */\n normalizeReferences() {\n const normalizedNormativeRefs = new Set(\n [...this.conf.normativeReferences].map(key => key.toLowerCase())\n );\n Array.from(this.conf.informativeReferences)\n .filter(key => normalizedNormativeRefs.has(key.toLowerCase()))\n .forEach(redundantKey =>\n this.conf.informativeReferences.delete(redundantKey)\n );\n }\n\n getRefKeys() {\n return {\n informativeReferences: Array.from(this.conf.informativeReferences),\n normativeReferences: Array.from(this.conf.normativeReferences),\n };\n }\n\n async run() {\n const finish = () => {\n doneResolver(this.conf.biblio);\n };\n if (!this.conf.localBiblio) {\n this.conf.localBiblio = {};\n }\n this.conf.biblio = biblio;\n const localAliases = Object.keys(this.conf.localBiblio)\n .filter(key => this.conf.localBiblio[key].hasOwnProperty(\"aliasOf\"))\n .map(key => this.conf.localBiblio[key].aliasOf)\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key));\n this.normalizeReferences();\n const allRefs = this.getRefKeys();\n const neededRefs = Array.from(\n new Set(\n allRefs.normativeReferences\n .concat(allRefs.informativeReferences)\n // Filter, as to not go to network for local refs\n .filter(key => !this.conf.localBiblio.hasOwnProperty(key))\n // but include local aliases which refer to external specs\n .concat(localAliases)\n .sort()\n )\n );\n const idbRefs = await getReferencesFromIdb(neededRefs);\n const split = { hasData: [], noData: [] };\n idbRefs.forEach(ref => {\n (ref.data ? split.hasData : split.noData).push(ref);\n });\n split.hasData.forEach(ref => {\n biblio[ref.id] = ref.data;\n });\n const externalRefs = split.noData.map(item => item.id);\n if (externalRefs.length) {\n // Going to the network for refs we don't have\n const data = await updateFromNetwork(externalRefs, { forceUpdate: true });\n Object.assign(biblio, data);\n }\n Object.assign(biblio, this.conf.localBiblio);\n finish();\n }\n}\n","// @ts-check\n// Module core/render-biblio\n// renders the biblio data pre-processed in core/biblio\n\nimport { addId, getIntlData, showError } from \"./utils.js\";\nimport { biblio } from \"./biblio.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/render-biblio\";\n\nconst localizationStrings = {\n en: {\n info_references: \"Informative references\",\n norm_references: \"Normative references\",\n references: \"References\",\n },\n ko: {\n references: \"참조\",\n },\n nl: {\n info_references: \"Informatieve referenties\",\n norm_references: \"Normatieve referenties\",\n references: \"Referenties\",\n },\n es: {\n info_references: \"Referencias informativas\",\n norm_references: \"Referencias normativas\",\n references: \"Referencias\",\n },\n ja: {\n info_references: \"参照用参考文献\",\n norm_references: \"規範的参考文献\",\n references: \"参考文献\",\n },\n de: {\n info_references: \"Weiterführende Informationen\",\n norm_references: \"Normen und Spezifikationen\",\n references: \"Referenzen\",\n },\n zh: {\n info_references: \"非规范性引用\",\n norm_references: \"规范性引用\",\n references: \"参考文献\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nconst REF_STATUSES = new Map([\n [\"CR\", \"W3C Candidate Recommendation\"],\n [\"ED\", \"W3C Editor's Draft\"],\n [\"FPWD\", \"W3C First Public Working Draft\"],\n [\"LCWD\", \"W3C Last Call Working Draft\"],\n [\"NOTE\", \"W3C Note\"],\n [\"PER\", \"W3C Proposed Edited Recommendation\"],\n [\"PR\", \"W3C Proposed Recommendation\"],\n [\"REC\", \"W3C Recommendation\"],\n [\"WD\", \"W3C Working Draft\"],\n [\"WG-NOTE\", \"W3C Working Group Note\"],\n]);\n\nconst endWithDot = endNormalizer(\".\");\n\n/** @param {Conf} conf */\nexport function run(conf) {\n const informs = Array.from(conf.informativeReferences);\n const norms = Array.from(conf.normativeReferences);\n\n if (!informs.length && !norms.length) return;\n\n /** @type {HTMLElement} */\n const refSection =\n document.querySelector(\"section#references\") ||\n html`<section id=\"references\"></section>`;\n\n if (!document.querySelector(\"section#references > h2\")) {\n refSection.prepend(html`<h2>${l10n.references}</h2>`);\n }\n\n refSection.classList.add(\"appendix\");\n\n if (norms.length) {\n const sec = createReferencesSection(norms, l10n.norm_references);\n refSection.appendChild(sec);\n }\n if (informs.length) {\n const sec = createReferencesSection(informs, l10n.info_references);\n refSection.appendChild(sec);\n }\n\n document.body.appendChild(refSection);\n}\n\n/**\n * @param {string[]} refs\n * @param {string} title\n * @returns {HTMLElement}\n */\nfunction createReferencesSection(refs, title) {\n const { goodRefs, badRefs } = groupRefs(refs.map(toRefContent));\n const uniqueRefs = getUniqueRefs(goodRefs);\n\n const refsToShow = uniqueRefs\n .concat(badRefs)\n .sort((a, b) =>\n a.ref.toLocaleLowerCase().localeCompare(b.ref.toLocaleLowerCase())\n );\n\n const sec = html`<section>\n <h3>${title}</h3>\n <dl class=\"bibliography\">${refsToShow.map(showRef)}</dl>\n </section>`;\n addId(sec, \"\", title);\n\n const aliases = getAliases(goodRefs);\n decorateInlineReference(uniqueRefs, aliases);\n warnBadRefs(badRefs);\n\n return sec;\n}\n\n/**\n * returns refcontent and unique key for a reference among its aliases\n * and warns about circular references\n * @param {String} ref\n * @typedef {ReturnType<typeof toRefContent>} Ref\n */\nfunction toRefContent(ref) {\n let refcontent = biblio[ref];\n let key = ref;\n const circular = new Set([key]);\n while (refcontent && refcontent.aliasOf) {\n if (circular.has(refcontent.aliasOf)) {\n refcontent = null;\n const msg = `Circular reference in biblio DB between [\\`${ref}\\`] and [\\`${key}\\`].`;\n showError(msg, name);\n } else {\n key = refcontent.aliasOf;\n refcontent = biblio[key];\n circular.add(key);\n }\n }\n if (refcontent && !refcontent.id) {\n refcontent.id = ref.toLowerCase();\n }\n return { ref, refcontent };\n}\n\n/** @param {Ref[]} refs */\nfunction groupRefs(refs) {\n const goodRefs = [];\n const badRefs = [];\n for (const ref of refs) {\n if (ref.refcontent) {\n goodRefs.push(ref);\n } else {\n badRefs.push(ref);\n }\n }\n return { goodRefs, badRefs };\n}\n\n/** @param {Ref[]} refs */\nfunction getUniqueRefs(refs) {\n /** @type {Map<string, Ref>} */\n const uniqueRefs = new Map();\n for (const ref of refs) {\n if (!uniqueRefs.has(ref.refcontent.id)) {\n // the condition ensures that only the first used [[TERM]]\n // shows up in #references section\n uniqueRefs.set(ref.refcontent.id, ref);\n }\n }\n return [...uniqueRefs.values()];\n}\n\n/**\n * Render an inline citation\n *\n * @param {String} ref the inline reference.\n * @param {String} [linkText] custom link text\n * @returns HTMLElement\n */\nexport function renderInlineCitation(ref, linkText) {\n const key = ref.replace(/^(!|\\?)/, \"\");\n const href = `#bib-${key.toLowerCase()}`;\n const text = linkText || key;\n const elem = html`<cite\n ><a class=\"bibref\" href=\"${href}\" data-link-type=\"biblio\">${text}</a></cite\n >`;\n return linkText ? elem : html`[${elem}]`;\n}\n\n/**\n * renders a reference\n * @param {Ref} ref\n */\nfunction showRef({ ref, refcontent }) {\n const refId = `bib-${ref.toLowerCase()}`;\n if (refcontent) {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd>${{ html: stringifyReference(refcontent) }}</dd>\n `;\n } else {\n return html`\n <dt id=\"${refId}\">[${ref}]</dt>\n <dd><em class=\"respec-offending-element\">Reference not found.</em></dd>\n `;\n }\n}\n\nfunction endNormalizer(endStr) {\n return str => {\n const trimmed = str.trim();\n const result =\n !trimmed || trimmed.endsWith(endStr) ? trimmed : trimmed + endStr;\n return result;\n };\n}\n\n/** @param {BiblioData|string} ref */\nfunction stringifyReference(ref) {\n if (typeof ref === \"string\") return ref;\n let output = `<cite>${ref.title}</cite>`;\n\n output = ref.href ? `<a href=\"${ref.href}\">${output}</a>. ` : `${output}. `;\n\n if (ref.authors && ref.authors.length) {\n output += ref.authors.join(\"; \");\n if (ref.etAl) output += \" et al\";\n output += \". \";\n }\n if (ref.publisher) {\n output = `${output} ${endWithDot(ref.publisher)} `;\n }\n if (ref.date) output += `${ref.date}. `;\n if (ref.status) output += `${REF_STATUSES.get(ref.status) || ref.status}. `;\n if (ref.href) output += `URL: <a href=\"${ref.href}\">${ref.href}</a>`;\n return output;\n}\n\n/**\n * get aliases for a reference \"key\"\n */\nfunction getAliases(refs) {\n return refs.reduce((aliases, ref) => {\n const key = ref.refcontent.id;\n const keys = !aliases.has(key)\n ? aliases.set(key, []).get(key)\n : aliases.get(key);\n keys.push(ref.ref);\n return aliases;\n }, new Map());\n}\n\n/**\n * fix biblio reference URLs\n * Add title attribute to references\n */\nfunction decorateInlineReference(refs, aliases) {\n refs\n .map(({ ref, refcontent }) => {\n const refUrl = `#bib-${ref.toLowerCase()}`;\n const selectors = aliases\n .get(refcontent.id)\n .map(alias => `a.bibref[href=\"#bib-${alias.toLowerCase()}\"]`)\n .join(\",\");\n const elems = document.querySelectorAll(selectors);\n return { refUrl, elems, refcontent };\n })\n .forEach(({ refUrl, elems, refcontent }) => {\n elems.forEach(a => {\n a.setAttribute(\"href\", refUrl);\n a.setAttribute(\"title\", refcontent.title);\n a.dataset.linkType = \"biblio\";\n });\n });\n}\n\n/**\n * warn about bad references\n */\nfunction warnBadRefs(badRefs) {\n badRefs.forEach(({ ref }) => {\n const badrefs = [\n ...document.querySelectorAll(\n `a.bibref[href=\"#bib-${ref.toLowerCase()}\"]`\n ),\n ].filter(({ textContent: t }) => t.toLowerCase() === ref.toLowerCase());\n const msg = `Bad reference: [\\`${ref}\\`] (appears ${badrefs.length} times)`;\n showError(msg, name);\n console.warn(\"Bad references: \", badrefs);\n });\n}\n","// @ts-check\n// Module core/inlines\n// Process all manners of inline information. These are done together despite it being\n// seemingly a better idea to orthogonalise them. The issue is that processing text nodes\n// is harder to orthogonalise, and in some browsers can also be particularly slow.\n// Things that are recognised are <abbr>/<acronym> which when used once are applied\n// throughout the document, [[REFERENCES]]/[[!REFERENCES]], {{ IDL }} and RFC2119 keywords.\n\nimport {\n InsensitiveStringSet,\n getIntlData,\n getTextNodes,\n norm,\n refTypeFromContext,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { idlStringToHtml } from \"./inline-idl-parser.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\n\nexport const name = \"core/inlines\";\nexport const rfc2119Usage = {};\n\nconst localizationStrings = {\n en: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUST(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHOULD(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bSHALL(?:\\\\s+NOT)?\\\\b\",\n \"\\\\bMAY\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?REQUIRED\\\\b\",\n \"\\\\b(?:NOT\\\\s+)?RECOMMENDED\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n de: {\n rfc2119Keywords() {\n return new RegExp(\n [\n \"\\\\bMUSS\\\\b\",\n \"\\\\bERFORDERLICH\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?NÖTIG\\\\b\",\n \"\\\\bDARF(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\bVERBOTEN\\\\b\",\n \"\\\\bSOLL(?:\\\\s+NICHT)?\\\\b\",\n \"\\\\b(?:NICHT\\\\s+)?EMPFOHLEN\\\\b\",\n \"\\\\bKANN\\\\b\",\n \"\\\\bOPTIONAL\\\\b\",\n ].join(\"|\")\n );\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Inline `code`\n// TODO: Replace (?!`) at the end with (?:<!`) at the start when Firefox + Safari\n// add support.\nconst inlineCodeRegExp = /(?:`[^`]+`)(?!`)/; // `code`\nconst inlineIdlReference = /(?:{{[^}]+}})/; // {{ WebIDLThing }}\nconst inlineVariable = /\\B\\|\\w[\\w\\s]*(?:\\s*:[\\w\\s&;<>]+)?\\|\\B/; // |var : Type|\nconst inlineCitation = /(?:\\[\\[(?:!|\\\\|\\?)?[\\w.-]+(?:|[^\\]]+)?\\]\\])/; // [[citation]]\nconst inlineExpansion = /(?:\\[\\[\\[(?:!|\\\\|\\?)?#?[\\w-.]+\\]\\]\\])/; // [[[expand]]]\nconst inlineAnchor = /(?:\\[=[^=]+=\\])/; // Inline [= For/link =]\nconst inlineElement = /(?:\\[\\^[^^]+\\^\\])/; // Inline [^element^]\n\n/**\n * @example [^iframe^] // [^element^]\n * @example [^iframe/allow^] // [^element/element-attr^]\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineElementMatches(matched) {\n const value = matched.slice(2, -2).trim();\n const [element, attribute, attrValue] = value\n .split(\"/\", 3)\n .map(s => s && s.trim())\n .filter(s => !!s);\n const [xrefType, xrefFor, textContent] = (() => {\n if (attrValue) {\n return [\"attr-value\", `${element}/${attribute}`, attrValue];\n } else if (attribute) {\n return [\"element-attr\", element, attribute];\n } else {\n return [\"element\", null, element];\n }\n })();\n return html`<code\n ><a data-xref-type=\"${xrefType}\" data-xref-for=\"${xrefFor}\"\n >${textContent}</a\n ></code\n >`;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRFC2119Matches(matched) {\n const value = norm(matched);\n const nodeElement = html`<em class=\"rfc2119\">${value}</em>`;\n // remember which ones were used\n rfc2119Usage[value] = true;\n return nodeElement;\n}\n\n/**\n * @param {string} matched\n * @return {HTMLElement}\n */\nfunction inlineRefMatches(matched) {\n // slices \"[[[\" at the beginning and \"]]]\" at the end\n const ref = matched.slice(3, -3).trim();\n if (!ref.startsWith(\"#\")) {\n return html`<a data-cite=\"${ref}\"></a>`;\n }\n if (document.querySelector(ref)) {\n return html`<a href=\"${ref}\"></a>`;\n }\n const badReference = html`<span>${matched}</span>`;\n const msg = `Wasn't able to expand ${matched} as it didn't match any id in the document.`;\n const hint = `Please make sure there is element with id ${ref} in the document.`;\n showError(msg, name, { hint, elements: [badReference] });\n return badReference;\n}\n\n/**\n * @param {string} matched\n */\nfunction inlineXrefMatches(matched) {\n // slices \"{{\" at the beginning and \"}}\" at the end\n const ref = matched.slice(2, -2).trim();\n return ref.startsWith(\"\\\\\")\n ? matched.replace(\"\\\\\", \"\")\n : idlStringToHtml(norm(ref));\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Object} conf\n * @return {Iterable<string | Node>}\n */\nfunction inlineBibrefMatches(matched, txt, conf) {\n // slices \"[[\" at the start and \"]]\" at the end\n const ref = matched.slice(2, -2);\n if (ref.startsWith(\"\\\\\")) {\n return [`[[${ref.slice(1)}]]`];\n }\n\n const [spec, linkText] = ref.split(\"|\").map(norm);\n const { type, illegal } = refTypeFromContext(spec, txt.parentNode);\n const cite = renderInlineCitation(spec, linkText);\n const cleanRef = spec.replace(/^(!|\\?)/, \"\");\n if (illegal && !conf.normativeReferences.has(cleanRef)) {\n const citeElem = cite.childNodes[1] || cite;\n const msg = `Normative references in informative sections are not allowed. `;\n const hint = `Remove '!' from the start of the reference \\`[[${ref}]]\\``;\n showWarning(msg, name, { elements: [citeElem], hint });\n }\n\n if (type === \"informative\" && !illegal) {\n conf.informativeReferences.add(cleanRef);\n } else {\n conf.normativeReferences.add(cleanRef);\n }\n return cite.childNodes[1] ? cite.childNodes : [cite];\n}\n\n/**\n * @param {string} matched\n * @param {Text} txt\n * @param {Map<string, string>} abbrMap\n */\nfunction inlineAbbrMatches(matched, txt, abbrMap) {\n return txt.parentElement.tagName === \"ABBR\"\n ? matched\n : html`<abbr title=\"${abbrMap.get(matched)}\">${matched}</abbr>`;\n}\n\n/**\n * @example |varName: type| => <var data-type=\"type\">varName</var>\n * @example |varName| => <var>varName</var>\n * @param {string} matched\n */\nfunction inlineVariableMatches(matched) {\n // remove \"|\" at the beginning and at the end, then split at an optional `:`\n const matches = matched.slice(1, -1).split(\":\", 2);\n const [varName, type] = matches.map(s => s.trim());\n return html`<var data-type=\"${type}\">${varName}</var>`;\n}\n\n/**\n * @example [= foo =] => <a>foo</a>\n * @example [= bar/foo =] => <a data-link-for=\"bar\" data-xref-for=\"bar\">foo</a>\n * @example [= `foo` =] => <a><code>foo</code></a>\n * @example [= foo|bar =] => <a data-lt=\"foo\">bar</a>\n * @param {string} matched\n */\nfunction inlineAnchorMatches(matched) {\n matched = matched.slice(2, -2); // Chop [= =]\n const parts = splitBySlash(matched, 2);\n const [isFor, content] = parts.length === 2 ? parts : [null, parts[0]];\n const [linkingText, text] = content.includes(\"|\")\n ? content.split(\"|\", 2).map(s => s.trim())\n : [null, content];\n const processedContent = processInlineContent(text);\n const forContext = isFor ? norm(isFor) : null;\n return html`<a\n data-link-type=\"dfn\"\n data-link-for=\"${forContext}\"\n data-xref-for=\"${forContext}\"\n data-lt=\"${linkingText}\"\n >${processedContent}</a\n >`;\n}\n\nfunction inlineCodeMatches(matched) {\n const clean = matched.slice(1, -1); // Chop ` and `\n return html`<code>${clean}</code>`;\n}\n\nfunction processInlineContent(text) {\n if (inlineCodeRegExp.test(text)) {\n // We use a capture group to split, so we can process all the parts.\n return text.split(/(`[^`]+`)(?!`)/).map(part => {\n return part.startsWith(\"`\")\n ? inlineCodeMatches(part)\n : processInlineContent(part);\n });\n }\n return document.createTextNode(text);\n}\n\nexport function run(conf) {\n const abbrMap = new Map();\n document.normalize();\n if (!document.querySelector(\"section#conformance\")) {\n // make the document informative\n document.body.classList.add(\"informative\");\n }\n conf.normativeReferences = new InsensitiveStringSet();\n conf.informativeReferences = new InsensitiveStringSet();\n\n if (!conf.respecRFC2119) conf.respecRFC2119 = rfc2119Usage;\n\n // PRE-PROCESSING\n /** @type {NodeListOf<HTMLElement>} */\n const abbrs = document.querySelectorAll(\"abbr[title]\");\n for (const abbr of abbrs) {\n abbrMap.set(abbr.textContent, abbr.title);\n }\n const aKeys = [...abbrMap.keys()];\n const abbrRx = aKeys.length ? `(?:\\\\b${aKeys.join(\"\\\\b)|(?:\\\\b\")}\\\\b)` : null;\n\n // PROCESSING\n // Don't gather text nodes for these:\n const exclusions = [\"#respec-ui\", \".head\", \"pre\"];\n const txts = getTextNodes(document.body, exclusions, {\n wsNodes: false, // we don't want nodes with just whitespace\n });\n const keywords = l10n.rfc2119Keywords();\n const rx = new RegExp(\n `(${[\n keywords.source,\n inlineIdlReference.source,\n inlineVariable.source,\n inlineCitation.source,\n inlineExpansion.source,\n inlineAnchor.source,\n inlineCodeRegExp.source,\n inlineElement.source,\n ...(abbrRx ? [abbrRx] : []),\n ].join(\"|\")})`\n );\n for (const txt of txts) {\n const subtxt = txt.data.split(rx);\n if (subtxt.length === 1) continue;\n const df = document.createDocumentFragment();\n let matched = true;\n for (const t of subtxt) {\n matched = !matched;\n if (!matched) {\n df.append(t);\n } else if (t.startsWith(\"{{\")) {\n const node = inlineXrefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[[\")) {\n const node = inlineRefMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[[\")) {\n const nodes = inlineBibrefMatches(t, txt, conf);\n df.append(...nodes);\n } else if (t.startsWith(\"|\")) {\n const node = inlineVariableMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[=\")) {\n const node = inlineAnchorMatches(t);\n df.append(node);\n } else if (t.startsWith(\"`\")) {\n const node = inlineCodeMatches(t);\n df.append(node);\n } else if (t.startsWith(\"[^\")) {\n const node = inlineElementMatches(t);\n df.append(node);\n } else if (abbrMap.has(t)) {\n const node = inlineAbbrMatches(t, txt, abbrMap);\n df.append(node);\n } else if (keywords.test(t)) {\n const node = inlineRFC2119Matches(t);\n df.append(node);\n } else {\n // FAIL -- not sure that this can really happen\n throw new Error(\n `Found token '${t}' but it does not correspond to anything`\n );\n }\n }\n txt.replaceWith(df);\n }\n}\n\n/**\n * Split a string by slash (`/`) unless it's escaped by a backslash (`\\`)\n * @param {string} str\n *\n * TODO: Use negative lookbehind (`str.split(/(?<!\\\\)\\//)`) when supported.\n * https://github.com/w3c/respec/issues/2869\n */\nfunction splitBySlash(str, limit = Infinity) {\n return str\n .replace(\"\\\\/\", \"%%\")\n .split(\"/\", limit)\n .map(s => s && s.trim().replace(\"%%\", \"/\"));\n}\n","// @ts-check\n// Module w3c/conformance\n// Handle the conformance section properly.\nimport { getIntlData, htmlJoinAnd, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { renderInlineCitation } from \"../core/render-biblio.js\";\nimport { rfc2119Usage } from \"../core/inlines.js\";\nexport const name = \"w3c/conformance\";\n\nconst localizationStrings = {\n en: {\n conformance: \"Conformance\",\n normativity:\n \"As well as sections marked as non-normative, all authoring guidelines, \" +\n \"diagrams, examples, and notes in this specification are non-normative. \" +\n \"Everything else in this specification is normative.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n The key word${plural ? \"s\" : \"\"} ${keywords} in this document\n ${plural ? \"are\" : \"is\"} to be interpreted as described in\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n when, and only when, they appear in all capitals, as shown here.\n </p>`;\n },\n },\n de: {\n conformance: \"Anforderungen\",\n normativity:\n \"Neben den explizit als nicht-normativ gekennzeichneten Abschnitten \" +\n \"sind auch alle Diagramme, Beispiele und Hinweise in diesem Dokument \" +\n \"nicht normativ. Alle anderen Angaben sind normativ.\",\n keywordInterpretation(keywords, plural) {\n return html`<p>\n ${plural ? \"Die Schlüsselwörter\" : \"Das Schlüsselwort\"} ${keywords} in\n diesem Dokument ${plural ? \"sind\" : \"ist\"} gemäß\n <a href=\"https://datatracker.ietf.org/doc/html/bcp14\">BCP 14</a>\n ${renderInlineCitation(\"RFC2119\")} ${renderInlineCitation(\"RFC8174\")}\n und unter Berücksichtigung von\n <a href=\"https://github.com/adfinis-sygroup/2119/blob/master/2119de.rst\"\n >2119de</a\n >\n zu interpretieren, wenn und nur wenn ${plural ? \"sie\" : \"es\"} wie hier\n gezeigt durchgehend groß geschrieben wurde${plural ? \"n\" : \"\"}.\n </p>`;\n },\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {Element} conformance\n * @param {*} conf\n */\nfunction processConformance(conformance, conf) {\n const terms = [...Object.keys(rfc2119Usage)];\n // Add RFC2119 to bibliography\n if (terms.length) {\n conf.normativeReferences.add(\"RFC2119\");\n conf.normativeReferences.add(\"RFC8174\");\n }\n // Put in the 2119 clause and reference\n const keywords = htmlJoinAnd(\n terms.sort(),\n item => html`<em class=\"rfc2119\">${item}</em>`\n );\n const plural = terms.length > 1;\n const content = html`\n <h2>${l10n.conformance}</h2>\n <p>${l10n.normativity}</p>\n ${terms.length ? l10n.keywordInterpretation(keywords, plural) : null}\n `;\n conformance.prepend(...content.childNodes);\n}\n\nexport function run(conf) {\n const conformance = document.querySelector(\"section#conformance\");\n if (conformance && !conformance.classList.contains(\"override\")) {\n processConformance(conformance, conf);\n }\n // Warn when there are RFC2119/RFC8174 keywords, but not conformance section\n if (!conformance && Object.keys(rfc2119Usage).length) {\n const msg = `Document uses RFC2119 keywords but lacks a conformance section.`;\n const hint = 'Please add a `<section id=\"conformance\">`.';\n showWarning(msg, name, { hint });\n }\n}\n","// @ts-check\nimport { CaseInsensitiveMap } from \"./utils.js\";\n\n/** @type {CaseInsensitiveMap<Set<HTMLElement>>} */\nexport const definitionMap = new CaseInsensitiveMap();\n\n/**\n * @param {HTMLElement} dfn A definition element to register\n * @param {string[]} names Names to register the element by\n */\nexport function registerDefinition(dfn, names) {\n for (const name of names) {\n if (!definitionMap.has(name)) {\n definitionMap.set(name, new Set());\n }\n definitionMap.get(name).add(dfn);\n }\n}\n","// @ts-check\n// Module core/dfn\n// - Finds all <dfn> elements and populates definitionMap to identify them.\n\nimport { getDfnTitles, norm } from \"./utils.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/dfn\";\n\nexport function run() {\n document.querySelectorAll(\"dfn\").forEach(dfn => {\n const titles = getDfnTitles(dfn);\n registerDefinition(dfn, titles);\n\n // Treat Internal Slots as IDL.\n if (!dfn.dataset.dfnType && /^\\[\\[\\w+\\]\\]$/.test(titles[0])) {\n dfn.dataset.dfnType = \"idl\";\n }\n\n // Per https://tabatkins.github.io/bikeshed/#dfn-export, a dfn with dfnType\n // other than dfn and not marked with data-no-export is to be exported.\n // We also skip \"imported\" definitions via data-cite.\n const ds = dfn.dataset;\n if (ds.dfnType && ds.dfnType !== \"dfn\" && !ds.cite && !ds.noExport) {\n dfn.dataset.export = \"\";\n }\n\n // Only add `lt`s that are different from the text content\n if (titles.length === 1 && titles[0] === norm(dfn.textContent)) {\n return;\n }\n dfn.dataset.lt = titles.join(\"|\");\n });\n}\n","// @ts-check\n// Adds automatic pluralization to dfns\n// If a dfn is referenced as it's plural (and plural of `data-lt` attributes),\n// plurals of it are automatically added to `data-plurals`.\n// The linking is done in core/link-to-dfn\n\nimport { norm as normalize } from \"./utils.js\";\nimport { pluralize } from \"./import-maps.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/pluralize\";\n\nexport function run(conf) {\n if (!conf.pluralize) return;\n\n const pluralizeDfn = getPluralizer();\n\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\n \"dfn:not([data-lt-no-plural]):not([data-lt-noDefault])\"\n );\n dfns.forEach(dfn => {\n const terms = [dfn.textContent];\n if (dfn.dataset.lt) terms.push(...dfn.dataset.lt.split(\"|\"));\n if (dfn.dataset.localLt) {\n terms.push(...dfn.dataset.localLt.split(\"|\"));\n }\n\n const plurals = new Set(terms.map(pluralizeDfn).filter(plural => plural));\n\n if (plurals.size) {\n const userDefinedPlurals = dfn.dataset.plurals\n ? dfn.dataset.plurals.split(\"|\")\n : [];\n const uniquePlurals = [...new Set([...userDefinedPlurals, ...plurals])];\n dfn.dataset.plurals = uniquePlurals.join(\"|\");\n registerDefinition(dfn, uniquePlurals);\n }\n });\n}\n\nfunction getPluralizer() {\n /** @type {Set<string>} */\n const links = new Set();\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const reflessAnchors = document.querySelectorAll(\"a:not([href])\");\n reflessAnchors.forEach(el => {\n const normText = normalize(el.textContent).toLowerCase();\n links.add(normText);\n if (el.dataset.lt) {\n links.add(el.dataset.lt);\n }\n });\n\n /** @type {Set<string>} */\n const dfnTexts = new Set();\n /** @type {NodeListOf<HTMLElement>} */\n const dfns = document.querySelectorAll(\"dfn:not([data-lt-noDefault])\");\n dfns.forEach(dfn => {\n const normText = normalize(dfn.textContent).toLowerCase();\n dfnTexts.add(normText);\n if (dfn.dataset.lt) {\n dfn.dataset.lt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n if (dfn.dataset.localLt) {\n dfn.dataset.localLt.split(\"|\").forEach(lt => dfnTexts.add(lt));\n }\n });\n\n // returns pluralized/singularized term if `text` needs pluralization/singularization, \"\" otherwise\n return function pluralizeDfn(/** @type {string} */ text) {\n const normText = normalize(text).toLowerCase();\n const plural = pluralize.isSingular(normText)\n ? pluralize.plural(normText)\n : pluralize.singular(normText);\n return links.has(plural) && !dfnTexts.has(plural) ? plural : \"\";\n };\n}\n","/* --- EXAMPLES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nspan.example-title {\n text-transform: none;\n}\n\naside.example,\ndiv.example,\ndiv.illegal-example {\n padding: 0.5em;\n margin: 1em 0;\n position: relative;\n clear: both;\n}\n\ndiv.illegal-example {\n color: red;\n}\n\ndiv.illegal-example p {\n color: black;\n}\n\naside.example,\ndiv.example {\n padding: 0.5em;\n border-left-width: 0.5em;\n border-left-style: solid;\n border-color: #e0cb52;\n background: #fcfaee;\n}\n\naside.example div.example {\n border-left-width: 0.1em;\n border-color: #999;\n background: #fff;\n}\naside.example div.example span.example-title {\n color: #999;\n}\n\n.example pre {\n background-color: rgba(0, 0, 0, 0.03);\n}\n`;\n","// @ts-check\n// Module core/examples\n// Manages examples, including marking them up, numbering, inserting the title,\n// and reindenting.\n// Examples are any pre element with class \"example\" or \"illegal-example\".\n// When an example is found, it is reported using the \"example\" event. This can\n// be used by a containing shell to extract all examples.\n\nimport { addId, getIntlData } from \"./utils.js\";\nimport css from \"../styles/examples.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/examples\";\n\nconst localizationStrings = {\n en: {\n example: \"Example\",\n },\n nl: {\n example: \"Voorbeeld\",\n },\n es: {\n example: \"Ejemplo\",\n },\n ko: {\n example: \"예시\",\n },\n ja: {\n example: \"例\",\n },\n de: {\n example: \"Beispiel\",\n },\n zh: {\n example: \"例\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {number} number\n * @property {boolean} illegal\n * @property {string} [title]\n * @property {string} [content]\n *\n * @param {HTMLElement} elem\n * @param {number} num\n * @param {Report} report\n */\nfunction makeTitle(elem, num, report) {\n report.title = elem.title;\n if (report.title) elem.removeAttribute(\"title\");\n const number = num > 0 ? ` ${num}` : \"\";\n const title = report.title\n ? html`<span class=\"example-title\">: ${report.title}</span>`\n : \"\";\n return html`<div class=\"marker\">\n <a class=\"self-link\">${l10n.example}<bdi>${number}</bdi></a\n >${title}\n </div>`;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const examples = document.querySelectorAll(\n \"pre.example, pre.illegal-example, aside.example\"\n );\n if (!examples.length) return;\n\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n let number = 0;\n examples.forEach(example => {\n const illegal = example.classList.contains(\"illegal-example\");\n /** @type {Report} */\n const report = {\n number,\n illegal,\n };\n const { title } = example;\n if (example.localName === \"aside\") {\n ++number;\n const div = makeTitle(example, number, report);\n example.prepend(div);\n if (title) {\n addId(example, `example-${number}`, title); // title gets used\n } else {\n // use the number as the title... so, e.g., \"example-5\"\n addId(example, \"example\", String(number));\n }\n const { id } = example;\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${id}`;\n pub(\"example\", report);\n } else {\n const inAside = !!example.closest(\"aside\");\n if (!inAside) ++number;\n\n report.content = example.innerHTML;\n\n // wrap\n example.classList.remove(\"example\", \"illegal-example\");\n // relocate the id to the div\n const id = example.id ? example.id : null;\n if (id) example.removeAttribute(\"id\");\n const exampleTitle = makeTitle(example, inAside ? 0 : number, report);\n const div = html`<div class=\"example\" id=\"${id}\">\n ${exampleTitle} ${example.cloneNode(true)}\n </div>`;\n if (title) {\n addId(div, `example-${number}`, title);\n }\n addId(div, `example`, String(number));\n const selfLink = div.querySelector(\"a.self-link\");\n selfLink.href = `#${div.id}`;\n example.replaceWith(div);\n if (!inAside) pub(\"example\", report);\n }\n });\n}\n","/* --- ISSUES/NOTES --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.issue-label {\n text-transform: initial;\n}\n\n.warning > p:first-child { margin-top: 0 }\n.warning {\n padding: .5em;\n border-left-width: .5em;\n border-left-style: solid;\n}\nspan.warning { padding: .1em .5em .15em; }\n\n.issue.closed span.issue-number {\n text-decoration: line-through;\n}\n\n.warning {\n border-color: #f11;\n border-width: .2em;\n border-style: solid;\n background: #fbe9e9;\n}\n\n.warning-title:before{\n content: \"⚠\"; /*U+26A0 WARNING SIGN*/\n font-size: 1.3em;\n float: left;\n padding-right: .3em;\n margin-top: -0.3em;\n}\n\nli.task-list-item {\n list-style: none;\n}\n\ninput.task-list-item-checkbox {\n margin: 0 0.35em 0.25em -1.6em;\n vertical-align: middle;\n}\n\n.issue a.respec-gh-label {\n padding: 5px;\n margin: 0 2px 0 2px;\n font-size: 10px;\n text-transform: none;\n text-decoration: none;\n font-weight: bold;\n border-radius: 4px;\n position: relative;\n bottom: 2px;\n border: none;\n display: inline-block;\n}\n`;\n","// @ts-check\n// Module core/issues-notes\n// Manages issues and notes, including marking them up, numbering, inserting the title,\n// and injecting the style sheet.\n// These are elements with classes \"issue\" or \"note\".\n// When an issue or note is found, it is reported using the \"issue\" or \"note\" event. This can\n// be used by a containing shell to extract all of these.\n// Issues are automatically numbered by default, but you can assign them specific numbers (or,\n// despite the name, any arbitrary identifier) using the data-number attribute. Note that as\n// soon as you use one data-number on any issue all the other issues stop being automatically\n// numbered to avoid involuntary clashes.\n// If the configuration has issueBase set to a non-empty string, and issues are\n// manually numbered, a link to the issue is created using issueBase and the issue number\nimport {\n addId,\n getIntlData,\n joinAnd,\n parents,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport css from \"../styles/issues-notes.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nexport const name = \"core/issues-notes\";\n\nconst localizationStrings = {\n en: {\n editors_note: \"Editor's note\",\n feature_at_risk: \"(Feature at Risk) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue Summary\",\n no_issues_in_spec: \"There are no issues listed in this specification.\",\n note: \"Note\",\n warning: \"Warning\",\n },\n ja: {\n note: \"注\",\n editors_note: \"編者注\",\n feature_at_risk: \"(変更の可能性のある機能) Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue の要約\",\n no_issues_in_spec: \"この仕様には未解決の issues は含まれていません.\",\n warning: \"警告\",\n },\n nl: {\n editors_note: \"Redactionele noot\",\n issue_summary: \"Lijst met issues\",\n no_issues_in_spec: \"Er zijn geen problemen vermeld in deze specificatie.\",\n note: \"Noot\",\n warning: \"Waarschuwing\",\n },\n es: {\n editors_note: \"Nota de editor\",\n issue: \"Cuestión\",\n issue_summary: \"Resumen de la cuestión\",\n note: \"Nota\",\n no_issues_in_spec: \"No hay problemas enumerados en esta especificación.\",\n warning: \"Aviso\",\n },\n de: {\n editors_note: \"Redaktioneller Hinweis\",\n issue: \"Frage\",\n issue_summary: \"Offene Fragen\",\n no_issues_in_spec: \"Diese Spezifikation enthält keine offenen Fragen.\",\n note: \"Hinweis\",\n warning: \"Warnung\",\n },\n zh: {\n editors_note: \"编者注\",\n feature_at_risk: \"(有可能变动的特性)Issue\",\n issue: \"Issue\",\n issue_summary: \"Issue 总结\",\n no_issues_in_spec: \"本规范中未列出任何 issue。\",\n note: \"注\",\n warning: \"警告\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} Report\n * @property {string} type\n * @property {boolean} inline\n * @property {number} number\n * @property {string} title\n\n * @typedef {object} GitHubLabel\n * @property {string} color\n * @property {string} name\n *\n * @typedef {object} GitHubIssue\n * @property {string} title\n * @property {string} state\n * @property {string} bodyHTML\n * @property {GitHubLabel[]} labels\n\n * @param {NodeListOf<HTMLElement>} ins\n * @param {Map<string, GitHubIssue>} ghIssues\n * @param {*} conf\n */\nfunction handleIssues(ins, ghIssues, conf) {\n const getIssueNumber = createIssueNumberGetter();\n const issueList = document.createElement(\"ul\");\n ins.forEach(inno => {\n const { type, displayType, isFeatureAtRisk } = getIssueType(inno);\n const isIssue = type === \"issue\";\n const isInline = inno.localName === \"span\";\n const { number: dataNum } = inno.dataset;\n const report = {\n type,\n inline: isInline,\n title: inno.title,\n number: getIssueNumber(inno),\n };\n // wrap\n if (!isInline) {\n const cssClass = isFeatureAtRisk ? `${type} atrisk` : type;\n const ariaRole = type === \"note\" ? \"note\" : null;\n const div = html`<div class=\"${cssClass}\" role=\"${ariaRole}\"></div>`;\n const title = document.createElement(\"span\");\n const className = `${type}-title marker`;\n // prettier-ignore\n const titleParent = html`<div role=\"heading\" class=\"${className}\">${title}</div>`;\n addId(titleParent, \"h\", type);\n let text = displayType;\n if (inno.id) {\n div.id = inno.id;\n inno.removeAttribute(\"id\");\n } else {\n addId(\n div,\n \"issue-container\",\n report.number ? `number-${report.number}` : \"\"\n );\n }\n /** @type {GitHubIssue} */\n let ghIssue;\n if (isIssue) {\n if (report.number !== undefined) {\n text += ` ${report.number}`;\n }\n if (inno.dataset.hasOwnProperty(\"number\")) {\n const link = linkToIssueTracker(dataNum, conf, { isFeatureAtRisk });\n if (link) {\n title.before(link);\n link.append(title);\n }\n title.classList.add(\"issue-number\");\n ghIssue = ghIssues.get(dataNum);\n if (!ghIssue) {\n const msg = `Failed to fetch issue number ${dataNum}.`;\n showWarning(msg, name);\n }\n if (ghIssue && !report.title) {\n report.title = ghIssue.title;\n }\n }\n if (report.number !== undefined) {\n // Add entry to #issue-summary.\n issueList.append(createIssueSummaryEntry(l10n.issue, report, div.id));\n }\n }\n title.textContent = text;\n if (report.title) {\n inno.removeAttribute(\"title\");\n const { repoURL = \"\" } = conf.github || {};\n const labels = ghIssue ? ghIssue.labels : [];\n if (ghIssue && ghIssue.state === \"CLOSED\") {\n div.classList.add(\"closed\");\n }\n titleParent.append(createLabelsGroup(labels, report.title, repoURL));\n }\n /** @type {HTMLElement | DocumentFragment} */\n let body = inno;\n inno.replaceWith(div);\n body.classList.remove(type);\n body.removeAttribute(\"data-number\");\n if (ghIssue && !body.innerHTML.trim()) {\n body = document\n .createRange()\n .createContextualFragment(ghIssue.bodyHTML);\n }\n div.append(titleParent, body);\n const level = parents(titleParent, \"section\").length + 2;\n titleParent.setAttribute(\"aria-level\", level);\n }\n pub(report.type, report);\n });\n makeIssueSectionSummary(issueList);\n}\n\nfunction createIssueNumberGetter() {\n if (document.querySelector(\".issue[data-number]\")) {\n return element => {\n if (element.dataset.number) {\n return Number(element.dataset.number);\n }\n };\n }\n\n let issueNumber = 0;\n return element => {\n if (element.classList.contains(\"issue\") && element.localName !== \"span\") {\n return ++issueNumber;\n }\n };\n}\n\n/**\n * @typedef {object} IssueType\n * @property {string} type\n * @property {string} displayType\n * @property {boolean} isFeatureAtRisk\n *\n * @param {HTMLElement} inno\n * @return {IssueType}\n */\nfunction getIssueType(inno) {\n const isIssue = inno.classList.contains(\"issue\");\n const isWarning = inno.classList.contains(\"warning\");\n const isEdNote = inno.classList.contains(\"ednote\");\n const isFeatureAtRisk = inno.classList.contains(\"atrisk\");\n const type = isIssue\n ? \"issue\"\n : isWarning\n ? \"warning\"\n : isEdNote\n ? \"ednote\"\n : \"note\";\n const displayType = isIssue\n ? isFeatureAtRisk\n ? l10n.feature_at_risk\n : l10n.issue\n : isWarning\n ? l10n.warning\n : isEdNote\n ? l10n.editors_note\n : l10n.note;\n return { type, displayType, isFeatureAtRisk };\n}\n\n/**\n * @param {string} dataNum\n * @param {*} conf\n */\nfunction linkToIssueTracker(dataNum, conf, { isFeatureAtRisk = false } = {}) {\n // Set issueBase to cause issue to be linked to the external issue tracker\n if (!isFeatureAtRisk && conf.issueBase) {\n return html`<a href=\"${conf.issueBase + dataNum}\" />`;\n } else if (isFeatureAtRisk && conf.atRiskBase) {\n return html`<a href=\"${conf.atRiskBase + dataNum}\" />`;\n }\n}\n\n/**\n * @param {string} l10nIssue\n * @param {Report} report\n */\nfunction createIssueSummaryEntry(l10nIssue, report, id) {\n const issueNumberText = `${l10nIssue} ${report.number}`;\n const title = report.title\n ? html`<span style=\"text-transform: none\">: ${report.title}</span>`\n : \"\";\n return html`<li><a href=\"${`#${id}`}\">${issueNumberText}</a>${title}</li>`;\n}\n\n/**\n *\n * @param {HTMLUListElement} issueList\n */\nfunction makeIssueSectionSummary(issueList) {\n const issueSummaryElement = document.getElementById(\"issue-summary\");\n if (!issueSummaryElement) return;\n const heading = issueSummaryElement.querySelector(\"h2, h3, h4, h5, h6\");\n\n issueList.hasChildNodes()\n ? issueSummaryElement.append(issueList)\n : issueSummaryElement.append(html`<p>${l10n.no_issues_in_spec}</p>`);\n if (\n !heading ||\n (heading && heading !== issueSummaryElement.firstElementChild)\n ) {\n issueSummaryElement.insertAdjacentHTML(\n \"afterbegin\",\n `<h2>${l10n.issue_summary}</h2>`\n );\n }\n}\n\n/**\n * @param {GitHubLabel[]} labels\n * @param {string} title\n * @param {string} repoURL\n */\nfunction createLabelsGroup(labels, title, repoURL) {\n const labelsGroup = labels.map(label => createLabel(label, repoURL));\n const labelNames = labels.map(label => label.name);\n const joinedNames = joinAnd(labelNames);\n if (labelsGroup.length) {\n labelsGroup.unshift(document.createTextNode(\" \"));\n }\n if (labelNames.length) {\n const ariaLabel = `This issue is labelled as ${joinedNames}.`;\n return html`<span class=\"issue-label\" aria-label=\"${ariaLabel}\"\n >: ${title}${labelsGroup}</span\n >`;\n }\n return html`<span class=\"issue-label\">: ${title}${labelsGroup}</span>`;\n}\n\n/** @param {string} bgColorHex background color as a hex value without '#' */\nfunction textColorFromBgColor(bgColorHex) {\n return parseInt(bgColorHex, 16) > 0xffffff / 2 ? \"#000\" : \"#fff\";\n}\n\n/**\n * @param {GitHubLabel} label\n * @param {string} repoURL\n */\nfunction createLabel(label, repoURL) {\n const { color: bgColor, name } = label;\n const issuesURL = new URL(\"./issues/\", repoURL);\n issuesURL.searchParams.set(\"q\", `is:issue is:open label:\"${label.name}\"`);\n const color = textColorFromBgColor(bgColor);\n const style = `background-color: #${bgColor}; color: ${color}`;\n return html`<a\n class=\"respec-gh-label\"\n style=\"${style}\"\n href=\"${issuesURL.href}\"\n >${name}</a\n >`;\n}\n\n/**\n * @returns {Promise<Map<string, GitHubIssue>>}\n */\nasync function fetchAndStoreGithubIssues(github) {\n if (!github || !github.apiBase) {\n return new Map();\n }\n\n /** @type {NodeListOf<HTMLElement>} */\n const specIssues = document.querySelectorAll(\".issue[data-number]\");\n const issueNumbers = [...specIssues]\n .map(elem => Number.parseInt(elem.dataset.number, 10))\n .filter(issueNumber => issueNumber);\n\n if (!issueNumbers.length) {\n return new Map();\n }\n\n const url = new URL(\"issues\", `${github.apiBase}/${github.fullName}/`);\n url.searchParams.set(\"issues\", issueNumbers.join(\",\"));\n\n const response = await fetch(url.href);\n if (!response.ok) {\n const msg = `Error fetching issues from GitHub. (HTTP Status ${response.status}).`;\n showError(msg, name);\n return new Map();\n }\n\n /** @type {{ [issueNumber: string]: GitHubIssue }} */\n const issues = await response.json();\n return new Map(Object.entries(issues));\n}\n\nexport async function run(conf) {\n const query = \".issue, .note, .warning, .ednote\";\n /** @type {NodeListOf<HTMLElement>} */\n const issuesAndNotes = document.querySelectorAll(query);\n if (!issuesAndNotes.length) {\n return; // nothing to do.\n }\n const ghIssues = await fetchAndStoreGithubIssues(conf.github);\n const { head: headElem } = document;\n headElem.insertBefore(\n html`<style>\n ${css}\n </style>`,\n headElem.querySelector(\"link\")\n );\n handleIssues(issuesAndNotes, ghIssues, conf);\n const ednotes = document.querySelectorAll(\".ednote\");\n ednotes.forEach(ednote => {\n ednote.classList.remove(\"ednote\");\n ednote.classList.add(\"note\");\n });\n}\n","// @ts-check\n// Module core/best-practices\n// Handles the marking up of best practices, and can generate a summary of all of them.\n// The summary is generated if there is a section in the document with ID bp-summary.\n// Best practices are marked up with span.practicelab.\nimport { addId, getIntlData, makeSafeCopy, showWarning } from \"./utils.js\";\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/best-practices\";\n\nconst localizationStrings = {\n en: {\n best_practice: \"Best Practice \",\n },\n ja: {\n best_practice: \"最良実施例 \",\n },\n de: {\n best_practice: \"Musterbeispiel \",\n },\n zh: {\n best_practice: \"最佳实践 \",\n },\n};\nconst l10n = getIntlData(localizationStrings);\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const bps = document.querySelectorAll(\".practicelab\");\n const bpSummary = document.getElementById(\"bp-summary\");\n const summaryItems = bpSummary ? document.createElement(\"ul\") : null;\n [...bps].forEach((bp, num) => {\n const id = addId(bp, \"bp\");\n const localizedBpName = html`<a class=\"marker self-link\" href=\"${`#${id}`}\"\n ><bdi lang=\"${lang}\">${l10n.best_practice}${num + 1}</bdi></a\n >`;\n\n // Make the summary items, if we have a summary\n if (summaryItems) {\n const li = html`<li>${localizedBpName}: ${makeSafeCopy(bp)}</li>`;\n summaryItems.appendChild(li);\n }\n\n const container = bp.closest(\"div\");\n if (!container) {\n // This is just an inline best practice...\n bp.classList.add(\"advisement\");\n return;\n }\n\n // Make the advisement box\n container.classList.add(\"advisement\");\n const title = html`${localizedBpName.cloneNode(true)}: ${bp}`;\n container.prepend(...title.childNodes);\n });\n if (bps.length) {\n if (bpSummary) {\n bpSummary.appendChild(html`<h2>Best Practices Summary</h2>`);\n bpSummary.appendChild(summaryItems);\n }\n } else if (bpSummary) {\n const msg = `Using best practices summary (#bp-summary) but no best practices found.`;\n showWarning(msg, name);\n bpSummary.remove();\n }\n}\n","// @ts-check\n// Module core/figure\n// Handles figures in the document.\n// Adds width and height to images, if they are missing.\n// Generates a Table of Figures wherever there is a #tof element.\n\nimport {\n addId,\n getIntlData,\n renameElement,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/figures\";\n\nconst localizationStrings = {\n en: {\n list_of_figures: \"List of Figures\",\n fig: \"Figure \",\n },\n ja: {\n fig: \"図 \",\n list_of_figures: \"図のリスト\",\n },\n ko: {\n fig: \"그림 \",\n list_of_figures: \"그림 목록\",\n },\n nl: {\n fig: \"Figuur \",\n list_of_figures: \"Lijst met figuren\",\n },\n es: {\n fig: \"Figura \",\n list_of_figures: \"Lista de Figuras\",\n },\n zh: {\n fig: \"图 \",\n list_of_figures: \"规范中包含的图\",\n },\n de: {\n fig: \"Abbildung\",\n list_of_figures: \"Abbildungsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n normalizeImages(document);\n\n const tof = collectFigures();\n\n // Create a Table of Figures if a section with id 'tof' exists.\n const tofElement = document.getElementById(\"tof\");\n if (tof.length && tofElement) {\n decorateTableOfFigures(tofElement);\n tofElement.append(\n html`<h2>${l10n.list_of_figures}</h2>`,\n html`<ul class=\"tof\">\n ${tof}\n </ul>`\n );\n }\n}\n\n/**\n * process all figures\n */\nfunction collectFigures() {\n /** @type {HTMLElement[]} */\n const tof = [];\n document.querySelectorAll(\"figure\").forEach((fig, i) => {\n const caption = fig.querySelector(\"figcaption\");\n\n if (caption) {\n decorateFigure(fig, caption, i);\n tof.push(getTableOfFiguresListItem(fig.id, caption));\n } else {\n const msg = \"Found a `<figure>` without a `<figcaption>`.\";\n showWarning(msg, name, { elements: [fig] });\n }\n });\n return tof;\n}\n\n/**\n * @param {HTMLElement} figure\n * @param {HTMLElement} caption\n * @param {number} i\n */\nfunction decorateFigure(figure, caption, i) {\n const title = caption.textContent;\n addId(figure, \"fig\", title);\n // set proper caption title\n wrapInner(caption, html`<span class=\"fig-title\"></span>`);\n caption.prepend(l10n.fig, html`<bdi class=\"figno\">${i + 1}</bdi>`, \" \");\n}\n\n/**\n * @param {string} figureId\n * @param {HTMLElement} caption\n * @return {HTMLElement}\n */\nfunction getTableOfFiguresListItem(figureId, caption) {\n const tofCaption = caption.cloneNode(true);\n tofCaption.querySelectorAll(\"a\").forEach(anchor => {\n renameElement(anchor, \"span\").removeAttribute(\"href\");\n });\n return html`<li class=\"tofline\">\n <a class=\"tocxref\" href=\"${`#${figureId}`}\">${tofCaption.childNodes}</a>\n </li>`;\n}\n\nfunction normalizeImages(doc) {\n doc\n .querySelectorAll(\n \":not(picture)>img:not([width]):not([height]):not([srcset])\"\n )\n .forEach(img => {\n if (img.naturalHeight === 0 || img.naturalWidth === 0) return;\n img.height = img.naturalHeight;\n img.width = img.naturalWidth;\n });\n}\n\n/**\n * if it has a parent section, don't touch it\n * if it has a class of appendix or introductory, don't touch it\n * if all the preceding section siblings are introductory, make it introductory\n * if there is a preceding section sibling which is an appendix, make it appendix\n * @param {Element} tofElement\n */\nfunction decorateTableOfFigures(tofElement) {\n if (\n tofElement.classList.contains(\"appendix\") ||\n tofElement.classList.contains(\"introductory\") ||\n tofElement.closest(\"section\")\n ) {\n return;\n }\n\n const previousSections = getPreviousSections(tofElement);\n if (previousSections.every(sec => sec.classList.contains(\"introductory\"))) {\n tofElement.classList.add(\"introductory\");\n } else if (previousSections.some(sec => sec.classList.contains(\"appendix\"))) {\n tofElement.classList.add(\"appendix\");\n }\n}\n\n/**\n * @param {Element} element\n */\nfunction getPreviousSections(element) {\n /** @type {Element[]} */\n const sections = [];\n for (const previous of iteratePreviousElements(element)) {\n if (previous.localName === \"section\") {\n sections.push(previous);\n }\n }\n return sections;\n}\n\n/**\n * @param {Element} element\n */\nfunction* iteratePreviousElements(element) {\n let previous = element;\n while (previous.previousElementSibling) {\n previous = previous.previousElementSibling;\n yield previous;\n }\n}\n","// @ts-check\nimport { definitionMap, registerDefinition } from \"./dfn-map.js\";\nimport { showError, wrapInner } from \"./utils.js\";\n\nconst topLevelEntities = new Set([\n \"callback interface\",\n \"callback\",\n \"dictionary\",\n \"enum\",\n \"interface mixin\",\n \"interface\",\n \"typedef\",\n]);\n\n/**\n * This function looks for a <dfn> element whose title is 'name' and\n * that is \"for\" 'parent', which is the empty string when 'name'\n * refers to a top-level entity. For top-level entities, <dfn>\n * elements that inherit a non-empty [dfn-for] attribute are also\n * counted as matching.\n *\n * When a matching <dfn> is found, it's given <code> formatting,\n * marked as an IDL definition, and returned. If no <dfn> is found,\n * the function returns 'undefined'.\n * @param {*} defn\n * @param {string} name\n */\nexport function findDfn(defn, name, { parent = \"\" } = {}) {\n switch (defn.type) {\n case \"constructor\":\n case \"operation\":\n return findOperationDfn(defn, parent, name);\n default:\n return findNormalDfn(defn, parent, name);\n }\n}\n\n/**\n * @param {{ type: string, arguments: any[] }} idlAst\n * @param {string} parent\n * @param {string} name\n */\nfunction getAlternativeNames(idlAst, parent, name) {\n const { type } = idlAst;\n const asQualifiedName = `${parent}.${name}`;\n switch (type) {\n case \"constructor\":\n case \"operation\": {\n // Allow linking to \"method()\", method(arg) and \"method\" name.\n const asMethodName = `${name}()`;\n const asFullyQualifiedName = `${asQualifiedName}()`;\n const asMethodWithArgs = generateMethodNamesWithArgs(\n name,\n idlAst.arguments\n );\n return {\n local: [asQualifiedName, asFullyQualifiedName, name],\n exportable: [asMethodName, ...asMethodWithArgs],\n };\n }\n case \"attribute\":\n return {\n local: [asQualifiedName],\n exportable: [name],\n };\n }\n}\n\n/**\n * Generates all possible permutations of a method name based\n * on what arguments they method accepts.\n\n * Required arguments are always present, and optional ones\n * are stacked one by one.\n *\n * For examples: foo(req1, req2), foo(req1, req2, opt1) and so on.\n *\n * @param {String} operationName\n * @param {*} argsAst\n */\nfunction generateMethodNamesWithArgs(operationName, argsAst) {\n const operationNames = [];\n if (argsAst.length === 0) {\n return operationNames;\n }\n const required = []; // required arguments\n const optional = []; // optional arguments, including variadic ones\n for (const { name, optional: isOptional, variadic } of argsAst) {\n if (isOptional || variadic) {\n optional.push(name);\n } else {\n required.push(name);\n }\n }\n const requiredArgs = required.join(\", \");\n const requiredOperation = `${operationName}(${requiredArgs})`;\n operationNames.push(requiredOperation);\n const optionalOps = optional.map((_, index) => {\n const args = [...required, ...optional.slice(0, index + 1)].join(\", \");\n const result = `${operationName}(${args})`;\n return result;\n });\n operationNames.push(...optionalOps);\n return operationNames;\n}\n\n/**\n * @param {*} defn\n * @param {string} parent\n * @param {string} name\n */\nfunction findOperationDfn(defn, parent, name) {\n // Overloads all have unique names\n if (name.includes(\"!overload\")) {\n return findNormalDfn(defn, parent, name);\n }\n const asMethodName = `${name}()`;\n return findNormalDfn(defn, parent, asMethodName, name);\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {Record<\"local\" | \"exportable\", string[]>} names\n */\nfunction addAlternativeNames(dfn, names) {\n const { local, exportable } = names;\n const lt = dfn.dataset.lt ? new Set(dfn.dataset.lt.split(\"|\")) : new Set();\n for (const item of exportable) {\n lt.add(item);\n }\n // Fix any ill-placed ones - local ones don't belong here\n local.filter(item => lt.has(item)).forEach(item => lt.delete(item));\n dfn.dataset.lt = [...lt].join(\"|\");\n dfn.dataset.localLt = local.join(\"|\");\n registerDefinition(dfn, [...local, ...exportable]);\n}\n\n/**\n * @param {*} defn\n * @param {string} parent\n * @param {...string} names\n */\nfunction findNormalDfn(defn, parent, ...names) {\n const { type } = defn;\n for (const name of names) {\n let resolvedName =\n type === \"enum-value\" && name === \"\" ? \"the-empty-string\" : name;\n let dfns = getDfns(resolvedName, parent, name, type);\n // If we haven't found any definitions with explicit [for]\n // and [title], look for a dotted definition, \"parent.name\".\n if (dfns.length === 0 && parent !== \"\") {\n resolvedName = `${parent}.${resolvedName}`;\n const alternativeDfns = definitionMap.get(resolvedName);\n if (alternativeDfns && alternativeDfns.size === 1) {\n dfns = [...alternativeDfns];\n registerDefinition(dfns[0], [resolvedName]);\n }\n } else {\n resolvedName = name;\n }\n if (dfns.length > 1) {\n const msg = `WebIDL identifier \\`${name}\\` ${\n parent ? `for \\`${parent}\\`` : \"\"\n } is defined multiple times`;\n const title = \"Duplicate definition.\";\n showError(msg, name, { title, elements: dfns });\n }\n if (dfns.length) {\n return dfns[0];\n }\n }\n}\n\n/**\n * @param {HTMLElement} dfnElem\n * @param {*} idlAst\n * @param {string} parent\n * @param {string} name\n */\nexport function decorateDfn(dfnElem, idlAst, parent, name) {\n if (!dfnElem.id) {\n const lCaseParent = parent.toLowerCase();\n const middle = lCaseParent ? `${lCaseParent}-` : \"\";\n let last = name.toLowerCase().replace(/[()]/g, \"\").replace(/\\s/g, \"-\");\n if (last === \"\") last = \"the-empty-string\";\n dfnElem.id = `dom-${middle}${last}`;\n }\n dfnElem.dataset.idl = idlAst.type;\n dfnElem.dataset.title = dfnElem.textContent;\n dfnElem.dataset.dfnFor = parent;\n // Derive the data-type for dictionary members, interface attributes,\n // and methods\n switch (idlAst.type) {\n case \"operation\":\n case \"attribute\":\n case \"field\":\n dfnElem.dataset.type = getDataType(idlAst);\n break;\n }\n\n // Mark the definition as code.\n if (\n !dfnElem.querySelector(\"code\") &&\n !dfnElem.closest(\"code\") &&\n dfnElem.children\n ) {\n wrapInner(dfnElem, dfnElem.ownerDocument.createElement(\"code\"));\n }\n\n // Add data-lt and data-local-lt values and register them\n switch (idlAst.type) {\n case \"attribute\":\n case \"constructor\":\n case \"operation\":\n addAlternativeNames(dfnElem, getAlternativeNames(idlAst, parent, name));\n break;\n }\n\n return dfnElem;\n}\n\n/**\n * @param {string} name\n * @param {string} parent data-dfn-for\n * @param {string} originalName\n * @param {string} type\n */\nfunction getDfns(name, parent, originalName, type) {\n const foundDfns = definitionMap.get(name);\n if (!foundDfns || foundDfns.size === 0) {\n return [];\n }\n const dfnForArray = [...foundDfns];\n // Definitions that have a name and [data-dfn-for] that exactly match the\n // IDL entity:\n const dfns = dfnForArray.filter(dfn => {\n // This is explicitly marked as a concept, so we can't use it\n if (dfn.dataset.dfnType === \"dfn\") return false;\n\n /** @type {HTMLElement} */\n const closestDfnFor = dfn.closest(`[data-dfn-for]`);\n return closestDfnFor && closestDfnFor.dataset.dfnFor === parent;\n });\n\n if (dfns.length === 0 && parent === \"\" && dfnForArray.length === 1) {\n // Make sure the name exactly matches\n return dfnForArray[0].textContent === originalName ? dfnForArray : [];\n } else if (topLevelEntities.has(type) && dfnForArray.length) {\n const dfn = dfnForArray.find(\n dfn => dfn.textContent.trim() === originalName\n );\n if (dfn) return [dfn];\n }\n return dfns;\n}\n\n/**\n * @return {string}\n */\nfunction getDataType(idlStruct = {}) {\n const { idlType, generic, union } = idlStruct;\n if (idlType === undefined) return \"\";\n if (typeof idlType === \"string\") return idlType;\n if (generic) return generic;\n // join on \"|\" handles for \"unsigned short\" etc.\n if (union) return idlType.map(getDataType).join(\"|\");\n return getDataType(idlType);\n}\n","// @ts-check\n/**\n * Module core/webidl-clipboard\n *\n * This module adds a button to each IDL pre making it possible to copy\n * well-formatted IDL to the clipboard.\n *\n */\nexport const name = \"core/webidl-clipboard\";\n\nfunction createButton() {\n const copyButton = document.createElement(\"button\");\n copyButton.innerHTML =\n '<svg height=\"16\" viewBox=\"0 0 14 16\" width=\"14\"><path fill-rule=\"evenodd\" d=\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"/></svg>';\n copyButton.title = \"Copy IDL to clipboard\";\n copyButton.classList.add(\"respec-button-copy-paste\", \"removeOnSave\");\n return copyButton;\n}\n\nconst copyButton = createButton();\n\n/**\n * Adds a HTML button that copies WebIDL to the clipboard.\n *\n * @param {HTMLSpanElement} idlHeader\n */\nexport function addCopyIDLButton(idlHeader) {\n // There may be multiple <span>s of IDL, so we take everything\n // apart from the idl header.\n const pre = idlHeader.closest(\"pre.idl\");\n const idl = pre.cloneNode(true);\n idl.querySelector(\".idlHeader\").remove();\n const { textContent: idlText } = idl;\n const button = copyButton.cloneNode(true);\n button.addEventListener(\"click\", () => {\n navigator.clipboard.writeText(idlText);\n });\n idlHeader.append(button);\n}\n","/* --- WEB IDL --- */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\npre.idl {\n padding: 1em;\n position: relative;\n}\n\npre.idl > code {\n color: black;\n}\n\n@media print {\n pre.idl {\n white-space: pre-wrap;\n }\n}\n\n.idlHeader {\n display: block;\n width: 150px;\n background: #8ccbf2;\n color: #fff;\n font-family: sans-serif;\n font-weight: bold;\n margin: -1em 0 1em -1em;\n height: 28px;\n line-height: 28px;\n}\n\n.idlHeader a.self-link {\n margin-left: .3cm;\n text-decoration: none;\n border-bottom: none;\n}\n\n.idlID {\n font-weight: bold;\n color: #005a9c;\n}\n\n.idlType {\n color: #005a9c;\n}\n\n.idlName {\n color: #ff4500;\n}\n\n.idlName a {\n color: #ff4500;\n border-bottom: 1px dotted #ff4500;\n text-decoration: none;\n}\n\na.idlEnumItem {\n color: #000;\n border-bottom: 1px dotted #ccc;\n text-decoration: none;\n}\n\n.idlSuperclass {\n font-style: italic;\n color: #005a9c;\n}\n\n\n/*.idlParam*/\n\n.idlParamName,\n.idlDefaultValue {\n font-style: italic;\n}\n\n.extAttr {\n color: #666;\n}\n\n\n/*.idlSectionComment*/\n\n.idlSectionComment {\n color: gray;\n}\n\n.idlIncludes a {\n font-weight: bold;\n}\n\n.respec-button-copy-paste:focus {\n text-decoration: none;\n border-color: #51a7e8;\n outline: none;\n box-shadow: 0 0 5px rgba(81, 167, 232, 0.5);\n}\n\n.respec-button-copy-paste:focus:hover,\n.respec-button-copy-paste.selected:focus {\n border-color: #51a7e8;\n}\n\n.respec-button-copy-paste:hover,\n.respec-button-copy-paste:active,\n.respec-button-copy-paste.zeroclipboard-is-hover,\n.respec-button-copy-paste.zeroclipboard-is-active {\n text-decoration: none;\n background-color: #ddd;\n background-image: linear-gradient(#eee, #ddd);\n border-color: #ccc;\n}\n\n.respec-button-copy-paste:active,\n.respec-button-copy-paste.selected,\n.respec-button-copy-paste.zeroclipboard-is-active {\n background-color: #dcdcdc;\n background-image: none;\n border-color: #b5b5b5;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15)\n}\n\n.respec-button-copy-paste.selected:hover {\n background-color: #cfcfcf;\n}\n\n.respec-button-copy-paste:disabled,\n.respec-button-copy-paste:disabled:hover,\n.respec-button-copy-paste.disabled,\n.respec-button-copy-paste.disabled:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n border-color: rgba(197, 197, 197, 0.5);\n box-shadow: none;\n}\n\n@media print {\n .respec-button-copy-paste {\n visibility: hidden;\n }\n}\n`;\n","// Module core/webidl\n// Highlights and links WebIDL marked up inside <pre class=\"idl\">.\n\n// TODO:\n// - It could be useful to report parsed IDL items as events\n// - don't use generated content in the CSS!\nimport {\n addHashId,\n showError,\n showWarning,\n wrapInner,\n xmlEscape,\n} from \"./utils.js\";\nimport { decorateDfn, findDfn } from \"./dfn-finder.js\";\nimport { html, webidl2 } from \"./import-maps.js\";\nimport { addCopyIDLButton } from \"./webidl-clipboard.js\";\nimport css from \"../styles/webidl.css.js\";\nimport { registerDefinition } from \"./dfn-map.js\";\n\nexport const name = \"core/webidl\";\nconst pluginName = name;\n\nconst operationNames = {};\nconst idlPartials = {};\n\nconst templates = {\n wrap(items) {\n return items\n .flat()\n .filter(x => x !== \"\")\n .map(x => (typeof x === \"string\" ? new Text(x) : x));\n },\n trivia(t) {\n if (!t.trim()) {\n return t;\n }\n return html`<span class=\"idlSectionComment\">${t}</span>`;\n },\n generic(keyword) {\n // Shepherd classifies \"interfaces\" as starting with capital letters,\n // like Promise, FrozenArray, etc.\n return /^[A-Z]/.test(keyword)\n ? html`<a data-xref-type=\"interface\" data-cite=\"WebIDL\">${keyword}</a>`\n : // Other keywords like sequence, maplike, etc...\n html`<a data-xref-type=\"dfn\" data-cite=\"WebIDL\">${keyword}</a>`;\n },\n reference(wrapped, unescaped, context) {\n if (context.type === \"extended-attribute\" && context.name !== \"Exposed\") {\n return wrapped;\n }\n let type = \"_IDL_\";\n let cite = null;\n let lt;\n switch (unescaped) {\n case \"Window\":\n type = \"interface\";\n cite = \"HTML\";\n break;\n case \"object\":\n type = \"interface\";\n cite = \"WebIDL\";\n break;\n default: {\n const isWorkerType = unescaped.includes(\"Worker\");\n if (isWorkerType && context.type === \"extended-attribute\") {\n lt = `${unescaped}GlobalScope`;\n type = \"interface\";\n cite = [\"Worker\", \"DedicatedWorker\", \"SharedWorker\"].includes(\n unescaped\n )\n ? \"HTML\"\n : null;\n }\n }\n }\n return html`<a data-xref-type=\"${type}\" data-cite=\"${cite}\" data-lt=\"${lt}\"\n >${wrapped}</a\n >`;\n },\n name(escaped, { data, parent }) {\n if (data.idlType && data.idlType.type === \"argument-type\") {\n return html`<span class=\"idlParamName\">${escaped}</span>`;\n }\n const idlLink = defineIdlName(escaped, data, parent);\n if (data.type !== \"enum-value\") {\n const className = parent ? \"idlName\" : \"idlID\";\n idlLink.classList.add(className);\n }\n return idlLink;\n },\n nameless(escaped, { data, parent }) {\n switch (data.type) {\n case \"operation\":\n case \"constructor\":\n return defineIdlName(escaped, data, parent);\n default:\n return escaped;\n }\n },\n type(contents) {\n return html`<span class=\"idlType\">${contents}</span>`;\n },\n inheritance(contents) {\n return html`<span class=\"idlSuperclass\">${contents}</span>`;\n },\n definition(contents, { data, parent }) {\n const className = getIdlDefinitionClassName(data);\n switch (data.type) {\n case \"includes\":\n case \"enum-value\":\n return html`<span class=\"${className}\">${contents}</span>`;\n }\n const parentName = parent ? parent.name : \"\";\n const { name, idlId } = getNameAndId(data, parentName);\n return html`<span\n class=\"${className}\"\n id=\"${idlId}\"\n data-idl\n data-title=\"${name}\"\n >${contents}</span\n >`;\n },\n extendedAttribute(contents) {\n const result = html`<span class=\"extAttr\">${contents}</span>`;\n return result;\n },\n extendedAttributeReference(name) {\n return html`<a data-xref-type=\"extended-attribute\">${name}</a>`;\n },\n};\n\n/**\n * Returns a link to existing <dfn> or creates one if doesn’t exists.\n */\nfunction defineIdlName(escaped, data, parent) {\n const parentName = parent ? parent.name : \"\";\n const { name } = getNameAndId(data, parentName);\n const dfn = findDfn(data, name, {\n parent: parentName,\n });\n const linkType = getDfnType(data.type);\n if (dfn) {\n if (!data.partial) {\n dfn.dataset.export = \"\";\n dfn.dataset.dfnType = linkType;\n }\n decorateDfn(dfn, data, parentName, name);\n const href = `#${dfn.id}`;\n return html`<a\n data-link-for=\"${parentName}\"\n data-link-type=\"${linkType}\"\n href=\"${href}\"\n class=\"internalDFN\"\n ><code>${escaped}</code></a\n >`;\n }\n\n const isDefaultJSON =\n data.type === \"operation\" &&\n data.name === \"toJSON\" &&\n data.extAttrs.some(({ name }) => name === \"Default\");\n if (isDefaultJSON) {\n return html`<a data-link-type=\"dfn\" data-lt=\"default toJSON steps\"\n >${escaped}</a\n >`;\n }\n if (!data.partial) {\n const dfn = html`<dfn data-export data-dfn-type=\"${linkType}\"\n >${escaped}</dfn\n >`;\n registerDefinition(dfn, [name]);\n decorateDfn(dfn, data, parentName, name);\n return dfn;\n }\n\n const unlinkedAnchor = html`<a\n data-idl=\"${data.partial ? \"partial\" : null}\"\n data-link-type=\"${linkType}\"\n data-title=\"${data.name}\"\n data-xref-type=\"${linkType}\"\n >${escaped}</a\n >`;\n\n const showWarnings =\n name && data.type !== \"typedef\" && !(data.partial && !dfn);\n if (showWarnings) {\n const styledName = data.type === \"operation\" ? `${name}()` : name;\n const ofParent = parentName ? ` \\`${parentName}\\`'s` : \"\";\n const msg = `Missing \\`<dfn>\\` for${ofParent} \\`${styledName}\\` ${data.type}. [More info](https://github.com/w3c/respec/wiki/WebIDL-thing-is-not-defined).`;\n showWarning(msg, pluginName, { elements: [unlinkedAnchor] });\n }\n return unlinkedAnchor;\n}\n\n/**\n * Map to Shepherd types, for export.\n * @see https://tabatkins.github.io/bikeshed/#dfn-types\n */\nfunction getDfnType(idlType) {\n switch (idlType) {\n case \"operation\":\n return \"method\";\n case \"field\":\n return \"dict-member\";\n case \"callback interface\":\n case \"interface mixin\":\n return \"interface\";\n default:\n return idlType;\n }\n}\n\nfunction getIdlDefinitionClassName(defn) {\n switch (defn.type) {\n case \"callback interface\":\n return \"idlInterface\";\n case \"operation\":\n return \"idlMethod\";\n case \"field\":\n return \"idlMember\";\n case \"enum-value\":\n return \"idlEnumItem\";\n case \"callback function\":\n return \"idlCallback\";\n }\n return `idl${defn.type[0].toUpperCase()}${defn.type.slice(1)}`;\n}\n\nconst nameResolverMap = new WeakMap();\nfunction getNameAndId(defn, parent = \"\") {\n if (nameResolverMap.has(defn)) {\n return nameResolverMap.get(defn);\n }\n const result = resolveNameAndId(defn, parent);\n nameResolverMap.set(defn, result);\n return result;\n}\n\nfunction resolveNameAndId(defn, parent) {\n let name = getDefnName(defn);\n // For getters, setters, etc. \"anonymous-getter\",\n const prefix = defn.special && defn.name === \"\" ? \"anonymous-\" : \"\";\n let idlId = getIdlId(prefix + name, parent);\n switch (defn.type) {\n // Top-level entities with linkable members.\n case \"callback interface\":\n case \"dictionary\":\n case \"interface\":\n case \"interface mixin\": {\n idlId += resolvePartial(defn);\n break;\n }\n case \"constructor\":\n case \"operation\": {\n const overload = resolveOverload(name, parent);\n if (overload) {\n name += overload;\n idlId += overload;\n } else if (defn.arguments.length) {\n idlId += defn.arguments\n .map(arg => `-${arg.name.toLowerCase()}`)\n .join(\"\");\n }\n break;\n }\n }\n return { name, idlId };\n}\n\nfunction resolvePartial(defn) {\n if (!defn.partial) {\n return \"\";\n }\n if (!idlPartials[defn.name]) {\n idlPartials[defn.name] = 0;\n }\n idlPartials[defn.name] += 1;\n return `-partial-${idlPartials[defn.name]}`;\n}\n\nfunction resolveOverload(name, parentName) {\n const qualifiedName = `${parentName}.${name}`;\n const fullyQualifiedName = `${qualifiedName}()`;\n let overload;\n if (!operationNames[fullyQualifiedName]) {\n operationNames[fullyQualifiedName] = 0;\n }\n if (!operationNames[qualifiedName]) {\n operationNames[qualifiedName] = 0;\n } else {\n overload = `!overload-${operationNames[qualifiedName]}`;\n }\n operationNames[fullyQualifiedName] += 1;\n operationNames[qualifiedName] += 1;\n return overload || \"\";\n}\n\nfunction getIdlId(name, parentName) {\n if (!parentName) {\n return `idl-def-${name.toLowerCase()}`;\n }\n return `idl-def-${parentName.toLowerCase()}-${name.toLowerCase()}`;\n}\n\nfunction getDefnName(defn) {\n switch (defn.type) {\n case \"enum-value\":\n return defn.value;\n case \"operation\":\n return defn.name || defn.special;\n default:\n return defn.name || defn.type;\n }\n}\n\n/**\n * @param {Element} idlElement\n * @param {number} index\n */\nfunction renderWebIDL(idlElement, index) {\n let parse;\n try {\n parse = webidl2.parse(idlElement.textContent, {\n sourceName: String(index),\n });\n } catch (e) {\n const msg = `Failed to parse WebIDL: ${e.bareMessage}.`;\n showError(msg, pluginName, {\n title: e.bareMessage,\n details: `<pre>${e.context}</pre>`,\n elements: [idlElement],\n });\n // Skip this <pre> and move on to the next one.\n return [];\n }\n // we add \"idl\" as the canonical match, so both \"webidl\" and \"idl\" work\n idlElement.classList.add(\"def\", \"idl\");\n const highlights = webidl2.write(parse, { templates });\n html.bind(idlElement)`${highlights}`;\n wrapInner(idlElement, document.createElement(\"code\"));\n idlElement.querySelectorAll(\"[data-idl]\").forEach(elem => {\n if (elem.dataset.dfnFor) {\n return;\n }\n const title = elem.dataset.title;\n // Select the nearest ancestor element that can contain members.\n const parent = elem.parentElement.closest(\"[data-idl][data-title]\");\n if (parent) {\n elem.dataset.dfnFor = parent.dataset.title;\n }\n if (elem.localName === \"dfn\") {\n registerDefinition(elem, [title]);\n }\n });\n // cross reference\n const closestCite = idlElement.closest(\"[data-cite], body\");\n const { dataset } = closestCite;\n if (!dataset.cite) dataset.cite = \"WebIDL\";\n // includes webidl in some form\n if (!/\\bwebidl\\b/i.test(dataset.cite)) {\n const cites = dataset.cite.trim().split(/\\s+/);\n dataset.cite = [\"WebIDL\", ...cites].join(\" \");\n }\n addIDLHeader(idlElement);\n return parse;\n}\n/**\n * Adds a \"WebIDL\" decorative header/permalink to a block of WebIDL.\n * @param {HTMLPreElement} pre\n */\nexport function addIDLHeader(pre) {\n addHashId(pre, \"webidl\");\n const header = html`<span class=\"idlHeader\"\n ><a class=\"self-link\" href=\"${`#${pre.id}`}\">WebIDL</a></span\n >`;\n pre.prepend(header);\n addCopyIDLButton(header);\n}\n\nexport async function run() {\n const idls = document.querySelectorAll(\"pre.idl, pre.webidl\");\n if (!idls.length) {\n return;\n }\n if (!document.querySelector(\".idl:not(pre), .webidl:not(pre)\")) {\n const link = document.querySelector(\"head link\");\n if (link) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n link.before(style);\n }\n }\n\n const astArray = [...idls].map(renderWebIDL);\n\n const validations = webidl2.validate(astArray);\n for (const validation of validations) {\n let details = `<pre>${xmlEscape(validation.context)}</pre>`;\n if (validation.autofix) {\n validation.autofix();\n const idlToFix = webidl2.write(astArray[validation.sourceName]);\n const escaped = xmlEscape(idlToFix);\n details += `Try fixing as:\n <pre>${escaped}</pre>`;\n }\n const msg = `WebIDL validation error: ${validation.bareMessage}`;\n showError(msg, pluginName, {\n details,\n elements: [idls[validation.sourceName]],\n title: validation.bareMessage,\n });\n }\n document.normalize();\n}\n","// @ts-check\n/**\n * Module core/data-cite\n *\n * Allows citing other specifications using anchor elements. Simply add\n * \"data-cite\" and key of specification.\n *\n * This module links elements that have `data-cite` attributes by converting\n * `data-cite` to `href` attributes. `data-cite` attributes are added to markup\n * directly by the author as well as via other modules like core/xref.\n */\nimport { biblio, resolveRef, updateFromNetwork } from \"./biblio.js\";\nimport {\n refTypeFromContext,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\nexport const name = \"core/data-cite\";\n\n/**\n * An arbitrary constant value used as an alias to current spec's shortname. It\n * exists to simplify code as passing `conf.shortName` everywhere gets clumsy.\n */\nexport const THIS_SPEC = \"__SPEC__\";\n\n/**\n * @param {CiteDetails} citeDetails\n */\nasync function getLinkProps(citeDetails) {\n const { key, frag, path } = citeDetails;\n let href = \"\";\n let title = \"\";\n // This is just referring to this document\n if (key === THIS_SPEC) {\n href = document.location.href;\n } else {\n // Let's go look it up in spec ref...\n const entry = await resolveRef(key);\n if (!entry) {\n return null;\n }\n href = entry.href;\n title = entry.title;\n }\n if (path) {\n // See: https://github.com/w3c/respec/issues/1856#issuecomment-429579475\n const relPath = path.startsWith(\"/\") ? `.${path}` : path;\n href = new URL(relPath, href).href;\n }\n if (frag) {\n href = new URL(frag, href).href;\n }\n return { href, title };\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {object} linkProps\n * @param {string} linkProps.href\n * @param {string} linkProps.title\n * @param {CiteDetails} citeDetails\n */\nfunction linkElem(elem, linkProps, citeDetails) {\n const { href, title } = linkProps;\n const wrapInCiteEl = !citeDetails.path && !citeDetails.frag;\n\n if (elem.localName === \"a\") {\n const anchor = /** @type {HTMLAnchorElement} */ (elem);\n if (anchor.textContent === \"\" && anchor.dataset.lt !== \"the-empty-string\") {\n anchor.textContent = title;\n }\n anchor.href = href;\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n anchor.replaceWith(cite);\n cite.append(anchor);\n }\n return;\n }\n\n if (elem.localName === \"dfn\") {\n const anchor = document.createElement(\"a\");\n anchor.href = href;\n if (!elem.textContent) {\n anchor.textContent = title;\n elem.append(anchor);\n } else {\n wrapInner(elem, anchor);\n }\n if (wrapInCiteEl) {\n const cite = document.createElement(\"cite\");\n cite.append(anchor);\n elem.append(cite);\n }\n if (\"export\" in elem.dataset) {\n const msg = \"Exporting an linked external definition is not allowed.\";\n const hint = \"Please remove the `data-export` attribute.\";\n showError(msg, name, { hint, elements: [elem] });\n delete elem.dataset.export;\n }\n elem.dataset.noExport = \"\";\n }\n}\n\n/**\n * @param {string} component\n * @return {(key: string) => string}\n */\nfunction makeComponentFinder(component) {\n return key => {\n const position = key.search(component);\n return position !== -1 ? key.substring(position) : \"\";\n };\n}\n\nconst findFrag = makeComponentFinder(\"#\");\nconst findPath = makeComponentFinder(\"/\");\n\n/**\n * @typedef {object} CiteDetails\n * @property {string} key\n * @property {boolean} isNormative\n * @property {string} frag\n * @property {string} path\n *\n * @param {HTMLElement} elem\n * @return {CiteDetails};\n */\nexport function toCiteDetails(elem) {\n const { dataset } = elem;\n const { cite: rawKey, citeFrag, citePath } = dataset;\n // The key is a fragment, resolve using the shortName as key\n if (rawKey.startsWith(\"#\") && !citeFrag) {\n // Closes data-cite not starting with \"#\"\n /** @type {HTMLElement} */\n const closest = elem.parentElement.closest(\n `[data-cite]:not([data-cite^=\"#\"])`\n );\n const { key: parentKey, isNormative: closestIsNormative } = closest\n ? toCiteDetails(closest)\n : { key: THIS_SPEC, isNormative: false };\n dataset.cite = closestIsNormative ? parentKey : `?${parentKey}`;\n dataset.citeFrag = rawKey.replace(\"#\", \"\"); // the key is acting as fragment\n return toCiteDetails(elem);\n }\n const frag = citeFrag ? `#${citeFrag}` : findFrag(rawKey);\n const path = citePath || findPath(rawKey).split(\"#\")[0]; // path is always before \"#\"\n const { type } = refTypeFromContext(rawKey, elem);\n const isNormative = type === \"normative\";\n // key is before \"/\" and \"#\" but after \"!\" or \"?\" (e.g., ?key/path#frag)\n const hasPrecedingMark = /^[?|!]/.test(rawKey);\n const key = rawKey.split(/[/|#]/)[0].substring(Number(hasPrecedingMark));\n const details = { key, isNormative, frag, path };\n return details;\n}\n\nexport async function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n\n await updateBiblio([...elems]);\n\n for (const elem of elems) {\n const originalKey = elem.dataset.cite;\n const citeDetails = toCiteDetails(elem);\n const linkProps = await getLinkProps(citeDetails);\n if (linkProps) {\n linkElem(elem, linkProps, citeDetails);\n } else {\n const msg = `Couldn't find a match for \"${originalKey}\"`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Fetch and update `biblio` with entries corresponding to given elements\n * @param {HTMLElement[]} elems\n */\nasync function updateBiblio(elems) {\n const promisesForBibEntries = elems.map(toCiteDetails).map(async entry => {\n const result = await resolveRef(entry.key);\n return { entry, result };\n });\n const bibEntries = await Promise.all(promisesForBibEntries);\n\n const missingBibEntries = bibEntries\n .filter(({ result }) => result === null)\n .map(({ entry: { key } }) => key);\n\n const newEntries = await updateFromNetwork(missingBibEntries);\n if (newEntries) {\n Object.assign(biblio, newEntries);\n }\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n const attrToRemove = [\"data-cite\", \"data-cite-frag\", \"data-cite-path\"];\n const elems = doc.querySelectorAll(\"a[data-cite], dfn[data-cite]\");\n elems.forEach(elem =>\n attrToRemove.forEach(attr => elem.removeAttribute(attr))\n );\n}\n","// @ts-check\n// Module core/link-to-dfn\n// Gives definitions in definitionMap IDs and links <a> tags\n// to the matching definitions.\nimport {\n CaseInsensitiveMap,\n addId,\n getIntlData,\n getLinkTargets,\n showError,\n showWarning,\n wrapInner,\n} from \"./utils.js\";\nimport { THIS_SPEC, toCiteDetails } from \"./data-cite.js\";\nimport { definitionMap } from \"./dfn-map.js\";\n\nexport const name = \"core/link-to-dfn\";\n\n/** @type {HTMLElement[]} */\nexport const possibleExternalLinks = [];\n\nconst localizationStrings = {\n en: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Duplicate definition(s) of '${title}'`;\n },\n duplicateTitle: \"This is defined more than once in the document.\",\n },\n ja: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' の重複定義`;\n },\n duplicateTitle: \"この文書内で複数回定義されています.\",\n },\n de: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `Mehrfache Definition von '${title}'`;\n },\n duplicateTitle:\n \"Das Dokument enthält mehrere Definitionen dieses Eintrags.\",\n },\n zh: {\n /**\n * @param {string} title\n */\n duplicateMsg(title) {\n return `'${title}' 的重复定义`;\n },\n duplicateTitle: \"在文档中有重复的定义。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nexport async function run(conf) {\n const titleToDfns = mapTitleToDfns();\n /** @type {HTMLAnchorElement[]} */\n const badLinks = [];\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const localAnchors = document.querySelectorAll(\n \"a[data-cite=''], a:not([href]):not([data-cite]):not(.logo):not(.externalDFN)\"\n );\n for (const anchor of localAnchors) {\n const dfn = findMatchingDfn(anchor, titleToDfns);\n if (dfn) {\n const foundLocalMatch = processAnchor(anchor, dfn, titleToDfns);\n if (!foundLocalMatch) {\n possibleExternalLinks.push(anchor);\n }\n } else {\n if (anchor.dataset.cite === \"\") {\n badLinks.push(anchor);\n } else {\n possibleExternalLinks.push(anchor);\n }\n }\n }\n\n showLinkingError(badLinks);\n\n // This needs to run before core/xref adds its data-cite and updates\n // conf.normativeReferences and conf.informativeReferences.\n updateReferences(conf);\n\n if (!conf.xref) {\n showLinkingError(possibleExternalLinks);\n }\n}\n\nfunction mapTitleToDfns() {\n /** @type {CaseInsensitiveMap<Map<string, Map<string, HTMLElement>>>} */\n const titleToDfns = new CaseInsensitiveMap();\n for (const key of definitionMap.keys()) {\n const { result, duplicates } = collectDfns(key);\n titleToDfns.set(key, result);\n if (duplicates.length > 0) {\n showError(l10n.duplicateMsg(key), name, {\n title: l10n.duplicateTitle,\n elements: duplicates,\n });\n }\n }\n return titleToDfns;\n}\n\n/**\n * @param {string} title\n */\nfunction collectDfns(title) {\n /** @type {Map<string, Map<string, HTMLElement>>} */\n const result = new Map();\n const duplicates = [];\n for (const dfn of definitionMap.get(title)) {\n const { dfnFor = \"\", dfnType = \"dfn\" } = dfn.dataset;\n // check for potential duplicate definition\n if (result.has(dfnFor) && result.get(dfnFor).has(dfnType)) {\n const oldDfn = result.get(dfnFor).get(dfnType);\n // We want <dfn> definitions to take precedence over\n // definitions from WebIDL. WebIDL definitions wind\n // up as <span>s instead of <dfn>.\n const oldIsDfn = oldDfn.localName === \"dfn\";\n const newIsDfn = dfn.localName === \"dfn\";\n const isSameDfnType = dfnType === (oldDfn.dataset.dfnType || \"dfn\");\n const isSameDfnFor = dfnFor === (oldDfn.dataset.dfnFor || \"\");\n if (oldIsDfn && newIsDfn && isSameDfnType && isSameDfnFor) {\n duplicates.push(dfn);\n continue;\n }\n }\n const type = \"idl\" in dfn.dataset || dfnType !== \"dfn\" ? \"idl\" : \"dfn\";\n if (!result.has(dfnFor)) {\n result.set(dfnFor, new Map());\n }\n result.get(dfnFor).set(type, dfn);\n addId(dfn, \"dfn\", title);\n }\n\n return { result, duplicates };\n}\n\n/**\n * Find a potentially matching <dfn> for given anchor.\n * @param {HTMLAnchorElement} anchor\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction findMatchingDfn(anchor, titleToDfns) {\n const linkTargets = getLinkTargets(anchor);\n const target = linkTargets.find(\n target =>\n titleToDfns.has(target.title) &&\n titleToDfns.get(target.title).has(target.for)\n );\n if (!target) return;\n\n const dfnsByType = titleToDfns.get(target.title).get(target.for);\n const { linkType } = anchor.dataset;\n if (linkType) {\n const type = linkType === \"dfn\" ? \"dfn\" : \"idl\";\n return dfnsByType.get(type) || dfnsByType.get(\"dfn\");\n } else {\n // Assumption: if it's for something, it's more likely IDL.\n const type = target.for ? \"idl\" : \"dfn\";\n return dfnsByType.get(type) || dfnsByType.get(\"idl\");\n }\n}\n\n/**\n * @param {HTMLAnchorElement} anchor\n * @param {HTMLElement} dfn\n * @param {ReturnType<typeof mapTitleToDfns>} titleToDfns\n */\nfunction processAnchor(anchor, dfn, titleToDfns) {\n let noLocalMatch = false;\n const { linkFor } = anchor.dataset;\n const { dfnFor } = dfn.dataset;\n if (dfn.dataset.cite) {\n anchor.dataset.cite = dfn.dataset.cite;\n } else if (linkFor && !titleToDfns.get(linkFor) && linkFor !== dfnFor) {\n noLocalMatch = true;\n } else if (dfn.classList.contains(\"externalDFN\")) {\n // data-lt[0] serves as unique id for the dfn which this element references\n const lt = dfn.dataset.lt ? dfn.dataset.lt.split(\"|\") : [];\n anchor.dataset.lt = lt[0] || dfn.textContent;\n noLocalMatch = true;\n } else if (anchor.dataset.idl !== \"partial\") {\n anchor.href = `#${dfn.id}`;\n anchor.classList.add(\"internalDFN\");\n } else {\n noLocalMatch = true;\n }\n if (!anchor.hasAttribute(\"data-link-type\")) {\n anchor.dataset.linkType = \"idl\" in dfn.dataset ? \"idl\" : \"dfn\";\n }\n if (isCode(dfn)) {\n wrapAsCode(anchor, dfn);\n }\n return !noLocalMatch;\n}\n\n/**\n * Check if a definition is a code\n * @param {HTMLElement} dfn a definition\n */\nfunction isCode(dfn) {\n if (dfn.closest(\"code,pre\")) {\n return true;\n }\n // Note that childNodes.length === 1 excludes\n // definitions that have either other text, or other\n // whitespace, inside the <dfn>.\n if (dfn.childNodes.length !== 1) {\n return false;\n }\n const [first] = /** @type {NodeListOf<HTMLElement>} */ (dfn.childNodes);\n return first.localName === \"code\";\n}\n\n/**\n * Wrap links by <code>.\n * @param {HTMLAnchorElement} anchor a link\n * @param {HTMLElement} dfn a definition\n */\nfunction wrapAsCode(anchor, dfn) {\n // only add code to IDL when the definition matches\n const term = anchor.textContent.trim();\n const isIDL = dfn.dataset.hasOwnProperty(\"idl\");\n const needsCode = shouldWrapByCode(anchor) && shouldWrapByCode(dfn, term);\n if (!isIDL || needsCode) {\n wrapInner(anchor, document.createElement(\"code\"));\n }\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {string} term\n */\nfunction shouldWrapByCode(elem, term = \"\") {\n switch (elem.localName) {\n case \"a\":\n if (!elem.querySelector(\"code\")) {\n return true;\n }\n break;\n default: {\n const { dataset } = elem;\n if (elem.textContent.trim() === term) {\n return true;\n } else if (dataset.title === term) {\n return true;\n } else if (dataset.lt || dataset.localLt) {\n const terms = [];\n if (dataset.lt) {\n terms.push(...dataset.lt.split(\"|\"));\n }\n if (dataset.localLt) {\n terms.push(...dataset.localLt.split(\"|\"));\n }\n return terms.includes(term);\n }\n }\n }\n return false;\n}\n\nfunction showLinkingError(elems) {\n elems.forEach(elem => {\n const msg = `Found linkless \\`<a>\\` element with text \"${elem.textContent}\" but no matching \\`<dfn>\\``;\n const title = \"Linking error: not matching `<dfn>`\";\n showWarning(msg, name, { title, elements: [elem] });\n });\n}\n\n/**\n * Update references due to `data-cite` attributes.\n *\n * Also, make sure self-citing doesn't cause current document getting added to\n * bibliographic references section.\n * @param {Conf} conf\n */\nfunction updateReferences(conf) {\n const { shortName = \"\" } = conf;\n // Match shortName in a data-cite (with optional leading ?!), while skipping shortName as prefix.\n // https://regex101.com/r/rsZyIJ/5\n const regex = new RegExp(String.raw`^([?!])?${shortName}\\b([^-])`, \"i\");\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[data-cite]:not([data-cite='']), a[data-cite]:not([data-cite=''])\"\n );\n for (const elem of elems) {\n elem.dataset.cite = elem.dataset.cite.replace(regex, `$1${THIS_SPEC}$2`);\n const { key, isNormative } = toCiteDetails(elem);\n if (key === THIS_SPEC) continue;\n\n if (!isNormative && !conf.normativeReferences.has(key)) {\n conf.informativeReferences.add(key);\n } else {\n conf.normativeReferences.add(key);\n conf.informativeReferences.delete(key);\n }\n }\n}\n","// @ts-check\nimport { API_URL } from \"./xref.js\";\nimport { idb } from \"./import-maps.js\";\n\n/**\n * @typedef {import('core/xref').RequestEntry} RequestEntry\n * @typedef {import('core/xref').Response} Response\n * @typedef {import('core/xref').SearchResultEntry} SearchResultEntry\n * @typedef {import('core/xref').XrefDatabase} XrefDatabase\n */\n\nconst STORE_NAME = \"xrefs\";\nconst VERSION_CHECK_WAIT = 5 * 60 * 1000; // 5 min\n\nasync function getIdbCache() {\n /** @type {XrefDatabase} */\n const db = await idb.openDB(\"xref\", 2, {\n upgrade(db) {\n [...db.objectStoreNames].forEach(s => db.deleteObjectStore(s));\n const store = db.createObjectStore(STORE_NAME, { keyPath: \"query.id\" });\n store.createIndex(\"byTerm\", \"query.term\", { unique: false });\n },\n });\n return db;\n}\n\n/** @param {RequestEntry[]} queries */\nexport async function resolveXrefCache(queries) {\n /** @type {Map<string, SearchResultEntry[]>} */\n const cachedData = new Map();\n\n const bustCache = await shouldBustCache();\n if (bustCache) {\n await clearXrefData();\n return cachedData;\n }\n\n const requiredKeySet = new Set(queries.map(query => query.id));\n try {\n const cache = await getIdbCache();\n let cursor = await cache.transaction(STORE_NAME).store.openCursor();\n while (cursor) {\n if (requiredKeySet.has(cursor.key)) {\n cachedData.set(cursor.key, cursor.value.result);\n }\n cursor = await cursor.continue();\n }\n } catch (err) {\n console.error(err);\n }\n return cachedData;\n}\n\n/**\n * Get last updated timestamp from server and bust cache based on that. This\n * way, we prevent dirty/erroneous/stale data being kept on a client (which is\n * possible if we use a `MAX_AGE` based caching strategy).\n */\nasync function shouldBustCache() {\n const key = \"XREF:LAST_VERSION_CHECK\";\n const lastChecked = parseInt(localStorage.getItem(key), 10);\n const now = Date.now();\n\n if (!lastChecked) {\n localStorage.setItem(key, now.toString());\n return false;\n }\n if (now - lastChecked < VERSION_CHECK_WAIT) {\n // avoid checking network for any data update if old cache \"fresh\"\n return false;\n }\n\n const url = new URL(\"meta/version\", API_URL).href;\n const res = await fetch(url);\n if (!res.ok) return false;\n const lastUpdated = await res.text();\n localStorage.setItem(key, now.toString());\n return parseInt(lastUpdated, 10) > lastChecked;\n}\n\n/**\n * @param {RequestEntry[]} queries\n * @param {Map<string, SearchResultEntry[]>} results\n */\nexport async function cacheXrefData(queries, results) {\n try {\n const cache = await getIdbCache();\n const tx = cache.transaction(STORE_NAME, \"readwrite\");\n for (const query of queries) {\n const result = results.get(query.id);\n tx.objectStore(STORE_NAME).add({ query, result });\n }\n await tx.done;\n } catch (e) {\n console.error(e);\n }\n}\n\nexport async function clearXrefData() {\n try {\n await getIdbCache().then(db => db.clear(STORE_NAME));\n } catch (e) {\n console.error(e);\n }\n}\n","// @ts-check\n/**\n * @module core/xref\n *\n * Automatically adds external references.\n *\n * Searches for the terms which do not have a local definition at xref API and\n * for each query, adds `data-cite` attributes to respective elements.\n * `core/data-cite` later converts these data-cite attributes to actual links.\n * https://github.com/w3c/respec/issues/1662\n */\n/**\n * @typedef {import('core/xref').RequestEntry} RequestEntry\n * @typedef {import('core/xref').Response} Response\n * @typedef {import('core/xref').SearchResultEntry} SearchResultEntry\n * @typedef {Map<string, { elems: HTMLElement[], results: SearchResultEntry[], query: RequestEntry }>} ErrorCollection\n * @typedef {{ ambiguous: ErrorCollection, notFound: ErrorCollection }} Errors\n */\nimport { cacheXrefData, resolveXrefCache } from \"./xref-db.js\";\nimport {\n createResourceHint,\n nonNormativeSelector,\n norm as normalize,\n showError,\n showWarning,\n} from \"./utils.js\";\nimport { possibleExternalLinks } from \"./link-to-dfn.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/xref\";\n\nconst profiles = {\n \"web-platform\": [\"HTML\", \"INFRA\", \"URL\", \"WEBIDL\", \"DOM\", \"FETCH\"],\n};\n\nexport const API_URL = \"https://respec.org/xref/\";\n\nif (\n !document.querySelector(\"link[rel='preconnect'][href='https://respec.org']\")\n) {\n const link = createResourceHint({\n hint: \"preconnect\",\n href: \"https://respec.org\",\n });\n document.head.appendChild(link);\n}\n\n/**\n * @param {Object} conf respecConfig\n */\nexport async function run(conf) {\n if (!conf.xref) {\n return;\n }\n\n const xref = normalizeConfig(conf.xref);\n if (xref.specs) {\n const bodyCite = document.body.dataset.cite\n ? document.body.dataset.cite.split(/\\s+/)\n : [];\n document.body.dataset.cite = bodyCite.concat(xref.specs).join(\" \");\n }\n\n const elems = possibleExternalLinks.concat(findExplicitExternalLinks());\n if (!elems.length) return;\n\n /** @type {RequestEntry[]} */\n const queryKeys = [];\n for (const elem of elems) {\n const entry = getRequestEntry(elem);\n const id = await objectHash(entry);\n queryKeys.push({ ...entry, id });\n }\n\n const data = await getData(queryKeys, xref.url);\n addDataCiteToTerms(elems, queryKeys, data, conf);\n\n sub(\"beforesave\", cleanup);\n}\n\n/**\n * Find additional references that need to be looked up externally.\n * Examples: a[data-cite=\"spec\"], dfn[data-cite=\"spec\"], dfn.externalDFN\n */\nfunction findExplicitExternalLinks() {\n /** @type {NodeListOf<HTMLElement>} */\n const links = document.querySelectorAll(\n \"a[data-cite]:not([data-cite='']):not([data-cite*='#']), \" +\n \"dfn[data-cite]:not([data-cite='']):not([data-cite*='#'])\"\n );\n /** @type {NodeListOf<HTMLElement>} */\n const externalDFNs = document.querySelectorAll(\"dfn.externalDFN\");\n return [...links]\n .filter(el => {\n // ignore empties\n if (el.textContent.trim() === \"\") return false;\n /** @type {HTMLElement} */\n const closest = el.closest(\"[data-cite]\");\n return !closest || closest.dataset.cite !== \"\";\n })\n .concat(...externalDFNs);\n}\n\n/**\n * converts conf.xref to object with url and spec properties\n */\nfunction normalizeConfig(xref) {\n const defaults = {\n url: API_URL,\n specs: null,\n };\n\n const config = Object.assign({}, defaults);\n\n const type = Array.isArray(xref) ? \"array\" : typeof xref;\n switch (type) {\n case \"boolean\":\n // using defaults already, as above\n break;\n case \"string\":\n if (xref.toLowerCase() in profiles) {\n Object.assign(config, { specs: profiles[xref.toLowerCase()] });\n } else {\n invalidProfileError(xref);\n }\n break;\n case \"array\":\n Object.assign(config, { specs: xref });\n break;\n case \"object\":\n Object.assign(config, xref);\n if (xref.profile) {\n const profile = xref.profile.toLowerCase();\n if (profile in profiles) {\n const specs = (xref.specs || []).concat(profiles[profile]);\n Object.assign(config, { specs });\n } else {\n invalidProfileError(xref.profile);\n }\n }\n break;\n default: {\n const msg = `Invalid value for \\`xref\\` configuration option. Received: \"${xref}\".`;\n showError(msg, name);\n }\n }\n return config;\n\n function invalidProfileError(profile) {\n const supportedProfiles = Object.keys(profiles)\n .map(p => `\"${p}\"`)\n .join(\", \");\n const msg =\n `Invalid profile \"${profile}\" in \\`respecConfig.xref\\`. ` +\n `Please use one of the supported profiles: ${supportedProfiles}.`;\n showError(msg, name);\n }\n}\n\n/**\n * get xref API request entry (term and context) for given xref element\n * @param {HTMLElement} elem\n */\nfunction getRequestEntry(elem) {\n const isIDL = \"xrefType\" in elem.dataset;\n\n let term = getTermFromElement(elem);\n if (!isIDL) term = term.toLowerCase();\n\n const specs = getSpecContext(elem);\n const types = getTypeContext(elem, isIDL);\n const forContext = getForContext(elem, isIDL);\n\n return {\n term,\n types,\n ...(specs.length && { specs }),\n ...(typeof forContext === \"string\" && { for: forContext }),\n };\n}\n\n/** @param {HTMLElement} elem */\nexport function getTermFromElement(elem) {\n const { lt: linkingText } = elem.dataset;\n let term = linkingText ? linkingText.split(\"|\", 1)[0] : elem.textContent;\n term = normalize(term);\n return term === \"the-empty-string\" ? \"\" : term;\n}\n\n/**\n * Get spec context as a fallback chain, where each level (sub-array) represents\n * decreasing priority.\n * @param {HTMLElement} elem\n */\nfunction getSpecContext(elem) {\n /** @type {string[][]} */\n const specs = [];\n\n /** @type {HTMLElement} */\n let dataciteElem = elem.closest(\"[data-cite]\");\n\n // Traverse up towards the root element, adding levels of lower priority specs\n while (dataciteElem) {\n const cite = dataciteElem.dataset.cite.toLowerCase().replace(/[!?]/g, \"\");\n const cites = cite.split(/\\s+/).filter(s => s);\n if (cites.length) {\n specs.push(cites);\n }\n if (dataciteElem === elem) break;\n dataciteElem = dataciteElem.parentElement.closest(\"[data-cite]\");\n }\n\n // If element itself contains data-cite, we don't take inline context into\n // account. The inline bibref context has lowest priority, if available.\n if (dataciteElem !== elem) {\n const closestSection = elem.closest(\"section\");\n /** @type {Iterable<HTMLElement>} */\n const bibrefs = closestSection\n ? closestSection.querySelectorAll(\"a.bibref\")\n : [];\n const inlineRefs = [...bibrefs].map(el => el.textContent.toLowerCase());\n if (inlineRefs.length) {\n specs.push(inlineRefs);\n }\n }\n\n const uniqueSpecContext = dedupeSpecContext(specs);\n return uniqueSpecContext;\n}\n\n/**\n * If we already have a spec in a higher priority level (closer to element) of\n * fallback chain, skip it from low priority levels, to prevent duplication.\n * @param {string[][]} specs\n * */\nfunction dedupeSpecContext(specs) {\n /** @type {string[][]} */\n const unique = [];\n for (const level of specs) {\n const higherPriority = unique[unique.length - 1] || [];\n const uniqueSpecs = [...new Set(level)].filter(\n spec => !higherPriority.includes(spec)\n );\n unique.push(uniqueSpecs.sort());\n }\n return unique;\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {boolean} isIDL\n */\nfunction getForContext(elem, isIDL) {\n if (elem.dataset.xrefFor) {\n return normalize(elem.dataset.xrefFor);\n }\n\n if (isIDL) {\n /** @type {HTMLElement} */\n const dataXrefForElem = elem.closest(\"[data-xref-for]\");\n if (dataXrefForElem) {\n return normalize(dataXrefForElem.dataset.xrefFor);\n }\n }\n\n return null;\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {boolean} isIDL\n */\nfunction getTypeContext(elem, isIDL) {\n if (isIDL) {\n if (elem.dataset.xrefType) {\n return elem.dataset.xrefType.split(\"|\");\n }\n return [\"_IDL_\"];\n }\n\n return [\"_CONCEPT_\"];\n}\n\n/**\n * @param {RequestEntry[]} queryKeys\n * @param {string} apiUrl\n * @returns {Promise<Map<string, SearchResultEntry[]>>}\n */\nasync function getData(queryKeys, apiUrl) {\n const uniqueIds = new Set();\n const uniqueQueryKeys = queryKeys.filter(key => {\n return uniqueIds.has(key.id) ? false : uniqueIds.add(key.id) && true;\n });\n\n const resultsFromCache = await resolveXrefCache(uniqueQueryKeys);\n\n const termsToLook = uniqueQueryKeys.filter(\n key => !resultsFromCache.get(key.id)\n );\n const fetchedResults = await fetchFromNetwork(termsToLook, apiUrl);\n if (fetchedResults.size) {\n // add data to cache\n await cacheXrefData(uniqueQueryKeys, fetchedResults);\n }\n\n return new Map([...resultsFromCache, ...fetchedResults]);\n}\n\n/**\n * @param {RequestEntry[]} keys\n * @param {string} url\n * @returns {Promise<Map<string, SearchResultEntry[]>>}\n */\nasync function fetchFromNetwork(keys, url) {\n if (!keys.length) return new Map();\n\n const query = { keys };\n const options = {\n method: \"POST\",\n body: JSON.stringify(query),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n };\n const response = await fetch(url, options);\n const json = await response.json();\n return new Map(json.result);\n}\n\n/**\n * Figures out from the tree structure if the reference is\n * normative (true) or informative (false).\n * @param {HTMLElement} elem\n */\nfunction isNormative(elem) {\n const closestNormative = elem.closest(\".normative\");\n const closestInform = elem.closest(nonNormativeSelector);\n if (!closestInform || elem === closestNormative) {\n return true;\n }\n return (\n closestNormative &&\n closestInform &&\n closestInform.contains(closestNormative)\n );\n}\n\n/**\n * adds data-cite attributes to elems for each term for which results are found.\n * adds citations to references section.\n * collects and shows linking errors if any.\n * @param {HTMLElement[]} elems\n * @param {RequestEntry[]} queryKeys\n * @param {Map<string, SearchResultEntry[]>} data\n * @param {any} conf\n */\nfunction addDataCiteToTerms(elems, queryKeys, data, conf) {\n /** @type {Errors} */\n const errors = { ambiguous: new Map(), notFound: new Map() };\n\n for (let i = 0, l = elems.length; i < l; i++) {\n if (elems[i].closest(\"[data-no-xref]\")) continue;\n\n const elem = elems[i];\n const query = queryKeys[i];\n\n const { id } = query;\n const results = data.get(id);\n if (results.length === 1) {\n addDataCite(elem, query, results[0], conf);\n } else {\n const collector = errors[results.length === 0 ? \"notFound\" : \"ambiguous\"];\n if (!collector.has(id)) {\n collector.set(id, { elems: [], results, query });\n }\n collector.get(id).elems.push(elem);\n }\n }\n\n showErrors(errors);\n}\n\n/**\n * @param {HTMLElement} elem\n * @param {RequestEntry} query\n * @param {SearchResultEntry} result\n * @param {any} conf\n */\nfunction addDataCite(elem, query, result, conf) {\n const { term, specs = [] } = query;\n const { uri, shortname, spec, normative, type, for: forContext } = result;\n // if authored spec context had `result.spec`, use it instead of shortname\n const cite = specs.flat().includes(spec) ? spec : shortname;\n const url = new URL(uri, \"https://example.org\");\n const { pathname: citePath } = url;\n const citeFrag = url.hash.slice(1);\n const dataset = { cite, citePath, citeFrag, type };\n if (forContext) dataset.linkFor = forContext[0];\n Object.assign(elem.dataset, dataset);\n\n addToReferences(elem, cite, normative, term, conf);\n}\n\n/**\n * add specs for citation (references section)\n * @param {HTMLElement} elem\n * @param {string} cite\n * @param {boolean} normative\n * @param {string} term\n * @param {any} conf\n */\nfunction addToReferences(elem, cite, normative, term, conf) {\n const isNormRef = isNormative(elem);\n if (!isNormRef) {\n // Only add it if not already normative...\n if (!conf.normativeReferences.has(cite)) {\n conf.informativeReferences.add(cite);\n }\n return;\n }\n if (normative) {\n // If it was originally informative, we move the existing\n // key to be normative.\n const existingKey = conf.informativeReferences.has(cite)\n ? conf.informativeReferences.getCanonicalKey(cite)\n : cite;\n conf.normativeReferences.add(existingKey);\n conf.informativeReferences.delete(existingKey);\n return;\n }\n\n const msg = `Normative reference to \"${term}\" found but term is defined informatively in \"${cite}\"`;\n const title = \"Error: Normative reference to informative term\";\n showWarning(msg, name, { title, elements: [elem] });\n}\n\n/** @param {Errors} errors */\nfunction showErrors({ ambiguous, notFound }) {\n const getPrefilledFormURL = (term, query, specs = []) => {\n const url = new URL(API_URL);\n url.searchParams.set(\"term\", term);\n if (query.for) url.searchParams.set(\"for\", query.for);\n url.searchParams.set(\"types\", query.types.join(\",\"));\n if (specs.length) url.searchParams.set(\"specs\", specs.join(\",\"));\n return url;\n };\n\n const howToFix = howToCiteURL =>\n \"[Learn more about this error](https://respec.org/docs/#error-term-not-found)\" +\n ` or see [how to cite to resolve the error](${howToCiteURL}).`;\n\n for (const { query, elems } of notFound.values()) {\n const specs = query.specs ? [...new Set(query.specs.flat())].sort() : [];\n const originalTerm = getTermFromElement(elems[0]);\n const formUrl = getPrefilledFormURL(originalTerm, query);\n const specsString = specs.map(spec => `\\`${spec}\\``).join(\", \");\n const hint = howToFix(formUrl);\n const msg = `Couldn't match \"**${originalTerm}**\" to anything in the document or in any other document cited in this specification: ${specsString}.`;\n const title = \"Error: No matching dfn found.\";\n showError(msg, name, { title, elements: elems, hint });\n }\n\n for (const { query, elems, results } of ambiguous.values()) {\n const specs = [...new Set(results.map(entry => entry.shortname))].sort();\n const specsString = specs.map(s => `**${s}**`).join(\", \");\n const originalTerm = getTermFromElement(elems[0]);\n const formUrl = getPrefilledFormURL(originalTerm, query, specs);\n const hint = howToFix(formUrl);\n const msg = `The term \"**${originalTerm}**\" is defined in ${specsString} in multiple ways, so it's ambiguous.`;\n const title = \"Error: Linking an ambiguous dfn.\";\n showError(msg, name, { title, elements: elems, hint });\n }\n}\n\nfunction objectHash(obj) {\n const str = JSON.stringify(obj, Object.keys(obj).sort());\n const buffer = new TextEncoder().encode(str);\n return crypto.subtle.digest(\"SHA-1\", buffer).then(bufferToHexString);\n}\n\n/** @param {ArrayBuffer} buffer */\nfunction bufferToHexString(buffer) {\n const byteArray = new Uint8Array(buffer);\n return [...byteArray].map(v => v.toString(16).padStart(2, \"0\")).join(\"\");\n}\n\nfunction cleanup(doc) {\n const elems = doc.querySelectorAll(\n \"a[data-xref-for], a[data-xref-type], a[data-link-for]\"\n );\n const attrToRemove = [\"data-xref-for\", \"data-xref-type\", \"data-link-for\"];\n elems.forEach(el => {\n attrToRemove.forEach(attr => el.removeAttribute(attr));\n });\n}\n","// @ts-check\n/**\n * Module: core/webidl-index\n * constructs a summary of WebIDL in the document by\n * cloning all the generated WebIDL nodes and\n * appending them to pre element.\n *\n * Usage\n * Add a <section id=\"idl-index\"> to the document.\n * It also supports title elements to generate a header.\n * Or if a header element is an immediate child, then\n * that is preferred.\n */\nexport const name = \"core/webidl-index\";\nimport { nonNormativeSelector, wrapInner } from \"./utils.js\";\nimport { addIDLHeader } from \"./webidl.js\";\n\nexport function run() {\n /** @type {HTMLElement | null} */\n const idlIndexSec = document.querySelector(\"section#idl-index\");\n if (!idlIndexSec) {\n return;\n }\n // Query for decedents headings, e.g., \"h2:first-child, etc..\"\n const query = [2, 3, 4, 5, 6].map(level => `h${level}:first-child`).join(\",\");\n if (!idlIndexSec.querySelector(query)) {\n const header = document.createElement(\"h2\");\n if (idlIndexSec.title) {\n header.textContent = idlIndexSec.title;\n idlIndexSec.removeAttribute(\"title\");\n } else {\n header.textContent = \"IDL Index\";\n }\n idlIndexSec.prepend(header);\n }\n\n // filter out the IDL marked with class=\"exclude\" and the IDL in non-normative sections\n const idlIndex = Array.from(\n document.querySelectorAll(\"pre.idl:not(.exclude) > code\")\n ).filter(idl => !idl.closest(nonNormativeSelector));\n\n if (idlIndex.length === 0) {\n const text = \"This specification doesn't normatively declare any Web IDL.\";\n idlIndexSec.append(text);\n return;\n }\n\n const pre = document.createElement(\"pre\");\n pre.classList.add(\"idl\", \"def\");\n pre.id = \"actual-idl-index\";\n idlIndex\n .map(elem => {\n const fragment = document.createDocumentFragment();\n for (const child of elem.children) {\n fragment.appendChild(child.cloneNode(true));\n }\n return fragment;\n })\n .forEach(elem => {\n if (pre.lastChild) {\n pre.append(\"\\n\\n\");\n }\n pre.appendChild(elem);\n });\n // Remove duplicate IDs\n pre.querySelectorAll(\"*[id]\").forEach(elem => elem.removeAttribute(\"id\"));\n\n // Add our own IDL header\n idlIndexSec.appendChild(pre);\n wrapInner(pre, document.createElement(\"code\"));\n addIDLHeader(pre);\n}\n","/*\n@module \"core/dfn-index\"\nExtends and overrides some styles from `base.css`.\n*/\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nul.index {\n columns: 30ch;\n column-gap: 1.5em;\n}\n\nul.index li {\n list-style: inherit;\n}\n\nul.index li span {\n color: inherit;\n cursor: pointer;\n white-space: normal;\n}\n\n#index-defined-here ul.index li {\n font-size: 0.9rem;\n}\n\nul.index code {\n color: inherit;\n}\n\n#index-defined-here .print-only {\n display: none;\n}\n\n@media print {\n #index-defined-here .print-only {\n display: initial;\n }\n}\n`;\n","// @ts-check\n/**\n * If a `<section id=\"index\">` exists, it is filled by a list of terms defined\n * (locally) by current document and a list of terms referenced (external) by\n * current document.\n */\n\nimport { addId, getIntlData, norm } from \"./utils.js\";\nimport css from \"../styles/dfn-index.css.js\";\nimport { getTermFromElement } from \"./xref.js\";\nimport { html } from \"./import-maps.js\";\nimport { renderInlineCitation } from \"./render-biblio.js\";\nimport { sub } from \"./pubsubhub.js\";\nimport { toCiteDetails } from \"./data-cite.js\";\n\nexport const name = \"core/dfn-index\";\n\nconst localizationStrings = {\n en: {\n heading: \"Index\",\n headingExternal: \"Terms defined by reference\",\n headlingLocal: \"Terms defined by this specification\",\n dfnOf: \"definition of\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// Terms of these _types_ are wrapped in `<code>`.\nconst CODE_TYPES = new Set([\n \"attribute\",\n \"callback\",\n \"dict-member\",\n \"dictionary\",\n \"element-attr\",\n \"element\",\n \"enum-value\",\n \"enum\",\n \"exception\",\n \"extended-attribute\",\n \"interface\",\n \"method\",\n \"typedef\",\n]);\n\n/**\n * @typedef {{ term: string, type: string, linkFor: string, elem: HTMLAnchorElement }} Entry\n */\n\nexport function run() {\n const index = document.querySelector(\"section#index\");\n if (!index) {\n return;\n }\n\n const styleEl = document.createElement(\"style\");\n styleEl.textContent = css;\n document.head.appendChild(styleEl);\n\n index.classList.add(\"appendix\");\n if (!index.querySelector(\"h2\")) {\n index.prepend(html`<h2>${l10n.heading}</h2>`);\n }\n\n const localTermIndex = html`<section id=\"index-defined-here\">\n <h3>${l10n.headlingLocal}</h3>\n ${createLocalTermIndex()}\n </section>`;\n index.append(localTermIndex);\n\n const externalTermIndex = html`<section id=\"index-defined-elsewhere\">\n <h3>${l10n.headingExternal}</h3>\n ${createExternalTermIndex()}\n </section>`;\n index.append(externalTermIndex);\n for (const el of externalTermIndex.querySelectorAll(\".index-term\")) {\n addId(el, \"index-term\");\n }\n\n // XXX: This event is used to overcome an edge case with core/structure,\n // related to a circular dependency in plugin run order. We want\n // core/structure to run after dfn-index so the #index can be listed in the\n // TOC, but we also want section numbers in dfn-index. So, we \"split\"\n // core/dfn-index in two parts, one that runs before core/structure (using\n // plugin order in profile) and the other (following) after section numbers\n // are generated in core/structure (this event).\n sub(\"toc\", appendSectionNumbers, { once: true });\n\n sub(\"beforesave\", cleanup);\n}\n\nfunction createLocalTermIndex() {\n const dataSortedByTerm = collectLocalTerms();\n return html`<ul class=\"index\">\n ${dataSortedByTerm.map(([term, dfns]) => renderLocalTerm(term, dfns))}\n </ul>`;\n}\n\nfunction collectLocalTerms() {\n /** @type {Map<string, HTMLElement[]>} */\n const data = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"dfn:not([data-cite])\");\n for (const elem of elems) {\n if (!elem.id) continue;\n const text = norm(elem.textContent);\n const elemsByTerm = data.get(text) || data.set(text, []).get(text);\n elemsByTerm.push(elem);\n }\n\n const dataSortedByTerm = [...data].sort(([a], [b]) =>\n a.slice(a.search(/\\w/)).localeCompare(b.slice(b.search(/\\w/)))\n );\n\n return dataSortedByTerm;\n}\n\n/**\n * @param {string} term\n * @param {HTMLElement[]} dfns\n * @returns {HTMLLIElement}\n */\nfunction renderLocalTerm(term, dfns) {\n const renderItem = (dfn, text, suffix) => {\n const href = `#${dfn.id}`;\n return html`<li data-id=${dfn.id}>\n <a class=\"index-term\" href=\"${href}\">${{ html: text }}</a> ${suffix\n ? { html: suffix }\n : \"\"}\n </li>`;\n };\n\n if (dfns.length === 1) {\n const dfn = dfns[0];\n const type = getLocalTermType(dfn);\n const text = getLocalTermText(dfn, type, term);\n const suffix = getLocalTermSuffix(dfn, type, term);\n return renderItem(dfn, text, suffix);\n }\n return html`<li>\n ${term}\n <ul>\n ${dfns.map(dfn => {\n const type = getLocalTermType(dfn);\n const text = getLocalTermSuffix(dfn, type, term) || l10n.dfnOf;\n return renderItem(dfn, text);\n })}\n </ul>\n </li>`;\n}\n\n/** @param {HTMLElement} dfn */\nfunction getLocalTermType(dfn) {\n const ds = dfn.dataset;\n const type = ds.dfnType || ds.idl || ds.linkType || \"\";\n switch (type) {\n case \"\":\n case \"dfn\":\n return \"\";\n default:\n return type;\n }\n}\n\n/** @param {HTMLElement} dfn */\nfunction getLocalTermParentContext(dfn) {\n /** @type {HTMLElement} */\n const dfnFor = dfn.closest(\"[data-dfn-for]:not([data-dfn-for=''])\");\n return dfnFor ? dfnFor.dataset.dfnFor : \"\";\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {string} type\n * @param {string} term\n */\nfunction getLocalTermText(dfn, type, term) {\n let text = term;\n if (type === \"enum-value\") {\n text = `\"${text}\"`;\n }\n if (CODE_TYPES.has(type) || dfn.dataset.idl || dfn.closest(\"code\")) {\n text = `<code>${text}</code>`;\n }\n return text;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {string} type\n * @param {string} [term=\"\"]\n */\nfunction getLocalTermSuffix(dfn, type, term = \"\") {\n if (term.startsWith(\"[[\")) {\n const parent = getLocalTermParentContext(dfn);\n return `internal slot for <code>${parent}</code>`;\n }\n\n switch (type) {\n case \"dict-member\":\n case \"method\":\n case \"attribute\":\n case \"enum-value\": {\n const typeText =\n type === \"dict-member\" ? \"member\" : type.replace(\"-\", \" \");\n const parent = getLocalTermParentContext(dfn);\n return `${typeText} for <code>${parent}</code>`;\n }\n case \"interface\":\n case \"dictionary\":\n case \"enum\": {\n return type;\n }\n case \"constructor\": {\n const parent = getLocalTermParentContext(dfn);\n return `for <code>${parent}</code>`;\n }\n default:\n return \"\";\n }\n}\n\nfunction appendSectionNumbers() {\n const getSectionNumber = id => {\n const dfn = document.getElementById(id);\n const sectionNumberEl = dfn.closest(\"section\").querySelector(\".secno\");\n const secNum = `§${sectionNumberEl.textContent.trim()}`;\n return html`<span class=\"print-only\">${secNum}</span>`;\n };\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"#index-defined-here li[data-id]\");\n elems.forEach(el => el.append(getSectionNumber(el.dataset.id)));\n}\n\nfunction createExternalTermIndex() {\n const data = collectExternalTerms();\n const dataSortedBySpec = [...data.entries()].sort(([specA], [specB]) =>\n specA.localeCompare(specB)\n );\n return html`<ul class=\"index\">\n ${dataSortedBySpec.map(\n ([spec, entries]) => html`<li data-spec=\"${spec}\">\n ${renderInlineCitation(spec)} defines the following:\n <ul>\n ${entries\n .sort((a, b) => a.term.localeCompare(b.term))\n .map(renderExternalTermEntry)}\n </ul>\n </li>`\n )}\n </ul>`;\n}\n\nfunction collectExternalTerms() {\n /** @type {Set<string>} */\n const uniqueReferences = new Set();\n /** @type {Map<string, Entry[]>} spec => entry[] */\n const data = new Map();\n\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const elements = document.querySelectorAll(`a[data-cite]`);\n for (const elem of elements) {\n if (!elem.dataset.cite) {\n continue;\n }\n const uniqueID = elem.href;\n if (uniqueReferences.has(uniqueID)) {\n continue;\n }\n\n const { type, linkFor } = elem.dataset;\n const term = getTermFromElement(elem);\n if (!term) {\n continue; // <a data-cite=\"SPEC\"></a>\n }\n const spec = toCiteDetails(elem).key.toUpperCase();\n\n const entriesBySpec = data.get(spec) || data.set(spec, []).get(spec);\n entriesBySpec.push({ term, type, linkFor, elem });\n uniqueReferences.add(uniqueID);\n }\n\n return data;\n}\n\n/**\n * @param {Entry} entry\n * @returns {HTMLLIElement}\n */\nfunction renderExternalTermEntry(entry) {\n const { elem } = entry;\n const text = getTermText(entry);\n const el = html`<li>\n <span class=\"index-term\" data-href=\"${elem.href}\">${{ html: text }}</span>\n </li>`;\n return el;\n}\n\n// Terms of these _types_ are suffixed with their type info.\nconst TYPED_TYPES = new Map([\n [\"attribute\", \"attribute\"],\n [\"element-attr\", \"attribute\"],\n [\"element\", \"element\"],\n [\"enum\", \"enum\"],\n [\"exception\", \"exception\"],\n [\"extended-attribute\", \"extended attribute\"],\n [\"interface\", \"interface\"],\n]);\n\n// These _terms_ have type suffix \"type\".\nconst TYPE_TERMS = new Set([\n // Following are primitive types as per WebIDL spec:\n \"boolean\",\n \"byte\",\n \"octet\",\n \"short\",\n \"unsigned short\",\n \"long\",\n \"unsigned long\",\n \"long long\",\n \"unsigned long long\",\n \"float\",\n \"unrestricted float\",\n \"double\",\n \"unrestricted double\",\n // Following are not primitive types, but aren't interfaces either.\n \"undefined\",\n \"any\",\n \"object\",\n \"symbol\",\n]);\n\n/** @param {Entry} entry */\nfunction getTermText(entry) {\n const { term, type, linkFor } = entry;\n let text = term;\n\n if (CODE_TYPES.has(type)) {\n if (type === \"extended-attribute\") {\n text = `[${text}]`;\n }\n text = `<code>${text}</code>`;\n }\n\n const typeSuffix = TYPE_TERMS.has(term) ? \"type\" : TYPED_TYPES.get(type);\n if (typeSuffix) {\n text += ` ${typeSuffix}`;\n }\n\n if (linkFor) {\n let linkForText = linkFor;\n if (!/\\s/.test(linkFor)) {\n // If linkFor is a single word, highlight it.\n linkForText = `<code>${linkForText}</code>`;\n }\n if (type === \"element-attr\") {\n linkForText += \" element\";\n }\n text += ` (for ${linkForText})`;\n }\n\n return text;\n}\n\n/** @param {Document} doc */\nfunction cleanup(doc) {\n doc\n .querySelectorAll(\"#index-defined-elsewhere li[data-spec]\")\n .forEach(el => el.removeAttribute(\"data-spec\"));\n\n doc\n .querySelectorAll(\"#index-defined-here li[data-id]\")\n .forEach(el => el.removeAttribute(\"data-id\"));\n}\n","// @ts-check\n// Module core/contrib\n// Fetches names of contributors from github and uses them to fill\n// in the content of elements with key identifiers:\n// #gh-contributors: people whose PR have been merged.\n// Spec editors get filtered out automatically.\nimport { fetchAndCache, joinAnd, showError } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nexport const name = \"core/contrib\";\n\nexport async function run(conf) {\n const ghContributors = document.getElementById(\"gh-contributors\");\n if (!ghContributors) {\n return;\n }\n\n if (!conf.github) {\n const msg =\n \"Requested list of contributors from GitHub, but \" +\n \"[`github`](https://github.com/w3c/respec/wiki/github) configuration option is not set.\";\n showError(msg, name);\n return;\n }\n\n const editors = conf.editors.map(editor => editor.name);\n const apiURL = `${conf.github.apiBase}/${conf.github.fullName}/`;\n await showContributors(editors, apiURL);\n}\n\n/**\n * Show list of contributors in #gh-contributors\n * @param {string[]} editors\n * @param {string} apiURL\n */\nasync function showContributors(editors, apiURL) {\n const elem = document.getElementById(\"gh-contributors\");\n if (!elem) return;\n\n elem.textContent = \"Fetching list of contributors...\";\n const contributors = await getContributors();\n if (contributors !== null) {\n toHTML(contributors, elem);\n } else {\n elem.textContent = \"Failed to fetch contributors.\";\n }\n\n async function getContributors() {\n const { href: url } = new URL(\"contributors\", apiURL);\n try {\n const res = await fetchAndCache(url);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n /** @type {Contributor[]} */\n const contributors = await res.json();\n return contributors.filter(\n user => !editors.includes(user.name || user.login)\n );\n } catch (error) {\n const msg = \"Error loading contributors from GitHub.\";\n showError(msg, name);\n console.error(error);\n return null;\n }\n }\n}\n\n/**\n * @typedef {{ name?: string, login: string }} Contributor\n * @param {Contributor[]} contributors\n * @param {HTMLElement} element\n */\nfunction toHTML(contributors, element) {\n const sortedContributors = contributors.sort((a, b) => {\n const nameA = a.name || a.login;\n const nameB = b.name || b.login;\n return nameA.toLowerCase().localeCompare(nameB.toLowerCase());\n });\n\n if (element.tagName === \"UL\") {\n html(element)`${sortedContributors.map(\n ({ name, login }) =>\n `<li><a href=\"https://github.com/${login}\">${name || login}</a></li>`\n )}`;\n return;\n }\n\n const names = sortedContributors.map(user => user.name || user.login);\n element.textContent = joinAnd(names);\n}\n","// @ts-check\n// Module core/fix-headers\n// Make sure that all h1-h6 headers (that are first direct children of sections) are actually\n// numbered at the right depth level. This makes it possible to just use any of them (conventionally\n// h2) with the knowledge that the proper depth level will be used\nimport { renameElement } from \"./utils.js\";\n\nexport const name = \"core/fix-headers\";\n\nexport function run() {\n [...document.querySelectorAll(\"section:not(.introductory)\")]\n .map(sec => sec.querySelector(\"h1, h2, h3, h4, h5, h6\"))\n .filter(h => h)\n .forEach(heading => {\n const depth = Math.min(getParents(heading, \"section\").length + 1, 6);\n renameElement(heading, `h${depth}`);\n });\n}\n\nfunction getParents(el, selector) {\n const parents = [];\n while (el != el.ownerDocument.body) {\n if (el.matches(selector)) parents.push(el);\n el = el.parentElement;\n }\n return parents;\n}\n","// @ts-check\n// Module core/structure\n// Handles producing the ToC and numbering sections across the document.\n\n// CONFIGURATION:\n// - noTOC: if set to true, no TOC is generated and sections are not numbered\n// - tocIntroductory: if set to true, the introductory material is listed in the TOC\n// - lang: can change the generated text (supported: en, fr)\n// - maxTocLevel: only generate a TOC so many levels deep\n\nimport {\n addId,\n getIntlData,\n parents,\n renameElement,\n showError,\n} from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nimport { pub } from \"./pubsubhub.js\";\n\nconst lowerHeaderTags = [\"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\nconst headerTags = [\"h1\", ...lowerHeaderTags];\n\nexport const name = \"core/structure\";\n\nconst localizationStrings = {\n en: {\n toc: \"Table of Contents\",\n },\n zh: {\n toc: \"内容大纲\",\n },\n ko: {\n toc: \"목차\",\n },\n ja: {\n toc: \"目次\",\n },\n nl: {\n toc: \"Inhoudsopgave\",\n },\n es: {\n toc: \"Tabla de Contenidos\",\n },\n de: {\n toc: \"Inhaltsverzeichnis\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @typedef {object} SectionInfo\n * @property {string} secno\n * @property {string} title\n *\n * Scans sections and generate ordered list element + ID-to-anchor-content dictionary.\n * @param {Section[]} sections the target element to find child sections\n * @param {number} maxTocLevel\n */\nfunction scanSections(sections, maxTocLevel, { prefix = \"\" } = {}) {\n let appendixMode = false;\n let lastNonAppendix = 0;\n let index = 1;\n if (prefix.length && !prefix.endsWith(\".\")) {\n prefix += \".\";\n }\n if (sections.length === 0) {\n return null;\n }\n /** @type {HTMLElement} */\n const ol = html`<ol class=\"toc\"></ol>`;\n for (const section of sections) {\n if (section.isAppendix && !prefix && !appendixMode) {\n lastNonAppendix = index;\n appendixMode = true;\n }\n let secno = section.isIntro\n ? \"\"\n : appendixMode\n ? appendixNumber(index - lastNonAppendix + 1)\n : prefix + index;\n const level = secno.split(\".\").length;\n if (level === 1) {\n secno += \".\";\n // if this is a top level item, insert\n // an OddPage comment so html2ps will correctly\n // paginate the output\n section.header.before(document.createComment(\"OddPage\"));\n }\n\n if (!section.isIntro) {\n index += 1;\n section.header.prepend(html`<bdi class=\"secno\">${secno} </bdi>`);\n }\n\n if (level <= maxTocLevel) {\n const id = section.header.id || section.element.id;\n const item = createTocListItem(section.header, id);\n const sub = scanSections(section.subsections, maxTocLevel, {\n prefix: secno,\n });\n if (sub) {\n item.append(sub);\n }\n ol.append(item);\n }\n }\n return ol;\n}\n\n/**\n * Convert a number to spreadsheet like column name.\n * For example, 1=A, 26=Z, 27=AA, 28=AB and so on..\n * @param {number} num\n */\nfunction appendixNumber(num) {\n let s = \"\";\n while (num > 0) {\n num -= 1;\n s = String.fromCharCode(65 + (num % 26)) + s;\n num = Math.floor(num / 26);\n }\n return s;\n}\n\n/**\n * @typedef {object} Section\n * @property {Element} element\n * @property {Element} header\n * @property {string} title\n * @property {boolean} isIntro\n * @property {boolean} isAppendix\n * @property {Section[]} subsections\n *\n * @param {Element} parent\n */\nfunction getSectionTree(parent, { tocIntroductory = false } = {}) {\n /** @type {NodeListOf<HTMLElement>} */\n const sectionElements = tocIntroductory\n ? parent.querySelectorAll(\":scope > section\")\n : parent.querySelectorAll(\":scope > section:not(.introductory)\");\n /** @type {Section[]} */\n const sections = [];\n\n for (const section of sectionElements) {\n const noToc = section.classList.contains(\"notoc\");\n if (!section.children.length || noToc) {\n continue;\n }\n const header = section.children[0];\n if (!lowerHeaderTags.includes(header.localName)) {\n continue;\n }\n const title = header.textContent;\n addId(section, null, title);\n sections.push({\n element: section,\n header,\n title,\n isIntro: section.classList.contains(\"introductory\"),\n isAppendix: section.classList.contains(\"appendix\"),\n subsections: getSectionTree(section, { tocIntroductory }),\n });\n }\n return sections;\n}\n\n/**\n * @param {Element} header\n * @param {string} id\n */\nfunction createTocListItem(header, id) {\n const anchor = html`<a href=\"${`#${id}`}\" class=\"tocxref\" />`;\n anchor.append(...header.cloneNode(true).childNodes);\n filterHeader(anchor);\n return html`<li class=\"tocline\">${anchor}</li>`;\n}\n\n/**\n * Replaces any child <a> and <dfn> with <span>.\n * @param {HTMLElement} h\n */\nfunction filterHeader(h) {\n h.querySelectorAll(\"a\").forEach(anchor => {\n const span = renameElement(anchor, \"span\");\n span.className = \"formerLink\";\n span.removeAttribute(\"href\");\n });\n h.querySelectorAll(\"dfn\").forEach(dfn => {\n const span = renameElement(dfn, \"span\");\n span.removeAttribute(\"id\");\n });\n}\n\nexport function run(conf) {\n if (\"tocIntroductory\" in conf === false) {\n conf.tocIntroductory = false;\n }\n if (\"maxTocLevel\" in conf === false) {\n conf.maxTocLevel = Infinity;\n }\n\n renameSectionHeaders();\n\n // makeTOC\n if (!conf.noTOC) {\n skipFromToC();\n const sectionTree = getSectionTree(document.body, {\n tocIntroductory: conf.tocIntroductory,\n });\n const result = scanSections(sectionTree, conf.maxTocLevel);\n if (result) {\n createTableOfContents(result);\n }\n }\n\n // See core/dfn-index\n pub(\"toc\");\n}\n\nfunction renameSectionHeaders() {\n const headers = getNonintroductorySectionHeaders();\n if (!headers.length) {\n return;\n }\n headers.forEach(header => {\n const depth = Math.min(parents(header, \"section\").length + 1, 6);\n const h = `h${depth}`;\n if (header.localName !== h) {\n renameElement(header, h);\n }\n });\n}\n\nfunction getNonintroductorySectionHeaders() {\n const headerSelector = headerTags\n .map(h => `section:not(.introductory) ${h}:first-child`)\n .join(\",\");\n return [...document.querySelectorAll(headerSelector)].filter(\n elem => !elem.closest(\"section.introductory\")\n );\n}\n\n/**\n * Skip descendent sections from appearing in ToC using data-max-toc.\n */\nfunction skipFromToC() {\n /** @type {NodeListOf<HTMLElement>} */\n const sections = document.querySelectorAll(\"section[data-max-toc]\");\n for (const section of sections) {\n const maxToc = parseInt(section.dataset.maxToc, 10);\n if (maxToc < 0 || maxToc > 6 || Number.isNaN(maxToc)) {\n const msg = \"`data-max-toc` must have a value between 0-6 (inclusive).\";\n showError(msg, name, { elements: [section] });\n continue;\n }\n\n // `data-max-toc=0` is equivalent to adding a \".notoc\" to current section.\n if (maxToc === 0) {\n section.classList.add(\"notoc\");\n continue;\n }\n\n // When `data-max-toc=2`, we skip all \":scope > section > section\" from ToC\n // i.e., at §1, we will keep §1.1 but not §1.1.1\n // Similarly, `data-max-toc=1` will keep §1, but not §1.1\n const sectionToSkipFromToC = section.querySelectorAll(\n `:scope > ${Array.from({ length: maxToc }, () => \"section\").join(\" > \")}`\n );\n for (const el of sectionToSkipFromToC) {\n el.classList.add(\"notoc\");\n }\n }\n}\n\n/**\n * @param {HTMLElement} ol\n */\nfunction createTableOfContents(ol) {\n if (!ol) {\n return;\n }\n const nav = html`<nav id=\"toc\"></nav>`;\n const h2 = html`<h2 class=\"introductory\">${l10n.toc}</h2>`;\n addId(h2);\n nav.append(h2, ol);\n const ref =\n document.getElementById(\"toc\") ||\n document.getElementById(\"sotd\") ||\n document.getElementById(\"abstract\");\n if (ref) {\n if (ref.id === \"toc\") {\n ref.replaceWith(nav);\n } else {\n ref.after(nav);\n }\n }\n\n const link = html`<p role=\"navigation\" id=\"back-to-top\">\n <a href=\"#title\"><abbr title=\"Back to Top\">↑</abbr></a>\n </p>`;\n document.body.append(link);\n}\n","// @ts-check\n// Module core/informative\n// Mark specific sections as informative, based on CSS\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/informative\";\n\nconst localizationStrings = {\n en: {\n informative: \"This section is non-normative.\",\n },\n nl: {\n informative: \"Dit onderdeel is niet normatief.\",\n },\n ko: {\n informative: \"이 부분은 비규범적입니다.\",\n },\n ja: {\n informative: \"この節は仕様には含まれません.\",\n },\n de: {\n informative: \"Dieser Abschnitt ist nicht normativ.\",\n },\n zh: {\n informative: \"本章节不包含规范性内容。\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport function run() {\n Array.from(document.querySelectorAll(\"section.informative\"))\n .map(informative => informative.querySelector(\"h2, h3, h4, h5, h6\"))\n .filter(heading => heading)\n .forEach(heading => {\n heading.after(html`<p><em>${l10n.informative}</em></p>`);\n });\n}\n","// @ts-check\n// Module core/id-headers\n// All headings are expected to have an ID, unless their immediate container has one.\n// This is currently in core though it comes from a W3C rule. It may move in the future.\n\nexport const name = \"core/id-headers\";\nimport { addId } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const headings = document.querySelectorAll(\n `section:not(.head):not(.introductory) h2, h3, h4, h5, h6`\n );\n for (const h of headings) {\n // prefer for ID: heading.id > parentElement.id > newly generated heading.id\n let id = h.id;\n if (!id) {\n addId(h);\n id = h.parentElement.id || h.id;\n }\n if (!conf.addSectionLinks) continue;\n h.appendChild(html`\n <a href=\"${`#${id}`}\" class=\"self-link\" aria-label=\"§\"></a>\n `);\n }\n}\n","/* container for stats */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.caniuse-stats {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: baseline;\n cursor: pointer;\n}\n\nbutton.caniuse-cell {\n margin: 1px 1px 0 0;\n border: none;\n}\n\n.caniuse-browser {\n position: relative;\n}\n\n/* handle case when printing */\n@media print {\n .caniuse-cell.y::before {\n content: \"✔️\";\n padding: 0.5em;\n }\n\n .caniuse-cell.n::before{\n content: \"❌\";\n padding: 0.5em;\n }\n\n .caniuse-cell.d::before,\n .caniuse-cell.a::before,\n .caniuse-cell.x::before,\n .caniuse-cell.p::before {\n content: \"⚠️\";\n padding: 0.5em;\n }\n}\n\n/* reset styles, hide old versions by default */\n.caniuse-browser ul {\n display: none;\n margin: 0;\n padding: 0;\n list-style: none;\n position: absolute;\n left: 0;\n z-index: 2;\n background: #fff;\n margin-top: 1px;\n}\n\n.caniuse-stats a[href] {\n white-space: nowrap;\n align-self: center;\n margin-left: 0.5em;\n}\n\n/* a browser version */\n.caniuse-cell {\n display: flex;\n font-size: 90%;\n height: 0.8cm;\n margin-right: 1px;\n margin-top: 0;\n min-width: 3cm;\n overflow: visible;\n justify-content: center;\n align-items: center;\n\n --supported: #2a8436;\n --no-support: #c44230;\n --no-support-alt: #b43b2b;\n --partial: #807301;\n --partial-alt: #746c00;\n\n color: #fff;\n background: repeating-linear-gradient(\n var(--caniuse-angle, 45deg),\n var(--caniuse-bg) 0,\n var(--caniuse-bg-alt) 1px,\n var(--caniuse-bg-alt) 0.4em,\n var(--caniuse-bg) calc(0.25em + 1px),\n var(--caniuse-bg) 0.75em\n );\n}\n\nli.caniuse-cell {\n margin-bottom: 1px;\n}\n\n.caniuse-cell:focus {\n outline: none;\n}\n\n/* supports */\n.caniuse-cell.y {\n background: var(--supported);\n}\n\n/* no support, disabled by default */\n.caniuse-cell.n,\n.caniuse-cell.d {\n --caniuse-angle: 45deg;\n --caniuse-bg: var(--no-support);\n --caniuse-bg-alt: var(--no-support-alt);\n}\n\n.caniuse-cell.d {\n --caniuse-angle: 180deg;\n}\n\n/* not supported by default / partial support etc\nsee https://github.com/Fyrd/caniuse/blob/master/CONTRIBUTING.md for stats */\n.caniuse-cell.a,\n.caniuse-cell.x,\n.caniuse-cell.p {\n --caniuse-angle: 90deg;\n --caniuse-bg: var(--partial);\n --caniuse-bg-alt: var(--partial-alt);\n}\n\n/* show rest of the browser versions */\n.caniuse-stats button:focus + ul,\n.caniuse-stats .caniuse-browser:hover > ul {\n display: block;\n}\n`;\n","// @ts-check\n/**\n * Module: \"core/caniuse\"\n * Adds a caniuse support table for a \"feature\" #1238\n * Usage options: https://github.com/w3c/respec/wiki/caniuse\n */\nimport { pub, sub } from \"./pubsubhub.js\";\nimport { showError, showWarning } from \"./utils.js\";\nimport css from \"../styles/caniuse.css.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/caniuse\";\n\nconst API_URL = \"https://respec.org/caniuse/\";\n\nconst BROWSERS = new Set([\n \"and_chr\",\n \"and_ff\",\n \"and_uc\",\n \"android\",\n \"bb\",\n \"chrome\",\n \"edge\",\n \"firefox\",\n \"ie\",\n \"ios_saf\",\n \"op_mini\",\n \"op_mob\",\n \"opera\",\n \"safari\",\n \"samsung\",\n]);\n\nexport function prepare(conf) {\n if (!conf.caniuse) {\n return; // nothing to do.\n }\n const options = getNormalizedConf(conf);\n conf.caniuse = options; // for tests\n if (!options.feature) {\n return; // no feature to show\n }\n\n document.head.appendChild(html`<style class=\"removeOnSave\">\n ${css}\n </style>`);\n\n const apiUrl = options.apiURL || API_URL;\n // Initiate a fetch, but do not wait. Try to fill the cache early instead.\n conf.state[name] = {\n fetchPromise: fetchStats(apiUrl, options),\n };\n}\n\nexport async function run(conf) {\n const options = conf.caniuse;\n if (!options?.feature) return;\n\n const featureURL = new URL(options.feature, \"https://caniuse.com/\").href;\n\n const headDlElem = document.querySelector(\".head dl\");\n const contentPromise = (async () => {\n try {\n const stats = await conf.state[name].fetchPromise;\n return html`${{ html: stats }}`;\n } catch (err) {\n const msg = `Couldn't find feature \"${options.feature}\" on caniuse.com.`;\n const hint =\n \"Please check the feature key on [caniuse.com](https://caniuse.com)\";\n showError(msg, name, { hint });\n console.error(err);\n return html`<a href=\"${featureURL}\">caniuse.com</a>`;\n }\n })();\n const definitionPair = html`<dt class=\"caniuse-title\">Browser support:</dt>\n <dd class=\"caniuse-stats\">\n ${{\n any: contentPromise,\n placeholder: \"Fetching data from caniuse.com...\",\n }}\n </dd>`;\n headDlElem.append(...definitionPair.childNodes);\n await contentPromise;\n\n // remove from export\n pub(\"amend-user-config\", { caniuse: options.feature });\n sub(\"beforesave\", outputDoc => {\n html.bind(outputDoc.querySelector(\".caniuse-stats\"))`\n <a href=\"${featureURL}\">caniuse.com</a>`;\n });\n}\n\n/**\n * returns normalized `conf.caniuse` configuration\n * @param {Object} conf configuration settings\n */\nfunction getNormalizedConf(conf) {\n const DEFAULTS = { versions: 4 };\n if (typeof conf.caniuse === \"string\") {\n return { feature: conf.caniuse, ...DEFAULTS };\n }\n const caniuseConf = { ...DEFAULTS, ...conf.caniuse };\n const { browsers } = caniuseConf;\n if (Array.isArray(browsers)) {\n const invalidBrowsers = browsers.filter(browser => !BROWSERS.has(browser));\n if (invalidBrowsers.length) {\n const names = invalidBrowsers.map(b => `\"\\`${b}\\`\"`).join(\", \");\n const msg =\n `Ignoring invalid browser(s): ${names} in ` +\n \"[`respecConfig.caniuse.browsers`](https://github.com/w3c/respec/wiki/caniuse)\";\n showWarning(msg, name);\n }\n }\n return caniuseConf;\n}\n\n/**\n * @param {string} apiURL\n * @typedef {Record<string, [string, string[]][]>} ApiResponse\n * @throws {Error} on failure\n */\nasync function fetchStats(apiURL, options) {\n const { feature, versions, browsers } = options;\n const searchParams = new URLSearchParams();\n searchParams.set(\"feature\", feature);\n searchParams.set(\"versions\", versions);\n if (Array.isArray(browsers)) {\n searchParams.set(\"browsers\", browsers.join(\",\"));\n }\n searchParams.set(\"format\", \"html\");\n const url = `${apiURL}?${searchParams.toString()}`;\n const response = await fetch(url);\n if (!response.ok) {\n const { status, statusText } = response;\n throw new Error(`Failed to get caniuse data: (${status}) ${statusText}`);\n }\n const stats = await response.text();\n return stats;\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.mdn {\n font-size: 0.75em;\n position: absolute;\n right: 0.3em;\n min-width: 0;\n margin-top: 3em;\n}\n\n.mdn details {\n width: 100%;\n margin: 1px 0;\n position: relative;\n z-index: 10;\n box-sizing: border-box;\n padding: 0.4em;\n padding-top: 0;\n}\n\n.mdn details[open] {\n min-width: 25ch;\n max-width: 32ch;\n background: #fff;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n z-index: 11;\n margin-bottom: 0.4em;\n}\n\n.mdn summary {\n text-align: right;\n cursor: default;\n margin-right: -0.4em;\n}\n\n.mdn summary span {\n font-family: zillaslab, Palatino, \"Palatino Linotype\", serif;\n color: #fff;\n background-color: #000;\n display: inline-block;\n padding: 3px;\n}\n\n.mdn a {\n display: inline-block;\n word-break: break-all;\n}\n\n.mdn p {\n margin: 0;\n}\n\n.mdn .engines-all {\n color: #058b00;\n}\n.mdn .engines-some {\n color: #b00;\n}\n\n.mdn table {\n width: 100%;\n font-size: 0.9em;\n}\n\n.mdn td {\n border: none;\n}\n\n.mdn td:nth-child(2) {\n text-align: right;\n}\n\n.mdn .nosupportdata {\n font-style: italic;\n margin: 0;\n}\n\n.mdn tr::before {\n content: \"\";\n display: table-cell;\n width: 1.5em;\n height: 1.5em;\n background: no-repeat center center / contain;\n font-size: 0.75em;\n}\n\n.mdn .no,\n.mdn .unknown {\n color: #cccccc;\n filter: grayscale(100%);\n}\n\n.mdn .no::before,\n.mdn .unknown::before {\n opacity: 0.5;\n}\n\n.mdn .chrome::before,\n.mdn .chrome_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/chrome.svg);\n}\n\n.mdn .edge::before,\n.mdn .edge_mobile::before {\n background-image: url(https://resources.whatwg.org/browser-logos/edge.svg);\n}\n\n.mdn .firefox::before,\n.mdn .firefox_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/firefox.png);\n}\n\n.mdn .ie::before {\n background-image: url(https://resources.whatwg.org/browser-logos/ie.png);\n}\n\n.mdn .opera::before,\n.mdn .opera_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/opera.svg);\n}\n\n.mdn .safari::before {\n background-image: url(https://resources.whatwg.org/browser-logos/safari.png);\n}\n\n.mdn .safari_ios::before {\n background-image: url(https://resources.whatwg.org/browser-logos/safari-ios.svg);\n}\n\n.mdn .samsunginternet_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/samsung.svg);\n}\n\n.mdn .webview_android::before {\n background-image: url(https://resources.whatwg.org/browser-logos/android-webview.png);\n}\n`;\n","// @ts-check\nimport { fetchAndCache, getIntlData, showError } from \"./utils.js\";\nimport css from \"../styles/mdn-annotation.css.js\";\nimport { html } from \"./import-maps.js\";\n\nexport const name = \"core/mdn-annotation\";\n\nconst BASE_JSON_PATH = \"https://w3c.github.io/mdn-spec-links/\";\nconst MDN_URL_BASE = \"https://developer.mozilla.org/en-US/docs/Web/\";\nconst MDN_BROWSERS = {\n // The browser IDs here must match the ones in the imported JSON data.\n // See the list of browser IDs at:\n // https://github.com/mdn/browser-compat-data/blob/master/schemas/compat-data-schema.md#browser-identifiers.\n chrome: \"Chrome\",\n chrome_android: \"Chrome Android\",\n edge: \"Edge\",\n edge_mobile: \"Edge Mobile\",\n firefox: \"Firefox\",\n firefox_android: \"Firefox Android\",\n ie: \"Internet Explorer\",\n // nodejs: \"Node.js\", // no data for features in HTML\n opera: \"Opera\",\n opera_android: \"Opera Android\",\n // qq_android: \"QQ Browser\", // not enough data for features in HTML\n safari: \"Safari\",\n safari_ios: \"Safari iOS\",\n samsunginternet_android: \"Samsung Internet\",\n // uc_android: \"UC browser\", // not enough data for features in HTML\n // uc_chinese_android: \"Chinese UC Browser\", // not enough data for features in HTML\n webview_android: \"WebView Android\",\n};\n\nconst localizationStrings = {\n en: {\n inAllEngines: \"This feature is in all major engines.\",\n inSomeEngines: \"This feature has limited support.\",\n },\n zh: {\n inAllEngines: \"所有主要引擎均支持此特性。\",\n inSomeEngines: \"此功能支持有限。\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n/**\n * @param {HTMLElement} node\n */\nfunction insertMDNBox(node) {\n const targetAncestor = node.closest(\"section\");\n if (!targetAncestor) return;\n const { previousElementSibling: targetSibling } = targetAncestor;\n if (targetSibling && targetSibling.classList.contains(\"mdn\")) {\n // If the target ancestor already has a mdnBox inserted, we just use it\n return targetSibling;\n }\n const mdnBox = html`<aside class=\"mdn\"></aside>`;\n targetAncestor.before(mdnBox);\n return mdnBox;\n}\n\n/**\n * @param {MdnEntry} mdnSpec\n * @returns {HTMLDetailsElement}\n */\nfunction attachMDNDetail(mdnSpec) {\n const { name, slug, summary, support, engines } = mdnSpec;\n const mdnSubPath = slug.slice(slug.indexOf(\"/\") + 1);\n const href = `${MDN_URL_BASE}${slug}`;\n const label = `Expand MDN details for ${name}`;\n const engineSupport = getEngineSupportIcons(engines);\n return html`<details>\n <summary aria-label=\"${label}\"><span>MDN</span>${engineSupport}</summary>\n <a title=\"${summary}\" href=\"${href}\">${mdnSubPath}</a>\n ${getEngineSupport(engines)}\n ${support\n ? buildBrowserSupportTable(support)\n : html`<p class=\"nosupportdata\">No support data.</p>`}\n </details>`;\n}\n\n/**\n * @param {MdnEntry['support']} support\n * @returns {HTMLTableElement}\n */\nfunction buildBrowserSupportTable(support) {\n /**\n * @param {string | keyof MDN_BROWSERS} browserId\n * @param {\"Yes\" | \"No\" | \"Unknown\"} yesNoUnknown\n * @param {string} version\n * @returns {HTMLTableRowElement}\n */\n function createRow(browserId, yesNoUnknown, version) {\n const displayStatus = yesNoUnknown === \"Unknown\" ? \"?\" : yesNoUnknown;\n const classList = `${browserId} ${yesNoUnknown.toLowerCase()}`;\n return html`<tr class=\"${classList}\">\n <td>${MDN_BROWSERS[browserId]}</td>\n <td>${version ? version : displayStatus}</td>\n </tr>`;\n }\n\n /**\n * @param {string | keyof MDN_BROWSERS} browserId\n * @param {VersionDetails} versionData\n */\n function createRowFromBrowserData(browserId, versionData) {\n if (versionData.version_removed) {\n return createRow(browserId, \"No\", \"\");\n }\n const versionAdded = versionData.version_added;\n if (typeof versionAdded === \"boolean\") {\n return createRow(browserId, versionAdded ? \"Yes\" : \"No\", \"\");\n } else if (!versionAdded) {\n return createRow(browserId, \"Unknown\", \"\");\n } else {\n return createRow(browserId, \"Yes\", `${versionAdded}+`);\n }\n }\n\n return html`<table>\n ${Object.keys(MDN_BROWSERS).map(browserId => {\n return support[browserId]\n ? createRowFromBrowserData(browserId, support[browserId])\n : createRow(browserId, \"Unknown\", \"\");\n })}\n </table>`;\n}\n\nexport async function run(conf) {\n const mdnKey = getMdnKey(conf);\n if (!mdnKey) return;\n\n const mdnSpecJson = await getMdnData(mdnKey, conf.mdn);\n if (!mdnSpecJson) return;\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.append(style);\n\n for (const elem of findElements(mdnSpecJson)) {\n const mdnSpecArray = mdnSpecJson[elem.id];\n const mdnBox = insertMDNBox(elem);\n if (!mdnBox) continue;\n for (const spec of mdnSpecArray) {\n mdnBox.append(attachMDNDetail(spec));\n }\n }\n}\n\n/** @returns {string} */\nfunction getMdnKey(conf) {\n const { shortName, mdn } = conf;\n if (!mdn) return;\n if (typeof mdn === \"string\") return mdn;\n return mdn.key || shortName;\n}\n\n/**\n * @param {string} key MDN key\n * @param {object} mdnConf\n * @param {string} [mdnConf.specMapUrl]\n * @param {string} [mdnConf.baseJsonPath]\n * @param {number} [mdnConf.maxAge]\n *\n * @typedef {{ version_added: string|boolean|null, version_removed?: string }} VersionDetails\n * @typedef {Record<string | keyof MDN_BROWSERS, VersionDetails>} MdnSupportEntry\n * @typedef {{ name: string, title: string, slug: string, summary: string, support: MdnSupportEntry, engines: string[] }} MdnEntry\n * @typedef {Record<string, MdnEntry[]>} MdnData\n * @returns {Promise<MdnData|undefined>}\n */\nasync function getMdnData(key, mdnConf) {\n const {\n baseJsonPath = BASE_JSON_PATH,\n maxAge = 60 * 60 * 24 * 1000,\n } = mdnConf;\n const url = new URL(`${key}.json`, baseJsonPath).href;\n const res = await fetchAndCache(url, maxAge);\n if (res.status === 404) {\n const msg = `Could not find MDN data associated with key \"${key}\".`;\n const hint = \"Please add a valid key to `respecConfig.mdn`\";\n showError(msg, name, { hint });\n return;\n }\n return await res.json();\n}\n\n/**\n * Find elements that can have an annotation box attached.\n * @param {MdnData} data\n */\nfunction findElements(data) {\n /** @type {NodeListOf<HTMLElement>} */\n const elemsWithId = document.body.querySelectorAll(\"[id]:not(script)\");\n return [...elemsWithId].filter(({ id }) => Array.isArray(data[id]));\n}\n\n/**\n * @param {MdnEntry['engines']} engines\n * @returns {HTMLSpanElement}\n */\nfunction getEngineSupportIcons(engines) {\n if (engines.length === 3) {\n return html`<span title=\"${l10n.inAllEngines}\">✅</span>`;\n }\n if (engines.length < 2) {\n return html`<span title=\"${l10n.inSomeEngines}\">🚫</span>`;\n }\n return html`<span> </span>`;\n}\n\n/**\n * @param {MdnEntry['engines']} engines\n * @returns {HTMLParagraphElement|undefined}\n */\nfunction getEngineSupport(engines) {\n if (engines.length === 3) {\n return html`<p class=\"engines-all\">${l10n.inAllEngines}</p>`;\n }\n if (engines.length < 2) {\n return html`<p class=\"engines-some\">${l10n.inSomeEngines}</p>`;\n }\n}\n","// @ts-check\n// Module ui/save-html\n// Saves content to HTML when asked to\nimport { getIntlData, showWarning } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { rsDocToDataURL } from \"../core/exporter.js\";\nimport { ui } from \"../core/ui.js\";\n\nexport const name = \"ui/save-html\";\n\nconst localizationStrings = {\n en: {\n save_snapshot: \"Export\",\n },\n nl: {\n save_snapshot: \"Bewaar Snapshot\",\n },\n ja: {\n save_snapshot: \"保存する\",\n },\n de: {\n save_snapshot: \"Exportieren\",\n },\n zh: {\n save_snapshot: \"导出\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst downloadLinks = [\n {\n id: \"respec-save-as-html\",\n fileName: \"index.html\",\n title: \"HTML\",\n type: \"text/html\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-xml\",\n fileName: \"index.xhtml\",\n title: \"XML\",\n type: \"application/xml\",\n get href() {\n return rsDocToDataURL(this.type);\n },\n },\n {\n id: \"respec-save-as-epub\",\n fileName: \"spec.epub\",\n title: \"EPUB 3\",\n type: \"application/epub+zip\",\n get href() {\n // Create and download an EPUB 3.2 version of the content\n // Using the EPUB 3.2 conversion service set up at labs.w3.org/r2epub\n // For more details on that service, see https://github.com/iherman/respec2epub\n const epubURL = new URL(\"https://labs.w3.org/r2epub/\");\n epubURL.searchParams.append(\"respec\", \"true\");\n epubURL.searchParams.append(\"url\", document.location.href);\n return epubURL.href;\n },\n },\n];\n\nfunction toDownloadLink(details) {\n const { id, href, fileName, title, type } = details;\n return html`<a\n href=\"${href}\"\n id=\"${id}\"\n download=\"${fileName}\"\n type=\"${type}\"\n class=\"respec-save-button\"\n onclick=${() => ui.closeModal()}\n >${title}</a\n >`;\n}\n\nconst saveDialog = {\n async show(button) {\n await document.respec.ready;\n const div = html`<div class=\"respec-save-buttons\">\n ${downloadLinks.map(toDownloadLink)}\n </div>`;\n ui.freshModal(l10n.save_snapshot, div, button);\n },\n};\n\nconst supportsDownload = \"download\" in HTMLAnchorElement.prototype;\nlet button;\nif (supportsDownload) {\n button = ui.addCommand(l10n.save_snapshot, show, \"Ctrl+Shift+Alt+S\", \"💾\");\n}\n\nfunction show() {\n if (!supportsDownload) return;\n saveDialog.show(button);\n}\n\n/**\n * @param {*} _\n * @param {string} mimeType\n */\nexport function exportDocument(_, mimeType) {\n const msg =\n \"Exporting via ui/save-html module's `exportDocument()` is deprecated and will be removed.\";\n const hint = \"Use core/exporter `rsDocToDataURL()` instead.\";\n showWarning(msg, name, { hint });\n return rsDocToDataURL(mimeType);\n}\n","// @ts-check\n// Module ui/search-specref\n// Search Specref database\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst URL = \"https://respec.org/specref/\";\n\nconst localizationStrings = {\n en: {\n search_specref: \"Search Specref\",\n },\n nl: {\n search_specref: \"Doorzoek Specref\",\n },\n ja: {\n search_specref: \"仕様検索\",\n },\n de: {\n search_specref: \"Spezifikationen durchsuchen\",\n },\n zh: {\n search_specref: \"搜索 Specref\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\nconst button = ui.addCommand(\n l10n.search_specref,\n show,\n \"Ctrl+Shift+Alt+space\",\n \"🔎\"\n);\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n /** @type {HTMLElement} */\n const specrefSearchUI = html`\n <iframe class=\"respec-iframe\" src=\"${URL}\" onload=${onLoad}></iframe>\n <a href=\"${URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.search_specref, specrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/search-xref\n// Search xref database\nimport { lang as defaultLang } from \"../core/l10n.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst URL = \"https://respec.org/xref/\";\n\nconst localizationStrings = {\n en: {\n title: \"Search definitions\",\n },\n ja: {\n title: \"定義検索\",\n },\n de: {\n title: \"Definitionen durchsuchen\",\n },\n zh: {\n title: \"搜索定义\",\n },\n};\nconst lang = defaultLang in localizationStrings ? defaultLang : \"en\";\nconst l10n = localizationStrings[lang];\n\nconst button = ui.addCommand(l10n.title, show, \"Ctrl+Shift+Alt+x\", \"📚\");\n\nfunction show() {\n const onLoad = e => e.target.classList.add(\"ready\");\n const xrefSearchUI = html`\n <iframe class=\"respec-iframe\" src=\"${URL}\" onload=\"${onLoad}\"></iframe>\n <a href=\"${URL}\" target=\"_blank\">Open Search UI in a new tab</a>\n `;\n ui.freshModal(l10n.title, xrefSearchUI, button);\n}\n","// @ts-check\n// Module ui/about-respec\n// A simple about dialog with pointer to the help\nimport { getIntlData } from \"../core/utils.js\";\nimport { html } from \"../core/import-maps.js\";\nimport { ui } from \"../core/ui.js\";\n\nconst localizationStrings = {\n en: {\n about_respec: \"About\",\n },\n zh: {\n about_respec: \"关于\",\n },\n nl: {\n about_respec: \"Over\",\n },\n ja: {\n about_respec: \"これについて\",\n },\n de: {\n about_respec: \"Über\",\n },\n};\nconst l10n = getIntlData(localizationStrings);\n\n// window.respecVersion is added at build time (see tools/builder.js)\nwindow.respecVersion = window.respecVersion || \"Developer Edition\";\nconst div = document.createElement(\"div\");\nconst render = html.bind(div);\nconst button = ui.addCommand(\n `${l10n.about_respec} ${window.respecVersion}`,\n show,\n \"Ctrl+Shift+Alt+A\",\n \"ℹ️\"\n);\n\nfunction show() {\n const entries = [];\n if (\"getEntriesByType\" in performance) {\n performance\n .getEntriesByType(\"measure\")\n .sort((a, b) => b.duration - a.duration)\n .map(({ name, duration }) => {\n const humanDuration =\n duration > 1000\n ? `${Math.round(duration / 1000.0)} second(s)`\n : `${duration.toFixed(2)} milliseconds`;\n return { name, duration: humanDuration };\n })\n .map(perfEntryToTR)\n .forEach(entry => {\n entries.push(entry);\n });\n }\n render`\n <p>\n ReSpec is a document production toolchain, with a notable focus on W3C specifications.\n </p>\n <p>\n <a href='https://github.com/w3c/respec/wiki'>Documentation</a>,\n <a href='https://github.com/w3c/respec/issues'>Bugs</a>.\n </p>\n <table border=\"1\" width=\"100%\" hidden=\"${entries.length ? false : true}\">\n <caption>\n Loaded plugins\n </caption>\n <thead>\n <tr>\n <th>\n Plugin Name\n </th>\n <th>\n Processing time\n </th>\n </tr>\n </thead>\n <tbody>${entries}</tbody>\n </table>\n`;\n ui.freshModal(`${l10n.about_respec} - ${window.respecVersion}`, div, button);\n}\n\nfunction perfEntryToTR({ name, duration }) {\n const moduleURL = `https://github.com/w3c/respec/blob/develop/src/${name}.js`;\n return html`\n <tr>\n <td><a href=\"${moduleURL}\">${name}</a></td>\n <td>${duration}</td>\n </tr>\n `;\n}\n","// @ts-check\n/**\n * This Module adds a metatag description to the document, based on the\n * first paragraph of the abstract.\n */\n\nexport const name = \"core/seo\";\n\nexport function run() {\n const firstParagraph = document.querySelector(\"#abstract p:first-of-type\");\n if (!firstParagraph) {\n return; // no abstract, so nothing to do\n }\n // Normalize whitespace: trim, remove new lines, tabs, etc.\n const content = firstParagraph.textContent.replace(/\\s+/, \" \").trim();\n const metaElem = document.createElement(\"meta\");\n metaElem.name = \"description\";\n metaElem.content = content;\n document.head.appendChild(metaElem);\n}\n","// @ts-check\n// Module w3c/seo\n// Manages SEO information for documents\n// e.g. set the canonical URL for the document if configured\nimport { resolveRef } from \"../core/biblio.js\";\nimport { showWarning } from \"../core/utils.js\";\nexport const name = \"w3c/seo\";\nexport async function run(conf) {\n // Don't include a canonical URL for documents\n // that haven't been published.\n if (!conf.canonicalURI) {\n switch (conf.specStatus) {\n case \"CG-DRAFT\":\n case \"BG-DRAFT\":\n case \"unofficial\":\n return;\n }\n }\n const trLatestUri = conf.shortName\n ? `https://www.w3.org/TR/${conf.shortName}/`\n : null;\n switch (conf.canonicalURI) {\n case \"edDraft\":\n if (conf.edDraftURI) {\n conf.canonicalURI = new URL(\n conf.edDraftURI,\n document.location.href\n ).href;\n } else {\n const msg = `Canonical URI set to edDraft, but no edDraftURI is set in configuration`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n break;\n case \"TR\":\n if (trLatestUri) {\n conf.canonicalURI = trLatestUri;\n } else {\n const msg = `Canonical URI set to TR, but no shortName is set in configuration`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n break;\n default:\n if (conf.canonicalURI) {\n try {\n conf.canonicalURI = new URL(\n conf.canonicalURI,\n document.location.href\n ).href;\n } catch (err) {\n const msg = `CanonicalURI is an invalid URL: ${err.message}`;\n showWarning(msg, name);\n conf.canonicalURI = null;\n }\n } else if (trLatestUri) {\n conf.canonicalURI = trLatestUri;\n }\n }\n if (conf.canonicalURI) {\n const linkElem = document.createElement(\"link\");\n linkElem.setAttribute(\"rel\", \"canonical\");\n linkElem.setAttribute(\"href\", conf.canonicalURI);\n document.head.appendChild(linkElem);\n }\n if (conf.doJsonLd) {\n await addJSONLDInfo(conf, document);\n }\n}\n\nasync function addJSONLDInfo(conf, doc) {\n // Content for JSON\n const type = [\"TechArticle\"];\n if (conf.rdfStatus) type.push(conf.rdfStatus);\n\n const jsonld = {\n \"@context\": [\n \"http://schema.org\",\n {\n \"@vocab\": \"http://schema.org/\",\n \"@language\": doc.documentElement.lang || \"en\",\n w3p: \"http://www.w3.org/2001/02pd/rec54#\",\n foaf: \"http://xmlns.com/foaf/0.1/\",\n datePublished: { \"@type\": \"http://www.w3.org/2001/XMLSchema#date\" },\n inLanguage: { \"@language\": null },\n isBasedOn: { \"@type\": \"@id\" },\n license: { \"@type\": \"@id\" },\n },\n ],\n id: conf.canonicalURI || conf.thisVersion,\n type,\n name: document.title,\n inLanguage: doc.documentElement.lang || \"en\",\n license: conf.licenseInfo.url,\n datePublished: conf.dashDate,\n /** @type {{ name: string, url?: string } | { name: string, url?: string }[]} */\n copyrightHolder: {\n name: \"World Wide Web Consortium\",\n url: \"https://www.w3.org/\",\n },\n discussionUrl: conf.issueBase,\n alternativeHeadline: conf.subtitle,\n isBasedOn: conf.prevVersion,\n };\n\n // add any additional copyright holders\n if (conf.additionalCopyrightHolders) {\n const addl = Array.isArray(conf.additionalCopyrightHolders)\n ? conf.additionalCopyrightHolders\n : [conf.additionalCopyrightHolders];\n jsonld.copyrightHolder = [\n jsonld.copyrightHolder,\n ...addl.map(h => ({ name: h })),\n ];\n }\n\n // description from meta description\n const description = doc.head.querySelector(\"meta[name=description]\");\n if (description) {\n jsonld.description = description.content;\n }\n\n // Editors\n if (conf.editors) {\n jsonld.editor = conf.editors.map(addPerson);\n }\n if (conf.authors) {\n jsonld.contributor = conf.authors.map(addPerson);\n }\n\n // normative and informative references\n const citationIds = [\n ...conf.normativeReferences,\n ...conf.informativeReferences,\n ];\n const citationContents = await Promise.all(\n citationIds.map(ref => resolveRef(ref))\n );\n jsonld.citation = citationContents\n .filter(ref => typeof ref === \"object\")\n .map(addRef);\n\n const script = doc.createElement(\"script\");\n script.type = \"application/ld+json\";\n script.textContent = JSON.stringify(jsonld, null, 2);\n doc.head.appendChild(script);\n}\n\n/**\n * Turn editors and authors into a list of JSON-LD relationships\n */\nfunction addPerson({ name, url, mailto, company, companyURL }) {\n const ed = {\n type: \"Person\",\n name,\n url,\n \"foaf:mbox\": mailto,\n };\n if (company || companyURL) {\n ed.worksFor = {\n name: company,\n url: companyURL,\n };\n }\n return ed;\n}\n\n/**\n * Create a reference URL from the ref\n */\nfunction addRef(ref) {\n const { href: id, title: name, href: url } = ref;\n const jsonld = {\n id,\n type: \"TechArticle\",\n name,\n url,\n };\n if (ref.authors) {\n jsonld.creator = ref.authors.map(a => ({ name: a }));\n }\n if (ref.rawDate) {\n jsonld.publishedDate = ref.rawDate;\n }\n if (ref.isbn) {\n jsonld.identifier = ref.isbn;\n }\n if (ref.publisher) {\n jsonld.publisher = { name: ref.publisher };\n }\n return jsonld;\n}\n","/*\nAdapted from Atom One Light by Daniel Gamage for ReSpec, with better color contrast\nOriginal One Light Syntax theme from https://github.com/atom/one-light-syntax\nbase: #fafafa\nmono-1: #383a42\nmono-2: #686b77\nmono-3: #a0a1a7\nhue-1: #0184bb\nhue-2: #4078f2\nhue-3: #a626a4\nhue-4: #50a14f\nhue-5: #e45649\nhue-5-2: #c91243\nhue-6: #986801\nhue-6-2: #c18401\n*/\n\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n color: #383a42;\n background: #fafafa;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #717277;\n font-style: italic;\n}\n\n.hljs-doctag,\n.hljs-keyword,\n.hljs-formula {\n color: #a626a4;\n}\n\n.hljs-section,\n.hljs-name,\n.hljs-selector-tag,\n.hljs-deletion,\n.hljs-subst {\n color: #ca4706;\n font-weight: bold;\n}\n\n.hljs-literal {\n color: #0b76c5;\n}\n\n.hljs-string,\n.hljs-regexp,\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta-string {\n color: #42803C;\n}\n\n.hljs-built_in,\n.hljs-class .hljs-title {\n color: #9a6a01;\n}\n\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-type,\n.hljs-selector-class,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-number {\n color: #986801;\n}\n\n.hljs-symbol,\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-title {\n color: #336ae3;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n\n.hljs-link {\n text-decoration: underline;\n}\n`;\n","/**\n * @param {string} path\n */\nexport async function fetchBase(path) {\n const response = await fetch(new URL(`../../${path}`, import.meta.url));\n return await response.text();\n}\n","// @ts-check\n/**\n * Module core/worker\n *\n * Exports a Web Worker for ReSpec, allowing for\n * multi-threaded processing of things.\n */\nexport const name = \"core/worker\";\n\n// Opportunistically preload syntax highlighter, which is used by the worker\nimport { createResourceHint } from \"./utils.js\";\nimport { expose } from \"./expose-modules.js\";\nimport { fetchBase } from \"./text-loader.js\";\n// Opportunistically preload syntax highlighter\n/** @type ResourceHintOption */\nconst hint = {\n hint: \"preload\",\n href: \"https://www.w3.org/Tools/respec/respec-highlight\",\n as: \"script\",\n};\nconst link = createResourceHint(hint);\ndocument.head.appendChild(link);\n\nasync function loadWorkerScript() {\n try {\n return (await import(\"text!../../worker/respec-worker.js\")).default;\n } catch {\n return fetchBase(\"worker/respec-worker.js\");\n }\n}\n\nasync function createWorker() {\n const workerScript = await loadWorkerScript();\n const workerURL = URL.createObjectURL(\n new Blob([workerScript], { type: \"application/javascript\" })\n );\n return new Worker(workerURL);\n}\n\nexport const workerPromise = createWorker();\n\nexpose(\n name,\n workerPromise.then(worker => ({ worker }))\n);\n","// @ts-check\n/**\n * Module core/highlight\n *\n * Performs syntax highlighting to all pre and code elements.\n */\nimport css from \"../styles/highlight.css.js\";\nimport { html } from \"./import-maps.js\";\nimport { msgIdGenerator } from \"./utils.js\";\nimport { workerPromise } from \"./worker.js\";\nexport const name = \"core/highlight\";\n\nconst nextMsgId = msgIdGenerator(\"highlight\");\n\nfunction getLanguageHint(classList) {\n return Array.from(classList)\n .filter(item => item !== \"highlight\" && item !== \"nolinks\")\n .map(item => item.toLowerCase());\n}\n\nasync function highlightElement(elem) {\n elem.setAttribute(\"aria-busy\", \"true\");\n const languages = getLanguageHint(elem.classList);\n let response;\n try {\n response = await sendHighlightRequest(elem.innerText, languages);\n } catch (err) {\n console.error(err);\n return;\n }\n const { language, value } = response;\n switch (elem.localName) {\n case \"pre\":\n elem.classList.remove(language);\n elem.innerHTML = `<code class=\"hljs${\n language ? ` ${language}` : \"\"\n }\">${value}</code>`;\n if (!elem.classList.length) elem.removeAttribute(\"class\");\n break;\n case \"code\":\n elem.innerHTML = value;\n elem.classList.add(\"hljs\");\n if (language) elem.classList.add(language);\n break;\n }\n elem.setAttribute(\"aria-busy\", \"false\");\n}\n\nasync function sendHighlightRequest(code, languages) {\n const msg = {\n action: \"highlight\",\n code,\n id: nextMsgId(),\n languages,\n };\n const worker = await workerPromise;\n worker.postMessage(msg);\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(\"Timed out waiting for highlight.\"));\n }, 4000);\n worker.addEventListener(\"message\", function listener(ev) {\n const {\n data: { id, language, value },\n } = ev;\n if (id !== msg.id) return; // not for us!\n worker.removeEventListener(\"message\", listener);\n clearTimeout(timeoutId);\n resolve({ language, value });\n });\n });\n}\n\nexport async function run(conf) {\n // Nothing to highlight\n if (conf.noHighlightCSS) return;\n const highlightables = [\n ...document.querySelectorAll(`\n pre:not(.idl):not(.nohighlight) > code:not(.nohighlight),\n pre:not(.idl):not(.nohighlight),\n code.highlight\n `),\n ].filter(\n // Filter pre's that contain code\n elem => elem.localName !== \"pre\" || !elem.querySelector(\"code\")\n );\n // Nothing to highlight\n if (!highlightables.length) {\n return;\n }\n const promisesToHighlight = highlightables\n .filter(elem => elem.textContent.trim())\n .map(highlightElement);\n document.head.appendChild(\n html`<style>\n ${css}\n </style>`\n );\n await Promise.all(promisesToHighlight);\n}\n","// @ts-check\n/**\n * Module core/data-tests\n *\n * Allows specs to link to test files in a test suite, by adding `details` of where\n * particular tests for a testable assertion can be found.\n *\n * `data-tests` takes a space separated list of URLs, e.g. data-test=\"foo.html bar.html\".\n *\n * Docs: https://github.com/w3c/respec/wiki/data-tests\n */\nimport { getIntlData, showError, showWarning } from \"./utils.js\";\nimport { html } from \"./import-maps.js\";\nconst localizationStrings = {\n en: {\n missing_test_suite_uri:\n \"Found tests in your spec, but missing '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' in your ReSpec config.\",\n tests: \"tests\",\n test: \"test\",\n },\n ja: {\n missing_test_suite_uri:\n \"この仕様内にテストの項目を検出しましたが,ReSpec の設定に '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' が見つかりません.\",\n tests: \"テスト\",\n test: \"テスト\",\n },\n de: {\n missing_test_suite_uri:\n \"Die Spezifikation enthält Tests, aber in der ReSpec-Konfiguration ist keine '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)' angegeben.\",\n tests: \"Tests\",\n test: \"Test\",\n },\n zh: {\n missing_test_suite_uri:\n \"本规范中包含测试,但在 ReSpec 配置中缺少 '\" +\n \"[`testSuiteURI`](https://github.com/w3c/respec/wiki/testSuiteURI)'。\",\n tests: \"测试\",\n test: \"测试\",\n },\n};\n\nconst l10n = getIntlData(localizationStrings);\n\nexport const name = \"core/data-tests\";\n\nfunction toListItem(href) {\n const emojiList = [];\n const [testFile] = new URL(href).pathname.split(\"/\").reverse();\n const testParts = testFile.split(\".\");\n let [testFileName] = testParts;\n\n const isSecureTest = testParts.find(part => part === \"https\");\n if (isSecureTest) {\n const requiresConnectionEmoji = document.createElement(\"span\");\n requiresConnectionEmoji.textContent = \"🔒\";\n requiresConnectionEmoji.setAttribute(\n \"aria-label\",\n \"requires a secure connection\"\n );\n requiresConnectionEmoji.setAttribute(\"title\", \"Test requires HTTPS\");\n testFileName = testFileName.replace(\".https\", \"\");\n emojiList.push(requiresConnectionEmoji);\n }\n\n const isManualTest = testFileName\n .split(\".\")\n .join(\"-\")\n .split(\"-\")\n .find(part => part === \"manual\");\n if (isManualTest) {\n const manualPerformEmoji = document.createElement(\"span\");\n manualPerformEmoji.textContent = \"💪\";\n manualPerformEmoji.setAttribute(\n \"aria-label\",\n \"the test must be run manually\"\n );\n manualPerformEmoji.setAttribute(\"title\", \"Manual test\");\n testFileName = testFileName.replace(\"-manual\", \"\");\n emojiList.push(manualPerformEmoji);\n }\n\n const testList = html`\n <li>\n <a href=\"${href}\">${testFileName}</a>\n ${emojiList}\n </li>\n `;\n return testList;\n}\n\nexport function run(conf) {\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\"[data-tests]\");\n const testables = [...elems].filter(elem => elem.dataset.tests);\n\n if (!testables.length) {\n return;\n }\n if (!conf.testSuiteURI) {\n showError(l10n.missing_test_suite_uri, name);\n return;\n }\n\n for (const elem of testables) {\n const tests = elem.dataset.tests.split(/,/gm).map(url => url.trim());\n const testURLs = toTestURLs(tests, conf.testSuiteURI);\n handleDuplicates(testURLs, elem);\n const details = toHTML(testURLs);\n elem.append(details);\n }\n}\n\n/**\n * @param {string[]} tests\n * @param {string} testSuiteURI\n */\nfunction toTestURLs(tests, testSuiteURI) {\n return tests\n .map(test => {\n try {\n return new URL(test, testSuiteURI).href;\n } catch {\n const msg = `Bad URI: ${test}`;\n showWarning(msg, name);\n }\n })\n .filter(href => href);\n}\n\n/**\n * @param {string[]} testURLs\n * @param {HTMLElement} elem\n */\nfunction handleDuplicates(testURLs, elem) {\n const duplicates = testURLs.filter(\n (link, i, self) => self.indexOf(link) !== i\n );\n if (duplicates.length) {\n const msg = `Duplicate tests found`;\n const hint = `To fix, remove duplicates from \"data-tests\": ${duplicates\n .map(url => new URL(url).pathname)\n .join(\", \")}`;\n showWarning(msg, name, { hint, elements: [elem] });\n }\n}\n\n/**\n * @param {string[]} testURLs\n */\nfunction toHTML(testURLs) {\n const uniqueList = [...new Set(testURLs)];\n const details = html`\n <details class=\"respec-tests-details removeOnSave\">\n <summary>tests: ${uniqueList.length}</summary>\n <ul>\n ${uniqueList.map(toListItem)}\n </ul>\n </details>\n `;\n return details;\n}\n","// @ts-check\nimport { showWarning } from \"./utils.js\";\nexport const name = \"core/list-sorter\";\n\nfunction makeSorter(direction) {\n const order = direction === \"ascending\" ? 1 : -1;\n return ({ textContent: a }, { textContent: b }) => {\n return order * a.trim().localeCompare(b.trim());\n };\n}\n/**\n * Shallow sort list items in OL, and UL elements.\n *\n * @param {HTMLUListElement} elem\n * @returns {DocumentFragment}\n */\nexport function sortListItems(elem, dir) {\n const elements = [...elem.querySelectorAll(\":scope > li\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n frag.appendChild(elem);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\n/**\n * Shallow sort a definition list based on its definition terms (dt) elements.\n *\n * @param {HTMLDListElement} dl\n * @returns {DocumentFragment}\n */\nexport function sortDefinitionTerms(dl, dir) {\n const elements = [...dl.querySelectorAll(\":scope > dt\")];\n const sortedElements = elements.sort(makeSorter(dir)).reduce((frag, elem) => {\n const { nodeType, nodeName } = elem;\n const children = document.createDocumentFragment();\n let { nextSibling: next } = elem;\n while (next) {\n if (!next.nextSibling) {\n break;\n }\n children.appendChild(next.cloneNode(true));\n const { nodeType: nextType, nodeName: nextName } = next.nextSibling;\n const isSameType = nextType === nodeType && nextName === nodeName;\n if (isSameType) {\n break;\n }\n next = next.nextSibling;\n }\n children.prepend(elem.cloneNode(true));\n frag.appendChild(children);\n return frag;\n }, document.createDocumentFragment());\n return sortedElements;\n}\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const sortables = document.querySelectorAll(\"[data-sort]\");\n for (const elem of sortables) {\n let sortedElems;\n const dir = elem.dataset.sort || \"ascending\";\n switch (elem.localName) {\n case \"dl\": {\n const definition = /** @type {HTMLDListElement} */ (elem);\n sortedElems = sortDefinitionTerms(definition, dir);\n break;\n }\n case \"ol\":\n case \"ul\": {\n const list = /** @type {HTMLUListElement} */ (elem);\n sortedElems = sortListItems(list, dir);\n break;\n }\n default: {\n const msg = `ReSpec can't sort ${elem.localName} elements.`;\n showWarning(msg, name, { elements: [elem] });\n }\n }\n if (sortedElems) {\n const range = document.createRange();\n range.selectNodeContents(elem);\n range.deleteContents();\n elem.appendChild(sortedElems);\n }\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\nvar.respec-hl {\n color: var(--color, #000);\n background-color: var(--bg-color);\n box-shadow: 0 0 0px 2px var(--bg-color);\n}\n\n/* highlight colors\n https://github.com/w3c/tr-design/issues/152\n*/\nvar.respec-hl-c1 {\n --bg-color: #f4d200;\n}\n\nvar.respec-hl-c2 {\n --bg-color: #ff87a2;\n}\n\nvar.respec-hl-c3 {\n --bg-color: #96e885;\n}\n\nvar.respec-hl-c4 {\n --bg-color: #3eeed2;\n}\n\nvar.respec-hl-c5 {\n --bg-color: #eacfb6;\n}\n\nvar.respec-hl-c6 {\n --bg-color: #82ddff;\n}\n\nvar.respec-hl-c7 {\n --bg-color: #ffbcf2;\n}\n\n@media print {\n var.respec-hl {\n background: none;\n color: #000;\n box-shadow: unset;\n }\n}\n`;\n","// @ts-check\n/**\n * Module core/highlight-vars\n * Highlights occurrences of a <var> within a section on click.\n * Set `conf.highlightVars = true` to enable.\n * Removes highlights from <var> if clicked anywhere else.\n * All is done while keeping in mind that exported html stays clean\n * on export.\n */\nimport css from \"../styles/var.css.js\";\nimport { norm } from \"./utils.js\";\nimport { sub } from \"./pubsubhub.js\";\n\nexport const name = \"core/highlight-vars\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = css;\n styleElement.classList.add(\"removeOnSave\");\n document.head.appendChild(styleElement);\n\n document\n .querySelectorAll(\"var\")\n .forEach(varElem => varElem.addEventListener(\"click\", highlightListener));\n\n // remove highlights, cleanup empty class/style attributes\n sub(\"beforesave\", outputDoc => {\n outputDoc.querySelectorAll(\"var.respec-hl\").forEach(removeHighlight);\n });\n}\n\nfunction highlightListener(ev) {\n ev.stopPropagation();\n const { target: varElem } = ev;\n const hightligtedElems = highlightVars(varElem);\n const resetListener = () => {\n const hlColor = getHighlightColor(varElem);\n hightligtedElems.forEach(el => removeHighlight(el, hlColor));\n [...HL_COLORS.keys()].forEach(key => HL_COLORS.set(key, true));\n };\n if (hightligtedElems.length) {\n document.body.addEventListener(\"click\", resetListener, { once: true });\n }\n}\n\n// availability of highlight colors. colors from var.css\nconst HL_COLORS = new Map([\n [\"respec-hl-c1\", true],\n [\"respec-hl-c2\", true],\n [\"respec-hl-c3\", true],\n [\"respec-hl-c4\", true],\n [\"respec-hl-c5\", true],\n [\"respec-hl-c6\", true],\n [\"respec-hl-c7\", true],\n]);\n\nfunction getHighlightColor(target) {\n // return current colors if applicable\n const { value } = target.classList;\n const re = /respec-hl-\\w+/;\n const activeClass = re.test(value) && value.match(re);\n if (activeClass) return activeClass[0];\n\n // first color preference\n if (HL_COLORS.get(\"respec-hl-c1\") === true) return \"respec-hl-c1\";\n\n // otherwise get some other available color\n return [...HL_COLORS.keys()].find(c => HL_COLORS.get(c)) || \"respec-hl-c1\";\n}\n\nfunction highlightVars(varElem) {\n const textContent = norm(varElem.textContent);\n const parent = varElem.closest(\"section\");\n const highlightColor = getHighlightColor(varElem);\n\n const varsToHighlight = [...parent.querySelectorAll(\"var\")].filter(\n el =>\n norm(el.textContent) === textContent && el.closest(\"section\") === parent\n );\n\n // update availability of highlight color\n const colorStatus = varsToHighlight[0].classList.contains(\"respec-hl\");\n HL_COLORS.set(highlightColor, colorStatus);\n\n // highlight vars\n if (colorStatus) {\n varsToHighlight.forEach(el => removeHighlight(el, highlightColor));\n return [];\n } else {\n varsToHighlight.forEach(el => addHighlight(el, highlightColor));\n }\n return varsToHighlight;\n}\n\nfunction removeHighlight(el, highlightColor) {\n el.classList.remove(\"respec-hl\", highlightColor);\n // clean up empty class attributes so they don't come in export\n if (!el.classList.length) el.removeAttribute(\"class\");\n}\n\nfunction addHighlight(elem, highlightColor) {\n elem.classList.add(\"respec-hl\", highlightColor);\n}\n","/* dfn popup panel that list all local references to a dfn */\n/**\n * TODO: Revert changes due to https://github.com/w3c/respec/pull/2888 when\n * https://github.com/w3c/css-validator/pull/111 is fixed.\n */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\ndfn {\n cursor: pointer;\n}\n\n.dfn-panel {\n position: absolute;\n z-index: 35;\n min-width: 300px;\n max-width: 500px;\n padding: 0.5em 0.75em;\n margin-top: 0.6em;\n font: small Helvetica Neue, sans-serif, Droid Sans Fallback;\n background: #fff;\n color: black;\n box-shadow: 0 1em 3em -0.4em rgba(0, 0, 0, 0.3),\n 0 0 1px 1px rgba(0, 0, 0, 0.05);\n border-radius: 2px;\n}\n/* Triangle/caret */\n.dfn-panel:not(.docked) > .caret {\n position: absolute;\n top: -9px;\n}\n.dfn-panel:not(.docked) > .caret::before,\n.dfn-panel:not(.docked) > .caret::after {\n content: \"\";\n position: absolute;\n border: 10px solid transparent;\n border-top: 0;\n border-bottom: 10px solid #fff;\n top: 0;\n}\n.dfn-panel:not(.docked) > .caret::before {\n border-bottom: 9px solid #a2a9b1;\n}\n\n.dfn-panel * {\n margin: 0;\n}\n\n.dfn-panel b {\n display: block;\n color: #000;\n margin-top: 0.25em;\n}\n\n.dfn-panel ul a[href] {\n color: #333;\n}\n\n.dfn-panel > div {\n display: flex;\n}\n\n.dfn-panel a.self-link {\n font-weight: bold;\n margin-right: auto;\n}\n\n.dfn-panel .marker {\n padding: 0.1em;\n margin-left: 0.5em;\n border-radius: 0.2em;\n text-align: center;\n white-space: nowrap;\n font-size: 90%;\n color: #040b1c;\n}\n\n.dfn-panel .marker.dfn-exported {\n background: #d1edfd;\n box-shadow: 0 0 0 0.125em #1ca5f940;\n}\n.dfn-panel .marker.idl-block {\n background: #8ccbf2;\n box-shadow: 0 0 0 0.125em #0670b161;\n}\n\n.dfn-panel a:not(:hover) {\n text-decoration: none !important;\n border-bottom: none !important;\n}\n\n.dfn-panel a[href]:hover {\n border-bottom-width: 1px;\n}\n\n.dfn-panel ul {\n padding: 0;\n}\n\n.dfn-panel li {\n margin-left: 1em;\n}\n\n.dfn-panel.docked {\n position: fixed;\n left: 0.5em;\n top: unset;\n bottom: 2em;\n margin: 0 auto;\n /* 0.75em from padding (x2), 0.5em from left position, 0.2em border (x2) */\n max-width: calc(100vw - 0.75em * 2 - 0.5em - 0.2em * 2);\n max-height: 30vh;\n overflow: auto;\n}\n`;\n","// @ts-check\n// Constructs \"dfn panels\" which show all the local references to a dfn and a\n// self link to the selected dfn. Based on Bikeshed's dfn panels at\n// https://github.com/tabatkins/bikeshed/blob/ef44162c2e/bikeshed/dfnpanels.py\nimport css from \"../styles/dfn-panel.css.js\";\nimport { fetchBase } from \"./text-loader.js\";\nimport { html } from \"./import-maps.js\";\nimport { norm } from \"./utils.js\";\n\nexport const name = \"core/dfn-panel\";\n\nexport async function run() {\n document.head.insertBefore(\n html`<style>\n ${css}\n </style>`,\n document.querySelector(\"link\")\n );\n\n /** @type {NodeListOf<HTMLElement>} */\n const elems = document.querySelectorAll(\n \"dfn[id], #index-defined-elsewhere .index-term\"\n );\n const panels = document.createDocumentFragment();\n for (const el of elems) {\n panels.append(createPanel(el));\n }\n document.body.append(panels);\n\n const script = document.createElement(\"script\");\n script.id = \"respec-dfn-panel\";\n script.textContent = await loadScript();\n document.body.append(script);\n}\n\n/** @param {HTMLElement} dfn */\nfunction createPanel(dfn) {\n const { id } = dfn;\n const href = dfn.dataset.href || `#${id}`;\n /** @type {NodeListOf<HTMLAnchorElement>} */\n const links = document.querySelectorAll(`a[href=\"${href}\"]:not(.index-term)`);\n\n const panelId = `dfn-panel-for-${dfn.id}`;\n /** @type {HTMLElement} */\n const panel = html`\n <aside class=\"dfn-panel\" id=\"${panelId}\" hidden>\n <span class=\"caret\"></span>\n <div>\n <a class=\"self-link\" href=\"${href}\">Permalink</a>\n ${dfnExportedMarker(dfn)} ${idlMarker(dfn, links)}\n </div>\n <b>Referenced in:</b>\n ${referencesToHTML(id, links)}\n </aside>\n `;\n return panel;\n}\n\n/** @param {HTMLElement} dfn */\nfunction dfnExportedMarker(dfn) {\n if (!dfn.matches(\"dfn[data-export]\")) return null;\n return html`<span\n class=\"marker dfn-exported\"\n title=\"Definition can be referenced by other specifications\"\n >exported</span\n >`;\n}\n\n/**\n * @param {HTMLElement} dfn\n * @param {NodeListOf<HTMLAnchorElement>} links\n */\nfunction idlMarker(dfn, links) {\n if (!dfn.hasAttribute(\"data-idl\")) return null;\n\n for (const anchor of links) {\n if (anchor.dataset.linkType !== dfn.dataset.dfnType) continue;\n const parentIdlBlock = anchor.closest(\"pre.idl\");\n if (parentIdlBlock && parentIdlBlock.id) {\n const href = `#${parentIdlBlock.id}`;\n return html`<a\n href=\"${href}\"\n class=\"marker idl-block\"\n title=\"Jump to IDL declaration\"\n >IDL</a\n >`;\n }\n }\n return null;\n}\n\n/**\n * @param {string} id dfn id\n * @param {NodeListOf<HTMLAnchorElement>} links\n * @returns {HTMLUListElement}\n */\nfunction referencesToHTML(id, links) {\n if (!links.length) {\n return html`<ul>\n <li>Not referenced in this document.</li>\n </ul>`;\n }\n\n /** @type {Map<string, string[]>} */\n const titleToIDs = new Map();\n links.forEach((link, i) => {\n const linkID = link.id || `ref-for-${id}-${i + 1}`;\n if (!link.id) link.id = linkID;\n const title = getReferenceTitle(link);\n const ids = titleToIDs.get(title) || titleToIDs.set(title, []).get(title);\n ids.push(linkID);\n });\n\n /**\n * Returns a list that is easier to render in `listItemToHTML`.\n * @param {[string, string[]]} entry an entry from `titleToIDs`\n * @returns {{ title: string, id: string }[]} The first list item contains\n * title from `getReferenceTitle`, rest of items contain strings like `(2)`,\n * `(3)` as title.\n */\n const toLinkProps = ([title, ids]) => {\n return [{ title, id: ids[0] }].concat(\n ids.slice(1).map((id, i) => ({ title: `(${i + 2})`, id }))\n );\n };\n\n /**\n * @param {[string, string[]]} entry\n * @returns {HTMLLIElement}\n */\n const listItemToHTML = entry => html`<li>\n ${toLinkProps(entry).map(\n link => html`<a href=\"#${link.id}\">${link.title}</a>${\" \"}`\n )}\n </li>`;\n\n return html`<ul>\n ${[...titleToIDs].map(listItemToHTML)}\n </ul>`;\n}\n\n/** @param {HTMLAnchorElement} link */\nfunction getReferenceTitle(link) {\n const section = link.closest(\"section\");\n if (!section) return null;\n const heading = section.querySelector(\"h1, h2, h3, h4, h5, h6\");\n if (!heading) return null;\n return norm(heading.textContent);\n}\n\nasync function loadScript() {\n try {\n return (await import(\"text!./dfn-panel.runtime.js\")).default;\n } catch {\n return fetchBase(\"./src/core/dfn-panel.runtime.js\");\n }\n}\n","const css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\nvar {\n position: relative;\n cursor: pointer;\n}\n\nvar[data-type]::before,\nvar[data-type]::after {\n position: absolute;\n left: 50%;\n top: -6px;\n opacity: 0;\n transition: opacity 0.4s;\n pointer-events: none;\n}\n\n/* the triangle or arrow or caret or whatever */\nvar[data-type]::before {\n content: \"\";\n transform: translateX(-50%);\n border-width: 4px 6px 0 6px;\n border-style: solid;\n border-color: transparent;\n border-top-color: #000;\n}\n\n/* actual text */\nvar[data-type]::after {\n content: attr(data-type);\n transform: translateX(-50%) translateY(-100%);\n background: #000;\n text-align: center;\n /* additional styling */\n font-family: \"Dank Mono\", \"Fira Code\", monospace;\n font-style: normal;\n padding: 6px;\n border-radius: 3px;\n color: #daca88;\n text-indent: 0;\n font-weight: normal;\n}\n\nvar[data-type]:hover::after,\nvar[data-type]:hover::before {\n opacity: 1;\n}\n`;\n","// @ts-check\n/**\n * Module core/data-type\n * Propagates data type of a <var> to subsequent instances within a section.\n * Also adds the CSS for the data type tooltip.\n * Set `conf.highlightVars = true` to enable.\n */\nimport css from \"../styles/datatype.css.js\";\n\nexport const name = \"core/data-type\";\n\nexport function run(conf) {\n if (!conf.highlightVars) {\n return;\n }\n\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n let section = null;\n const varMap = new Map();\n /** @type {NodeListOf<HTMLElement>} */\n const variables = document.querySelectorAll(\"section var\");\n for (const varElem of variables) {\n const currentSection = varElem.closest(\"section\");\n if (section !== currentSection) {\n section = currentSection;\n varMap.clear();\n }\n if (varElem.dataset.type) {\n varMap.set(varElem.textContent.trim(), varElem.dataset.type);\n continue;\n }\n const type = varMap.get(varElem.textContent.trim());\n if (type) varElem.dataset.type = type;\n }\n}\n","/* For assertions in lists containing algorithms */\nconst css = String.raw;\n\n// Prettier ignore only to keep code indented from level 0.\n// prettier-ignore\nexport default css`\n.assert {\n background: #eee;\n border-left: 0.5em solid #aaa;\n padding: 0.3em;\n}\n`;\n","// @ts-check\n/**\nCurrently used only for adding 'assert' class to algorithm lists\n*/\nimport css from \"../styles/algorithms.css.js\";\n\nexport const name = \"core/algorithms\";\n\nexport function run() {\n const elements = Array.from(document.querySelectorAll(\"ol.algorithm li\"));\n elements\n .filter(li => li.textContent.trim().startsWith(\"Assert: \"))\n .forEach(li => li.classList.add(\"assert\"));\n if (document.querySelector(\".assert\")) {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n }\n}\n","// @ts-check\n// expands empty anchors based on their context\nimport { makeSafeCopy, norm, renameElement, showError } from \"./utils.js\";\n\nexport const name = \"core/anchor-expander\";\n\nexport function run() {\n /** @type {NodeListOf<HTMLElement>} */\n const anchorElements = document.querySelectorAll(\n \"a[href^='#']:not(.self-link):not([href$='the-empty-string'])\"\n );\n const anchors = [...anchorElements].filter(a => a.textContent.trim() === \"\");\n for (const a of anchors) {\n const id = a.getAttribute(\"href\").slice(1);\n const matchingElement = document.getElementById(id);\n if (!matchingElement) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Couldn't expand inline reference. The id \"${id}\" is not in the document.`;\n const title = `No matching id in document: ${id}.`;\n showError(msg, name, { title, elements: [a] });\n continue;\n }\n switch (matchingElement.localName) {\n case \"h6\":\n case \"h5\":\n case \"h4\":\n case \"h3\":\n case \"h2\": {\n processHeading(matchingElement, a);\n break;\n }\n case \"section\": {\n // find first heading in the section\n processSection(matchingElement, id, a);\n break;\n }\n case \"figure\": {\n processFigure(matchingElement, id, a);\n break;\n }\n case \"aside\":\n case \"div\": {\n processBox(matchingElement, id, a);\n break;\n }\n default: {\n a.textContent = a.getAttribute(\"href\");\n const msg = \"ReSpec doesn't support expanding this kind of reference.\";\n const title = `Can't expand \"#${id}\".`;\n showError(msg, name, { title, elements: [a] });\n }\n }\n localize(matchingElement, a);\n a.normalize();\n }\n}\n\nfunction processBox(matchingElement, id, a) {\n const selfLink = matchingElement.querySelector(\".marker .self-link\");\n if (!selfLink) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching element \"${id}\", but it has no title or marker.`;\n const title = \"Missing title.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n const copy = makeSafeCopy(selfLink);\n a.append(...copy.childNodes);\n a.classList.add(\"box-ref\");\n}\n\nfunction processFigure(matchingElement, id, a) {\n const figcaption = matchingElement.querySelector(\"figcaption\");\n if (!figcaption) {\n a.textContent = a.getAttribute(\"href\");\n const msg = `Found matching figure \"${id}\", but figure is lacking a \\`<figcaption>\\`.`;\n const title = \"Missing figcaption in referenced figure.\";\n showError(msg, name, { title, elements: [a] });\n return;\n }\n // remove the figure's title\n const children = [...makeSafeCopy(figcaption).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"fig-title\")\n );\n // drop an empty space at the end.\n children.pop();\n a.append(...children);\n a.classList.add(\"fig-ref\");\n const figTitle = figcaption.querySelector(\".fig-title\");\n if (!a.hasAttribute(\"title\") && figTitle) {\n a.title = norm(figTitle.textContent);\n }\n}\n\nfunction processSection(matchingElement, id, a) {\n const heading = matchingElement.querySelector(\"h6, h5, h4, h3, h2\");\n if (!heading) {\n a.textContent = a.getAttribute(\"href\");\n const msg =\n \"Found matching section, but the section was lacking a heading element.\";\n const title = `No matching id in document: \"${id}\".`;\n showError(msg, name, { title, elements: [a] });\n return;\n }\n processHeading(heading, a);\n localize(heading, a);\n}\n\nfunction processHeading(heading, a) {\n const hadSelfLink = heading.querySelector(\".self-link\");\n const children = [...makeSafeCopy(heading).childNodes].filter(\n node => !node.classList || !node.classList.contains(\"self-link\")\n );\n a.append(...children);\n if (hadSelfLink) a.prepend(\"§\\u00A0\");\n a.classList.add(\"sec-ref\");\n // Trim stray whitespace of the last text node (see bug #3265).\n if (a.lastChild.nodeType === Node.TEXT_NODE) {\n a.lastChild.textContent = a.lastChild.textContent.trimEnd();\n }\n // Replace all inner anchors for span elements (see bug #3136)\n a.querySelectorAll(\"a\").forEach(a => {\n const span = renameElement(a, \"span\");\n // Remove the old attributes\n for (const attr of [...span.attributes]) {\n span.removeAttributeNode(attr);\n }\n });\n}\n\nfunction localize(matchingElement, newElement) {\n for (const attrName of [\"dir\", \"lang\"]) {\n // Already set on element, don't override.\n if (newElement.hasAttribute(attrName)) continue;\n\n // Closest in tree setting the attribute\n const matchingClosest = matchingElement.closest(`[${attrName}]`);\n if (!matchingClosest) continue;\n\n // Closest to reference setting the attribute\n const newClosest = newElement.closest(`[${attrName}]`);\n\n // It's the same, so already inherited from closest (probably HTML element or body).\n if (\n newClosest &&\n newClosest.getAttribute(attrName) ===\n matchingClosest.getAttribute(attrName)\n )\n continue;\n // Otherwise, set it.\n newElement.setAttribute(attrName, matchingClosest.getAttribute(attrName));\n }\n}\n","// @ts-check\n/**\n * Fetches commits between two commitish (tag or commit) - `from` and `to=HEAD`\n * and shows them as a list of \"changes during\" those commitish. If a filter\n * function is provided by the user, it is used to filter the commits that are\n * to be shown. Otherwise, all commits are shown.\n *\n * @typedef {{message: string, hash: string}} Commit\n */\nimport { github } from \"../github.js\";\nimport { html } from \"../import-maps.js\";\nimport { showError } from \"../utils.js\";\n\nexport const name = \"rs-changelog\";\n\nexport const element = class ChangelogElement extends HTMLElement {\n constructor() {\n super();\n this.props = {\n from: this.getAttribute(\"from\"),\n to: this.getAttribute(\"to\") || \"HEAD\",\n /** @type {(commit: Commit) => boolean} */\n filter:\n typeof window[this.getAttribute(\"filter\")] === \"function\"\n ? window[this.getAttribute(\"filter\")]\n : () => true,\n };\n }\n\n connectedCallback() {\n const { from, to, filter } = this.props;\n html.bind(this)`\n <ul>\n ${{\n any: fetchCommits(from, to, filter)\n .then(commits => toHTML(commits))\n .catch(error => showError(error.message, name, { elements: [this] }))\n .finally(() => {\n this.dispatchEvent(new CustomEvent(\"done\"));\n }),\n placeholder: \"Loading list of commits...\",\n }}\n </ul>\n `;\n }\n};\n\nasync function fetchCommits(from, to, filter) {\n /** @type {Commit[]} */\n let commits;\n try {\n const gh = await github;\n if (!gh) {\n throw new Error(\"`respecConfig.github` is not set\");\n }\n const url = new URL(\"commits\", `${gh.apiBase}/${gh.fullName}/`);\n url.searchParams.set(\"from\", from);\n url.searchParams.set(\"to\", to);\n\n const res = await fetch(url.href);\n if (!res.ok) {\n throw new Error(\n `Request to ${url} failed with status code ${res.status}`\n );\n }\n commits = await res.json();\n if (!commits.length) {\n throw new Error(`No commits between ${from}..${to}.`);\n }\n commits = commits.filter(filter);\n } catch (error) {\n const msg = `Error loading commits from GitHub. ${error.message}`;\n console.error(error);\n throw new Error(msg);\n }\n return commits;\n}\n\nasync function toHTML(commits) {\n const { repoURL } = await github;\n return commits.map(commit => {\n const [message, prNumber = null] = commit.message.split(/\\(#(\\d+)\\)/, 2);\n const commitURL = `${repoURL}commit/${commit.hash}`;\n const prURL = prNumber ? `${repoURL}pull/${prNumber}` : null;\n const pr = prNumber && html` (<a href=\"${prURL}\">#${prNumber}</a>)`;\n return html`<li><a href=\"${commitURL}\">${message.trim()}</a>${pr}</li>`;\n });\n}\n","// @ts-check\n/**\n * Registers custom elements and waits for them to finish their processing.\n *\n * Every custom element file exports:\n * - `name`: registered name of the custom element, prefixed with `rs-`.\n * - `element`: class defintion of the custom element.\n *\n * Every custom element must dispatch a CustomEvent 'done' that tells the\n * element has finished its processing, with or without errors.\n *\n * @typedef {{ name: string, element: CustomElementConstructor }} CustomElementDfn\n */\n\nimport * as changelog from \"./rs-changelog.js\";\n/** @type {CustomElementDfn[]} */\nconst CUSTOM_ELEMENTS = [changelog];\n\nexport const name = \"core/custom-elements/index\";\n\nexport async function run() {\n // prepare and register elements\n CUSTOM_ELEMENTS.forEach(el => {\n customElements.define(el.name, el.element);\n });\n\n // wait for each element to be ready\n const selectors = CUSTOM_ELEMENTS.map(el => el.name).join(\", \");\n const elems = document.querySelectorAll(selectors);\n const readyPromises = [...elems].map(\n el => new Promise(res => el.addEventListener(\"done\", res, { once: true }))\n );\n await Promise.all(readyPromises);\n}\n","// @ts-check\n/**\n * Module: core/a11y\n * Lints for accessibility issues using axe-core package.\n */\n\nimport { showError, showWarning } from \"./utils.js\";\n\nexport const name = \"core/a11y\";\n\nconst DISABLED_RULES = [\n \"color-contrast\", // too slow 🐢\n \"landmark-one-main\", // need to add a <main>, else it marks entire page as errored\n \"landmark-unique\",\n \"region\",\n];\n\nexport async function run(conf) {\n if (!conf.a11y) {\n return;\n }\n\n const options = conf.a11y === true ? {} : conf.a11y;\n const violations = await getViolations(options);\n for (const violation of violations) {\n /**\n * We're grouping by failureSummary as it contains hints to fix the issue.\n * For example, with color-constrast rule, it tells about the present color\n * contrast and how to fix it. If we don't group, errors will be repetitive.\n * @type {Map<string, HTMLElement[]>}\n */\n const groupedBySummary = new Map();\n for (const node of violation.nodes) {\n const { failureSummary, element } = node;\n const elements =\n groupedBySummary.get(failureSummary) ||\n groupedBySummary.set(failureSummary, []).get(failureSummary);\n elements.push(element);\n }\n\n const { id, help, description, helpUrl } = violation;\n const title = `a11y/${id}: ${help}`;\n for (const [failureSummary, elements] of groupedBySummary) {\n const hints = formatHintsAsMarkdown(failureSummary);\n const details = `\\n\\n${description}.\\n\\n${hints}. ([Learn more](${helpUrl}))`;\n showWarning(title, name, { details, elements });\n }\n }\n}\n\n/**\n * @param {object} opts Options as described at https://github.com/dequelabs/axe-core/blob/develop/doc/API.md#options-parameter\n */\nasync function getViolations(opts) {\n const { rules, ...otherOptions } = opts;\n const options = {\n rules: {\n ...Object.fromEntries(DISABLED_RULES.map(id => [id, { enabled: false }])),\n ...rules,\n },\n ...otherOptions,\n elementRef: true,\n resultTypes: [\"violations\"],\n reporter: \"v1\", // v1 includes a `failureSummary`\n };\n\n let axe;\n try {\n axe = await importAxe();\n } catch (error) {\n const msg = \"Failed to load a11y linter.\";\n showError(msg, name);\n console.error(error);\n return [];\n }\n\n try {\n const result = await axe.run(document, options);\n return result.violations;\n } catch (error) {\n const msg = \"Error while looking for a11y issues.\";\n showError(msg, name);\n console.error(error);\n return [];\n }\n}\n\n/** @returns {Promise<typeof window.axe>} */\nfunction importAxe() {\n const script = document.createElement(\"script\");\n script.classList.add(\"remove\");\n script.src = \"https://unpkg.com/axe-core@3/axe.min.js\";\n document.head.appendChild(script);\n return new Promise((resolve, reject) => {\n script.onload = () => resolve(window.axe);\n script.onerror = reject;\n });\n}\n\n/** @param {string} text */\nfunction formatHintsAsMarkdown(text) {\n const results = [];\n for (const group of text.split(\"\\n\\n\")) {\n const [msg, ...opts] = group.split(/^\\s{2}/m);\n const options = opts.map(opt => `- ${opt.trimEnd()}`).join(\"\\n\");\n results.push(`${msg}${options}`);\n }\n return results.join(\"\\n\\n\");\n}\n"],"names":["window","addEventListener","ev","console","error","message","modules","Promise","runner","ui","plugins","all","show","async","document","readyState","resolve","domReady","runAll","enable","catch","err","inAmd","require","deps","callback","map","dep","Error","then","results","expose","name","object","html","documentElement","hasAttribute","lang","dir","l10n","config","en","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","[object Object]","target","prop","receiver","IDBTransaction","get","objectStoreNames","undefined","objectStore","wrap","set","value","has","wrapFunction","func","IDBDatabase","prototype","transaction","IDBCursor","advance","continue","continuePrimaryKey","includes","args","apply","unwrap","this","storeNames","tx","call","sort","transformCachableValue","done","reject","unlisten","removeEventListener","complete","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","some","c","Proxy","IDBRequest","request","promise","success","result","promisifyRequest","newValue","readMethods","writeMethods","cachedMethods","Map","getMethod","targetFuncName","replace","useIndex","isWrite","method","storeName","store","index","shift","oldTraps","blocked","indexedDB","deleteDatabase","version","upgrade","blocking","terminated","open","openPromise","event","oldVersion","newVersion","db","source","position","current","kind","level","autofix","ruleName","sliceTokens","count","slice","Math","max","tokensToText","inputs","precedes","text","t","trivia","join","nextToken","type","length","line","precedingLastLine","splitted","split","lastLine","subsequentTokens","subsequentText","sourceContext","repeat","contextType","context","partial","node","hierarchy","parent","unshift","n","base","appendIfExist","contextAsText","bareMessage","sourceName","input","tokens","syntaxError","validationError","token","options","Base","Object","defineProperties","writable","json","inheritance","proto","descMap","getOwnPropertyDescriptors","key","entries","enumerable","getPrototypeOf","idlTypeIncludesDictionary","idlType","defs","useNullableInner","union","def","unique","typedefIncludesDictionary","cache","reference","dictionary","nullable","subtype","dictionaryIncludesRequiredField","dict","members","field","required","superdict","ArrayBase","Array","super","Token","tokeniser","consume","unescape","tokenName","list","parser","listName","extAttrValueSyntax","renamedLegacies","extAttrListItems","syntax","toks","ExtendedAttributeParameters","assign","ret","autoParenter","secondaryName","rhsIsList","argument_list","close","hasRhs","rhsType","SimpleExtendedAttribute","params","parse","defineProperty","rhs","arguments","extAttr","arg","validate","ExtendedAttributes","push","probe","type_suffix","obj","single_type","typeName","Type","return_type","type_with_extended_attributes","keyType","stringTypes","keyIdlType","separator","valueType","generic_type","primitive_type","typeNameKeywords","generic","typ","or","union_type","extAttrs","Boolean","prefix","postfix","filter","typedef","targetToken","Default","const_value","expression","const_data","negative","Argument","start_position","optional","variadic","argumentNameKeywords","default","unconsume","autofixOptionalDictionaryDefaultValue","indexOf","a","isLastRequiredArgument","firstToken","getFirstToken","Tokeniser","Operation","special","regular","termination","argument","Attribute","noInherit","readonly","identifier","startsWith","allowDangler","first","items","item","num_type","integer_type","decimal_type","voidToken","stringifier","getLastIndentation","str","lines","match","autofixAddExposedWindow","exposed","existing","test","data","values","x","y","p","isArray","tokenRe","decimal","integer","string","whitespace","comment","other","nonRegexTerminals","concat","punctuations","reserved","idl","lastCharIndex","nextChar","charAt","attemptTokenMatch","noFlushTrivia","currentTrivia","pop","lastIndex","WebIDLParseError","punctuation","re","exec","tokenise","candidates","EnumValue","Enum","Includes","mixin","Typedef","CallbackFunction","Container","instance","inheritable","allowedMembers","colon","ea","mem","member","Constant","IterableLike","secondTypeRequired","secondTypeAllowed","argumentAllowed","argsOpen","argsClose","Constructor","static_member","Interface","every","oldConstructors","constructor","autofixConstructor","factoryFunctions","named","constructors","i","opNames","Set","getOperations","op","partials","mixins","mixinMap","ext","additions","forEachExtension","addition","add","existings","checkInterfaceMemberDuplication","interfaceDef","constructorExtAttr","indentation","memberIndent","parentTrivia","indentCh","getMemberIndentation","constructorOp","existingIndex","array","predicate","reverse","findIndex","findLastIndex","m","splice","removed","trim","Mixin","Field","Dictionary","Namespace","CallbackInterface","parseByTokens","interface_","opts","definition","res","eof","concrete","definitions","noop","templates","nameless","extendedAttribute","extendedAttributeReference","getMixinMap","include","validateIterable","ast","duplicates","groupDefinitions","dup","checkDuplicatedNames","ts","raw","unescaped","wrapper","reference_token","name_token","type_body","it","ref","extended_attributes","default_","extended_attribute_listitem","make_ext_at","id","endsWith","eats","container","inh","iterate","iterable_like","table","interface","interface mixin","namespace","operation","body","attribute","const","enum","enum-value","v","iterable","maplike","setlike","callback interface","things","thing","dispatch","flat","module","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","exports","changeDefaults","newDefaults","fn","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","&","<",">","\"","'","getEscapeReplacement","ch","unescapeTest","_","toLowerCase","String","fromCharCode","parseInt","substring","caret","nonWordAndColonTest","originIndependentUrl","baseUrls","justDomain","protocol","domain","resolveUrl","href","rtrim","relativeBase","invert","l","suffLen","currChar","substr","helpers","escape","encode","edit","regex","opt","val","getRegex","RegExp","cleanUrl","prot","decodeURIComponent","e","encodeURI","noopTest","merge","hasOwnProperty","splitCells","tableRow","cells","offset","escaped","curr","findClosingBracket","b","checkSanitizeDeprecation","warn","repeatString","pattern","defaults$1","rtrim$1","splitCells$1","escape$1","findClosingBracket$1","outputLink","cap","link","title","Tokenizer_1","src","rules","block","newline","code","codeBlockStyle","fences","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","indentCodeCompensation","heading","trimmed","depth","nptable","header","align","hr","blockquote","bull","isordered","ordered","start","loose","itemMatch","space","bcurr","bnext","addBack","istask","ischecked","endMatch","next","listItemStart","task","checked","pre","tag","lheading","paragraph","inline","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","links","reflink","nolink","maskedSrc","prevChar","emStrong","lDelim","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","min","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","url","prevCapZero","_backpedal","noopTest$1","edit$1","merge$1","_paragraph","_label","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","charCodeAt","random","toString","Lexer_1","Lexer","create","lex","inlineTokens","blockTokens","top","lastToken","errMsg","j","k","l2","row","keepPrevChar","keys","lastIndexOf","codespan","inlineText","defaults$3","cleanUrl$1","escape$2","Renderer_1","infostring","quote","slugger","slug","content","flags","TextRenderer_1","Slugger_1","seen","originalSlug","isDryRun","occurenceAccumulator","serialize","getNextSafeSlug","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parseInline","l3","cell","itemBody","checkbox","tablecell","tablerow","listitem","image","merge$2","checkSanitizeDeprecation$1","escape$3","defaults$5","marked","pending","setTimeout","setOptions","use","extension","prevRenderer","prevTokenizer","lexInline","Renderer","TextRenderer","lexer","Tokenizer","Slugger","marked_1","globalThis","global","self","pluralize","createCommonjsModule","root","commonjsGlobal","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","toUpperCase","interpolate","sanitizeWord","len","replaceWord","replaceMap","keepMap","checkWord","bool","inclusive","singular","plural","isPlural","isSingular","addPluralRule","replacement","addSingularRule","addUncountableRule","addIrregularRule","single","forEach","hyperHTML","N","r","delete","configurable","o","s","WeakSet","u","insertBefore","selected","selectedIndex","f","querySelectorAll","w","nextSibling","E","remove","parentNode","removeChild","compare","before","h","d","g","newi","oldi","prev","C","createEvent","initCustomEvent","bubbles","cancelable","detail","CustomEvent","_wire$","ELEMENT_NODE","nodeType","A","S","O","T","M","L","P","D","W","attributes","define","invoke","$","R","H","innerHTML","F","$1","childNodes","firstChild","appendChild","createDocumentFragment","createElementNS","I","z","V","Z","G","q","B","J","Q","U","X","Y","toFixed","ee","createElement","getAttribute","te","ae","oe","ue","ce","le","se","fe","he","de","ve","pe","ge","me","ye","be","we","removeAttribute","nodeName","setAttributeNode","cloneNode","textContent","replaceChild","Ne","path","sparse","xe","Ee","Ce","convert","transform","Se","updates","any","ke","Oe","Te","Me","setAttribute","getAttributeNode","je","style","_e","cssText","setProperty","Le","Pe","De","We","lastChild","ownerDocument","createRange","setStartBefore","setEndAfter","deleteContents","valueOf","$e","Re","Ke","Je","render","Fe","placeholder","He","Ie","ze","Ve","Ze","Ge","qe","Qe","Event","MutationObserver","observe","subtree","childList","clearTimeout","addedNodes","removedNodes","dispatchEvent","children","Ue","Xe","Ye","Ae","et","removeAttributeNode","createTextNode","tt","defaultView","navigator","userAgent","propertyIsEnumerable","isFrozen","nt","rt","at","ut","ot","ct","lt","template","tagger","st","ft","ht","dt","vt","pt","gt","wire","bind","Component","diff","hyper","for","handleEvent","currentTarget","svg","state","defaultState","component","setState","idb","_idb","webidl2","_webidl2","_marked","_pluralize","dashes","getIntlData","x_and_y","x_y_and_z","ISODate","Intl","DateTimeFormat","timeZone","year","month","day","nonNormativeSelector","createResourceHint","URL","baseURI","linkElem","rel","hint","origin","corsMode","location","crossOrigin","as","dontRemove","classList","removeReSpec","doc","elem","joinAnd","mapper","docLang","ListFormat","format","lastComma","and","xmlEscape","norm","localizationStrings","zh-hans","zh-cn","resolveLanguageAlias","concatDate","date","sep","humanDate","Date","langs","toLocaleString","runTransforms","flist","funcArgs","methods","meth","showWarning","fetchAndCache","maxAge","Request","cachedResponse","caches","headers","response","fetch","ok","clonedResponse","clone","customHeaders","Headers","expiryDate","now","toISOString","cacheResponse","Response","blob","put","htmlJoinComma","joined","htmlJoinAnd","addHashId","addId","hash","char","imul","hashString","pfx","txt","noLC","normalize","getElementById","nextId","getDfnTitles","titleSet","normText","dataset","child","getElementsByTagName","localLt","renameElement","newName","localName","newElement","append","replaceWith","refTypeFromContext","element","closestInformative","closest","isInformative","querySelector","illegal","wrapInner","outer","parents","selector","parentElement","getElementIndentation","previousSibling","Node","TEXT_NODE","InsensitiveStringSet","getCanonicalKey","existingKey","find","makeSafeCopy","dfn","removeCommentNodes","walker","createTreeWalker","NodeFilter","SHOW_COMMENT","walkTree","nextNode","CaseInsensitiveMap","RespecError","plugin","isWarning","elements","msg","markAsOffending","stack","details","showError","pluginName","pub","docLink","subscriptions","topic","from","cb","JSON","stringify","postMessage","sub","once","callbacks","unsub","removeList","mimeTypes","rsDocToDataURL","mimeType","validTypes","TypeError","encodeURIComponent","cloneDoc","head","insertions","metaViewport","metaCharset","respecVersion","metaGenerator","prepend","cleanup","XMLSerializer","serializeToString","el","outerHTML","prettify","doctype","ReSpec","_respecDonePromise","errors","warnings","rsError","toJSON","ready","plugs","respec","respecIsReadyWarningShown","initReSpecGlobal","respecConfig","userConfig","amendConfig","newValues","script","includeConfig","URLSearchParams","search","overrideEntries","codedKey","codedValue","decodedValue","overrideProps","fromEntries","overrideConfig","performance","mark","preProcess","promises","isFunction","runnables","isRunnableModule","plug","run","Plugin","prepare","executePreparePass","timerId","measure","executeRunPass","postProcess","afterEnd","reindent","trimEnd","indents","leastIndent","gtEntity","ampEntity","infoString","isEscaped","language","metaData","parseInfoString","example","illegalExample","className","firstSpace","metaDataStr","headingWithIdRegex","markdownToHtml","potentialMarkdown","convertElement","Builder","tagName","section","findPosition","findParent","process","findHeader","structure","fragment","addHeader","addSection","addElement","restructure","structuredInternals","firstElementChild","processMDSections","conf","hasMDSections","isMDFormat","processedElem","rsUI","newBody","trimStart","firstTwo","lastTwo","workaroundBlockLevelMarkdown","substituteWithTextNodes","ariaDecorate","ariaMap","styleElement","css","respecUI","menu","closeButton","closeModal","modal","overlay","trapFocus","buttons","respecPill","toggleMenu","toggle","hidden","focusableEls","firstFocusableEl","lastFocusableEl","focus","shiftKey","activeElement","preventDefault","stopPropagation","errWarn","arr","butName","button","ol","createContextualFragment","rsErrorToHTML","li","lastElementChild","freshModal","createWarnButton","label","handler","_keyShort","icon","menuItem","owner","currentOwner","headingId","generateMarkdownLink","warning","hasLink","isLegacyFrag","LEGACY_OPTIONS","getGroupDetails","group","shortname","wgId","wg","URI","wgURI","patentURI","wgPatentURI","patentPolicy","wgPatentPolicy","groupType","status","usedLegacyOptions","groupDetails","groups","getMultipleGroupDetails","showLink","class","showLinkData","showLogo","logo","alt","img","width","height","until","es","ko","ja","zh","defaultLang","orcidIcon","showPeople","persons","personName","company","editorid","w3cid","dd","span","contents","mailto","orcid","companyURL","note","extras","extra","getExtra","retiredDate","isValidDate","timeElem","dateTime","textContainer","ccLicense","w3cLicense","legalDisclaimer","w3cTrademark","author","authors","editor","editors","former_editor","former_editors","latest_editors_draft","latest_published_version","edited_in_place","this_version","test_suite","implementation_report","prev_editor_draft","prev_version","prev_recommendation","latest_recommendation","nl","logos","specSubTitleElem","subtitle","getSpecSubTitleElem","prependW3C","isCR","longStatus","textStatus","dashDate","publishHumanDate","modificationDate","modificationHumanDate","inPlaceModificationDate","isNoTrack","thisVersion","latestVersion","edDraftURI","testSuiteURI","implementationReportURI","isED","prevED","showPreviousVersion","prevVersion","prevRecURI","isRec","multipleEditors","formerEditors","multipleFormerEditors","multipleAuthors","otherLinks","errata","shortName","alternateFormats","multipleAlternates","alternatesHTML","existingCopyright","overrideCopyright","isUnofficial","licenseInfo","linkLicense","short","copyrightStart","publishYear","additionalCopyrightHolders","isCCBY","noteIfDualLicense","isW3CSoftAndDocLicense","linkDocumentUse","renderOfficialCopyright","renderCopyright","cssClass","specTitleElem","specTitleElemClone","isCGFinal","sotd","isPreview","renderPreview","additionalContent","renderIsUnofficial","isTagFinding","isMO","renderIsNoTrack","status_at_publication","isSubmission","isMemberSubmission","teamComment","publishDate","getUTCFullYear","submissionCommentNumber","patentPolicyURL","noteForMemberSubmission","isTeamSubmission","renderPublicList","noteForTeamSubmission","noteForSubmission","sotdAfterWGinfo","overrideStatus","proposedChanges","revisionTypes","wgHTML","anOrA","notYetRec","linkToWorkingGroup","linkToCommunity","updateableRec","humanRevisedRecEnd","reviewTarget","renderIsRec","statusExplanation","updatePolicy","reviewPolicy","specStatus","pubMode","humanCREnd","isPR","humanPREnd","isPER","humanPEREnd","renderNotRec","isNote","isIGNote","multipleWGs","recNotExpected","wgPatentHTML","charterDisclosureURI","producers","renderDeliverer","addPatentNote","additionalSections","prUrl","prNumber","mailToWGPublicListWithSubject","mailToWGPublicListSubscription","wgPublicList","subjectPrefix","github","issueBase","W3CDate","status2maturity","LS","LD","FPWD","LC","FPLC","FPWD-NOTE","WD-NOTE","LC-NOTE","IG-NOTE","WG-NOTE","status2rdf","NOTE","WD","CR","CRD","PR","REC","PER","RSCND","status2text","CG-NOTE","Member-SUBM","Team-SUBM","MO","ED","unofficial","finding","draft-finding","CG-DRAFT","CG-FINAL","BG-DRAFT","BG-FINAL","status2long","maybeRecTrack","recTrackStatus","cgStatus","bgStatus","cgbgStatus","noTrackStatus","precededByAn","licenses","patentPolicies","baseLogo","freeze","validateDateAndRecover","fallbackDate","Number","isFinite","formattedDate","collectSotdContent","sotdClone","hasChildNodes","license","licensesKeys","isCGBG","isBasic","isRegular","host","pathname","lastModified","isRecTrack","noRecTrack","memSubmissionLogo","teamSubmissionLogo","linkGroup","hasGitHubIssuesLink","maturity","publishSpace","skipLatestVersion","previousPublishDate","previousMaturity","pmat","prevRecShortname","peopCheck","orcidUrl","orcidId","lastDigit","lastDigitInt","reduce","acc","lastDigitShould","normalizeOrcid","uri","rdfStatus","showThisVersion","isCRDraft","publishISODate","shortISODate","policies","size","policy","validatePatentPolicies","urlParts","pos","cgbgHeadersTmpl","headersTmpl","wgPotentialArray","idx","pats","crEnd","prEnd","perEnd","unknownRevisionType","revisedRecEnd","contains","mailToWGPublicList","cgbgSotdTmpl","sotdTmpl","populateSoTD","generatedSubtitle","privs","LinterRule","lintingFunction","lint","canLint","meta","description","howToFix","metas","occurrences","help","offendingElements","punctuationMarks","punctuatingRegExp","privates","linter","newRules","newRule","promisesToLint","resultPromise","output","baseResult","linterName","toLinterWarning","isBrokenHyperlink","getElementsByName","hasNoHeading","offendingMembers","getOwnPropertyNames","sectionContainsAlgorithm","varElems","varUsage","varElem","vars","saysPrivOrSec","saysConsiderations","hasPriSecConsiderations","register","noHttpPropsRule","noHeadinglessSectionsRule","noUnusedVars","checkPunctuation","localRefsExist","checkInternalSlots","checkCharset","privsecSection","coreDefaults","no-headingless-sections","no-http-props","no-unused-vars","check-punctuation","local-refs-exist","check-internal-slots","check-charset","privsec-section","highlightVars","addSectionLinks","filesInWPT","githubAPIBase","wptDirectory","testSuiteURL","searchParams","files","entry","getFilesInWPT","githubAPI","offendingTests","testables","tests","missingTests","privsecSectionRule","wptTestsExist","w3cLogo","w3cDefaults","wpt-tests-exist","doJsonLd","xref","toMDCode","validateStatusForGroup","insertStyle","noReSpecCSS","resourceHints","createResourceHints","createBaseStyle","delimiter","toKeyValuePairs","initial-scale","shrink-to-fit","createMetaViewport","styleFile","styleVersion","isNaN","selectStyleVersion","useExperimentalStyles","noToc","attachFixupScript","finalStyleURL","linkURL","styles","frag","nextLink","linkCSS","exportDoc","w3cStyle","resolveGithubPromise","rejectGithubPromise","file_a_bug","participate","commit_history","ghURL","tempURL","repoURL","org","repo","branch","newProps","githubToken","githubUser","atRiskBase","pullBase","otherLink","hostname","normalizedGHObj","apiBase","fullName","normalizedConfig","processResponse","rawData","oninclude","includeReplace","includeFormat","fill","fillWithText","attr","removeIncludeAttributes","includables","promisesToInclude","includeId","default_title","h1Elem","isConnected","documentTitle","setDocumentTitle","isInteger","abstract","abs","abstractHeading","processDfnElement","abbr","fullForm","insertAdjacentHTML","idlPrimitiveRegex","exceptionRegex","methodRegex","slotRegex","attributeRegex","enumRegex","methodSplitRegex","renderBase","renderParent","renderInternalSlot","linkFor","renderAttribute","renderMethod","argsText","searchText","renderEnum","enumValue","forContext","renderException","renderIdlPrimitiveType","idlStringToHtml","nonMethodPart","methodPart","allArgs","SyntaxError","parseInlineIDL","ALLOWED_TYPES","readyPromise","openDB","deleteObjectStore","createObjectStore","keyPath","createIndex","openIdb","biblioDB","isAlias","resolveAlias","range","IDBKeyRange","only","openCursor","aliasOf","aliasesAndRefs","alias","promisesToAdd","flatMap","isInDB","stores","clearStorePromises","clear","biblio","bibrefsURL","doneResolver","updateFromNetwork","refs","forceUpdate","refsToFetch","onLine","addAll","resolveRef","normalizedNormativeRefs","normativeReferences","informativeReferences","redundantKey","localBiblio","localAliases","normalizeReferences","allRefs","getRefKeys","neededRefs","idbRefs","promisesToFind","getReferencesFromIdb","hasData","noData","externalRefs","finish","info_references","norm_references","references","REF_STATUSES","endWithDot","endStr","createReferencesSection","goodRefs","badRefs","refcontent","groupRefs","toRefContent","uniqueRefs","getUniqueRefs","refsToShow","toLocaleLowerCase","localeCompare","sec","showRef","aliases","refUrl","selectors","elems","linkType","decorateInlineReference","getAliases","badrefs","warnBadRefs","circular","renderInlineCitation","linkText","refId","stringifyReference","etAl","publisher","informs","norms","refSection","rfc2119Usage","rfc2119Keywords","inlineCodeRegExp","inlineIdlReference","inlineVariable","inlineCitation","inlineExpansion","inlineAnchor","inlineElement","inlineElementMatches","matched","attrValue","xrefType","xrefFor","inlineRFC2119Matches","nodeElement","inlineRefMatches","badReference","inlineXrefMatches","inlineBibrefMatches","spec","cite","cleanRef","citeElem","inlineAbbrMatches","abbrMap","inlineVariableMatches","matches","varName","inlineAnchorMatches","parts","limit","Infinity","splitBySlash","isFor","linkingText","processedContent","processInlineContent","inlineCodeMatches","clean","part","respecRFC2119","abbrs","aKeys","abbrRx","txts","exclusions","wsNodes","exclusionQuery","nodeIterator","createNodeIterator","SHOW_TEXT","FILTER_REJECT","FILTER_ACCEPT","textNodes","getTextNodes","keywords","rx","subtxt","df","nodes","conformance","normativity","keywordInterpretation","terms","processConformance","definitionMap","registerDefinition","names","titles","dfnType","ds","noExport","export","pluralizeDfn","dfnTexts","getPluralizer","plurals","userDefinedPlurals","uniquePlurals","makeTitle","num","report","number","examples","div","inAside","exampleTitle","editors_note","feature_at_risk","issue","issue_summary","no_issues_in_spec","handleIssues","ins","ghIssues","getIssueNumber","issueNumber","createIssueNumberGetter","issueList","inno","displayType","isFeatureAtRisk","isIssue","isEdNote","getIssueType","isInline","dataNum","titleParent","ghIssue","linkToIssueTracker","l10nIssue","issueNumberText","createIssueSummaryEntry","labels","labelsGroup","color","bgColor","issuesURL","bgColorHex","createLabel","labelNames","joinedNames","createLabelsGroup","bodyHTML","issueSummaryElement","makeIssueSectionSummary","issuesAndNotes","issueNumbers","issues","fetchAndStoreGithubIssues","headElem","ednote","best_practice","bps","bpSummary","summaryItems","bp","localizedBpName","list_of_figures","fig","naturalHeight","naturalWidth","tof","caption","figure","decorateFigure","figureId","tofCaption","anchor","getTableOfFiguresListItem","collectFigures","tofElement","previousSections","sections","previous","previousElementSibling","iteratePreviousElements","getPreviousSections","decorateTableOfFigures","topLevelEntities","findDfn","defn","findNormalDfn","findOperationDfn","resolvedName","dfns","getDfns","alternativeDfns","decorateDfn","dfnElem","idlAst","lCaseParent","last","dfnFor","getDataType","local","exportable","addAlternativeNames","asQualifiedName","operationName","argsAst","operationNames","isOptional","requiredArgs","requiredOperation","optionalOps","generateMethodNamesWithArgs","getAlternativeNames","originalName","foundDfns","dfnForArray","closestDfnFor","idlStruct","copyButton","createButton","addCopyIDLButton","idlHeader","idlText","clipboard","writeText","idlPartials","Text","keyword","wrapped","idlLink","defineIdlName","getIdlDefinitionClassName","parentName","idlId","getNameAndId","getDfnType","unlinkedAnchor","nameResolverMap","getDefnName","getIdlId","resolvePartial","overload","qualifiedName","fullyQualifiedName","resolveOverload","resolveNameAndId","renderWebIDL","idlElement","highlights","write","closestCite","cites","addIDLHeader","idls","astArray","validations","validation","THIS_SPEC","getLinkProps","citeDetails","relPath","linkProps","wrapInCiteEl","makeComponentFinder","findFrag","findPath","toCiteDetails","rawKey","citeFrag","citePath","parentKey","isNormative","closestIsNormative","hasPrecedingMark","attrToRemove","promisesForBibEntries","missingBibEntries","newEntries","updateBiblio","originalKey","possibleExternalLinks","duplicateMsg","duplicateTitle","collectDfns","oldDfn","oldIsDfn","newIsDfn","isSameDfnType","isSameDfnFor","findMatchingDfn","titleToDfns","linkForElem","getLinkTargets","dfnsByType","processAnchor","noLocalMatch","isCode","term","isIDL","needsCode","shouldWrapByCode","wrapAsCode","showLinkingError","mapTitleToDfns","badLinks","localAnchors","updateReferences","STORE_NAME","VERSION_CHECK_WAIT","getIdbCache","resolveXrefCache","queries","cachedData","lastChecked","localStorage","getItem","setItem","API_URL","lastUpdated","shouldBustCache","clearXrefData","requiredKeySet","query","cursor","profiles","web-platform","getRequestEntry","getTermFromElement","specs","dataciteElem","closestSection","inlineRefs","higherPriority","uniqueSpecs","dedupeSpecContext","getSpecContext","types","getTypeContext","dataXrefForElem","getForContext","addDataCite","normative","closestNormative","closestInform","addToReferences","objectHash","buffer","TextEncoder","crypto","subtle","digest","bufferToHexString","Uint8Array","padStart","invalidProfileError","profile","normalizeConfig","bodyCite","externalDFNs","findExplicitExternalLinks","queryKeys","apiUrl","uniqueIds","uniqueQueryKeys","resultsFromCache","termsToLook","fetchedResults","Content-Type","fetchFromNetwork","cacheXrefData","getData","ambiguous","notFound","collector","getPrefilledFormURL","howToCiteURL","originalTerm","formUrl","specsString","showErrors","addDataCiteToTerms","idlIndexSec","idlIndex","headingExternal","headlingLocal","dfnOf","CODE_TYPES","getLocalTermType","getLocalTermParentContext","getLocalTermSuffix","appendSectionNumbers","secNum","getSectionNumber","collectExternalTerms","uniqueReferences","uniqueID","renderExternalTermEntry","typeSuffix","TYPE_TERMS","TYPED_TYPES","linkForText","getTermText","styleEl","localTermIndex","dataSortedByTerm","collectLocalTerms","renderItem","suffix","getLocalTermText","renderLocalTerm","createLocalTermIndex","externalTermIndex","dataSortedBySpec","specA","specB","createExternalTermIndex","apiURL","contributors","getContributors","sortedContributors","nameA","login","nameB","user","toHTML","showContributors","getParents","lowerHeaderTags","headerTags","toc","scanSections","maxTocLevel","appendixMode","lastNonAppendix","isAppendix","secno","isIntro","appendixNumber","createComment","createTocListItem","subsections","floor","getSectionTree","tocIntroductory","sectionElements","headerSelector","getNonintroductorySectionHeaders","renameSectionHeaders","noTOC","maxToc","sectionToSkipFromToC","skipFromToC","nav","h2","after","createTableOfContents","informative","headings","BROWSERS","fetchStats","feature","versions","browsers","statusText","caniuse","DEFAULTS","caniuseConf","invalidBrowsers","browser","getNormalizedConf","fetchPromise","featureURL","headDlElem","contentPromise","stats","definitionPair","outputDoc","BASE_JSON_PATH","MDN_BROWSERS","chrome","chrome_android","edge","edge_mobile","firefox","firefox_android","ie","opera","opera_android","safari","safari_ios","samsunginternet_android","webview_android","inAllEngines","inSomeEngines","insertMDNBox","targetAncestor","targetSibling","mdnBox","attachMDNDetail","mdnSpec","summary","support","engines","mdnSubPath","engineSupport","getEngineSupportIcons","getEngineSupport","createRow","browserId","yesNoUnknown","displayStatus","createRowFromBrowserData","versionData","version_removed","versionAdded","version_added","buildBrowserSupportTable","mdnKey","mdn","getMdnKey","mdnSpecJson","mdnConf","baseJsonPath","getMdnData","findElements","mdnSpecArray","save_snapshot","downloadLinks","fileName","epubURL","toDownloadLink","saveDialog","supportsDownload","HTMLAnchorElement","addCommand","search_specref","specrefSearchUI","xrefSearchUI","about_respec","getEntriesByType","duration","round","perfEntryToTR","firstParagraph","metaElem","addPerson","ed","foaf:mbox","worksFor","addRef","jsonld","creator","rawDate","publishedDate","isbn","canonicalURI","trLatestUri","@context","@vocab","@language","w3p","foaf","datePublished","@type","inLanguage","isBasedOn","copyrightHolder","discussionUrl","alternativeHeadline","addl","contributor","citationIds","citationContents","citation","addJSONLDInfo","fetchBase","workerPromise","workerScript","loadWorkerScript","workerURL","createObjectURL","Blob","Worker","createWorker","worker","nextMsgId","counter","gen","idGenerator","msgIdGenerator","highlightElement","languages","action","timeoutId","listener","sendHighlightRequest","innerText","noHighlightCSS","highlightables","promisesToHighlight","missing_test_suite_uri","toListItem","emojiList","testFile","testParts","testFileName","requiresConnectionEmoji","manualPerformEmoji","toTestURLs","handleDuplicates","testURLs","uniqueList","makeSorter","direction","order","sortListItems","sortDefinitionTerms","dl","nextType","nextName","sortables","sortedElems","selectNodeContents","highlightListener","hightligtedElems","highlightColor","getHighlightColor","varsToHighlight","colorStatus","HL_COLORS","removeHighlight","addHighlight","resetListener","hlColor","activeClass","createPanel","panelId","dfnExportedMarker","parentIdlBlock","idlMarker","titleToIDs","linkID","getReferenceTitle","toLinkProps","ids","listItemToHTML","referencesToHTML","panels","loadScript","varMap","variables","currentSection","processBox","matchingElement","selfLink","copy","processFigure","figcaption","figTitle","processSection","processHeading","localize","hadSelfLink","attrName","matchingClosest","newClosest","anchors","HTMLElement","props","to","fetchCommits","commits","commit","commitURL","pr","finally","gh","CUSTOM_ELEMENTS","customElements","readyPromises","DISABLED_RULES","formatHintsAsMarkdown","a11y","violations","otherOptions","enabled","elementRef","resultTypes","reporter","axe","onload","onerror","importAxe","getViolations","violation","groupedBySummary","failureSummary","helpUrl","hints"],"mappings":"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OAAOV,EAAU2B,cAAcjB,EAAK,GAAIA,EAAK,OAM/C,CACE,CAAC,MAAO,IACR,CAAC,SAAU,MACX,CAAC,gEAAiE,QAClE,CAAC,kCAAmC,OACpC,CAAC,QAAS,KACV,CAAC,uFAAwF,QACzF,CAAC,oBAAqB,QACtB,CAAC,uBAAwB,UACzB,CAAC,sBAAuB,MACxB,CAAC,2FAA4F,MAC7F,CAAC,qEAAsE,SACvE,CAAC,iCAAkC,MACnC,CAAC,oBAAqB,QACtB,CAAC,4FAA6F,QAC9F,CAAC,yGAA0G,QAC3G,CAAC,8FAA+F,QAChG,CAAC,0BAA2B,OAC5B,CAAC,+BAAgC,QACjC,CAAC,sBAAuB,QACxB,CAAC,oBAAqB,UACtB,CAAC,eAAgB,MACjB,CAAC,YAAa,MACd,CAAC,QAAS,QACVuB,SAAQ,SAAUvB,GAClB,OAAOV,EAAU6B,gBAAgBnB,EAAK,GAAIA,EAAK,OAMjD,CAEE,YACA,SACA,SACA,MACA,WACA,UACA,OACA,YACA,QACA,YACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,UACA,QACA,WACA,MACA,WACA,cACA,QACA,SACA,WACA,YACA,MACA,SACA,YACA,YACA,YACA,WACA,WACA,MACA,UACA,UACA,WACA,WACA,eACA,SACA,SACA,YACA,WACA,YACA,cACA,QACA,UACA,QACA,SACA,aACA,YACA,WACA,OACA,QACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,YACA,OACA,WACA,SACA,SACA,YACA,WACA,OACA,WACA,OACA,SACA,WACA,SACA,SACA,WACA,SACA,WACA,UACA,QACA,QACA,SACA,UACA,iBACA,QACA,OACA,SACA,UACA,UACA,aACA,WACA,MACA,eAEA,gBACA,SACA,SACA,YACA,WACA,QACA,WACAuB,QAAQjC,EAAU8B,oBAEb9B,QC5f6BkC,GAAU,SAASC,GAAgB,IAAIzoB,EAAE,GAAG,IAAIA,EAAErG,QAAQA,QAAQ,MAAM8f,GAAGzZ,EAAErG,QAAQ,SAASqG,EAAEyZ,GAAG,IAAInY,EAAEmY,EAAE1T,eAAe2iB,EAAEjP,E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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f5db939c80..ce7c1d2442 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "respec", - "version": "26.4.1", + "version": "26.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ec61ff877c..53b6b15459 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "respec", - "version": "26.4.1", + "version": "26.5.0", "license": "W3C", "description": "A technical specification pre-processor.", "engines": { From 77ab0c7507d9960c50745dde954a87e199e2be81 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 31 Mar 2021 12:22:51 +0530 Subject: [PATCH 17/19] chore(CHANGELOG): regenerate (#3427) Co-authored-by: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6581508523..8cad2cf079 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Changelog +## [v26.5.0](https://github.com/w3c/respec/tree/v26.5.0) (2021-03-31) + +[Full Changelog](https://github.com/w3c/respec/compare/v26.4.1...v26.5.0) + +**Fixed bugs:** + +- wgPatentPolicy and CG? [\#3420](https://github.com/w3c/respec/issues/3420) + +**Closed issues:** + +- Add a global ReSpec API [\#3089](https://github.com/w3c/respec/issues/3089) +- Use custom ReSpec version while generating via respec2html [\#2874](https://github.com/w3c/respec/issues/2874) + +**Merged pull requests:** + +- fix\(w3c/headers\): wgPatentPolicy may be falsy [\#3424](https://github.com/w3c/respec/pull/3424) ([marcoscaceres](https://github.com/marcoscaceres)) +- chore\(deps-dev\): bump karma from 6.2.0 to 6.3.2 [\#3423](https://github.com/w3c/respec/pull/3423) ([dependabot[bot]](https://github.com/apps/dependabot)) +- chore\(deps-dev\): bump rollup from 2.42.2 to 2.44.0 [\#3422](https://github.com/w3c/respec/pull/3422) ([dependabot[bot]](https://github.com/apps/dependabot)) +- refactor\(tests/headless\): use jasmine instead of custom runner [\#3421](https://github.com/w3c/respec/pull/3421) ([sidvishnoi](https://github.com/sidvishnoi)) +- chore\(CHANGELOG\): regenerate [\#3419](https://github.com/w3c/respec/pull/3419) ([github-actions[bot]](https://github.com/apps/github-actions)) +- tests: support testing individual modules [\#3418](https://github.com/w3c/respec/pull/3418) ([sidvishnoi](https://github.com/sidvishnoi)) +- chore\(deps\): update dependencies [\#3417](https://github.com/w3c/respec/pull/3417) ([sidvishnoi](https://github.com/sidvishnoi)) +- chore\(tools/builder\): add a --watch flag [\#3406](https://github.com/w3c/respec/pull/3406) ([sidvishnoi](https://github.com/sidvishnoi)) +- feat\(core/respec-global\): add toHTML\(\) method [\#3403](https://github.com/w3c/respec/pull/3403) ([sidvishnoi](https://github.com/sidvishnoi)) +- feat\(respecDocWriter\): use locally installed respec version [\#2957](https://github.com/w3c/respec/pull/2957) ([sidvishnoi](https://github.com/sidvishnoi)) + ## [v26.4.1](https://github.com/w3c/respec/tree/v26.4.1) (2021-03-29) [Full Changelog](https://github.com/w3c/respec/compare/v26.4.0...v26.4.1) From 6d993d647bcebbfcad3dbff4d49dc5c834087983 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Tue, 6 Apr 2021 15:00:45 +0530 Subject: [PATCH 18/19] refactor(core/linter/check-charset): run as regular plugin (#3401) --- profiles/dini.js | 1 + profiles/geonovum.js | 1 + profiles/w3c.js | 1 + src/core/defaults.js | 2 - src/core/linter-rules/check-charset.js | 45 +++++------- .../core/linter-rules/check-charset-spec.js | 68 ------------------- tests/unit/SpecHelper.js | 6 +- .../core/linter-rules/check-charset-spec.js | 48 +++++++++++++ 8 files changed, 72 insertions(+), 100 deletions(-) delete mode 100644 tests/spec/core/linter-rules/check-charset-spec.js create mode 100644 tests/unit/core/linter-rules/check-charset-spec.js diff --git a/profiles/dini.js b/profiles/dini.js index 1e5ea098e0..51f2c421f0 100644 --- a/profiles/dini.js +++ b/profiles/dini.js @@ -50,6 +50,7 @@ const modules = [ import("../src/core/anchor-expander.js"), import("../src/core/custom-elements/index.js"), /* Linter must be the last thing to run */ + import("../src/core/linter-rules/check-charset.js"), import("../src/core/linter.js"), ]; diff --git a/profiles/geonovum.js b/profiles/geonovum.js index d9bf393cb9..8864a0a0d6 100644 --- a/profiles/geonovum.js +++ b/profiles/geonovum.js @@ -48,6 +48,7 @@ const modules = [ import("../src/core/algorithms.js"), import("../src/core/anchor-expander.js"), /* Linter must be the last thing to run */ + import("../src/core/linter-rules/check-charset.js"), import("../src/core/linter.js"), ]; diff --git a/profiles/w3c.js b/profiles/w3c.js index c109692b3e..7788af1ca8 100644 --- a/profiles/w3c.js +++ b/profiles/w3c.js @@ -65,6 +65,7 @@ const modules = [ import("../src/core/anchor-expander.js"), import("../src/core/custom-elements/index.js"), /* Linters must be the last thing to run */ + import("../src/core/linter-rules/check-charset.js"), import("../src/core/linter.js"), import("../src/core/a11y.js"), ]; diff --git a/src/core/defaults.js b/src/core/defaults.js index 8e908fdc9a..2db5a7d522 100644 --- a/src/core/defaults.js +++ b/src/core/defaults.js @@ -3,7 +3,6 @@ * Sets the core defaults */ export const name = "core/defaults"; -import { rule as checkCharset } from "./linter-rules/check-charset.js"; import { rule as checkInternalSlots } from "./linter-rules/check-internal-slots.js"; import { rule as checkPunctuation } from "./linter-rules/check-punctuation.js"; import linter from "./linter.js"; @@ -20,7 +19,6 @@ linter.register( checkPunctuation, localRefsExist, checkInternalSlots, - checkCharset, privsecSection ); diff --git a/src/core/linter-rules/check-charset.js b/src/core/linter-rules/check-charset.js index a8e50d13a1..14ccc48b19 100644 --- a/src/core/linter-rules/check-charset.js +++ b/src/core/linter-rules/check-charset.js @@ -1,35 +1,31 @@ // @ts-check /** - * Linter rule "check-charset". - * * Checks whether the document has `<meta charset="utf-8">` properly. */ -import LinterRule from "../LinterRule.js"; -import { lang as defaultLang } from "../l10n.js"; +import { getIntlData, showWarning } from "../utils.js"; -const name = "check-charset"; -const meta = { +const ruleName = "check-charset"; +export const name = "core/linter-rules/check-charset"; + +const localizationStrings = { en: { - description: `Document must only contain one \`<meta>\` tag with charset set to 'utf-8'`, - howToFix: `Add this line in your document \`<head>\` section - \`<meta charset="utf-8">\` or set charset to "utf-8" if not set already.`, + msg: `Document must only contain one \`<meta>\` tag with charset set to 'utf-8'`, + hint: `Add this line in your document \`<head>\` section - \`<meta charset="utf-8">\` or set charset to "utf-8" if not set already.`, }, zh: { - description: `文档只能包含一个 charset 属性为 utf-8 的 \`<meta>\` 标签`, - howToFix: `将此行添加到文档的 \`<head>\` 部分—— \`<meta charset="utf-8">\` 或将 charset 设置为 utf-8(如果尚未设置)。`, + msg: `文档只能包含一个 charset 属性为 utf-8 的 \`<meta>\` 标签`, + hint: `将此行添加到文档的 \`<head>\` 部分—— \`<meta charset="utf-8">\` 或将 charset 设置为 utf-8(如果尚未设置)。`, }, }; +const l10n = getIntlData(localizationStrings); -// Fall back to english, if language is missing -const lang = defaultLang in meta ? defaultLang : "en"; +export function run(conf) { + if (!conf.lint?.[ruleName]) { + return; + } -/** - * Runs linter rule. - * - * @param {Object} _ The ReSpec config. - * @param {Document} doc The document to be checked. - */ -function linterFunction(_, doc) { - const metas = doc.querySelectorAll("meta[charset]"); + /** @type {NodeListOf<HTMLMetaElement>} */ + const metas = document.querySelectorAll("meta[charset]"); const val = []; for (const meta of metas) { val.push(meta.getAttribute("charset").trim().toLowerCase()); @@ -38,15 +34,10 @@ function linterFunction(_, doc) { // only a single meta[charset] and is set to utf-8, correct case if (utfExists && metas.length === 1) { - return []; + return; } // if more than one meta[charset] tag defined along with utf-8 // or // no meta[charset] present in the document - return { - name, - occurrences: metas.length, - ...meta[lang], - }; + showWarning(l10n.msg, name, { hint: l10n.hint, elements: [...metas] }); } -export const rule = new LinterRule(name, linterFunction); diff --git a/tests/spec/core/linter-rules/check-charset-spec.js b/tests/spec/core/linter-rules/check-charset-spec.js deleted file mode 100644 index 16338afe3d..0000000000 --- a/tests/spec/core/linter-rules/check-charset-spec.js +++ /dev/null @@ -1,68 +0,0 @@ -import { rule } from "../../../../src/core/linter-rules/check-charset.js"; - -describe("Core Linter Rule - 'check-charset'", () => { - const ruleName = "check-charset"; - const config = { - lint: { [ruleName]: true }, - }; - - it("checks if meta[charset] is set to utf-8", async () => { - const doc = document.implementation.createHTMLDocument("test doc"); - doc.head.innerHTML = ` - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width"> - <title>ReSpec - `; - - const results = await rule.lint(config, doc); - expect(results).toHaveSize(0); - }); - - it("doesn't give an error when written in capitals", async () => { - const doc = document.implementation.createHTMLDocument("test doc"); - doc.head.innerHTML = ` - - - ReSpec - `; - - const results = await rule.lint(config, doc); - expect(results).toHaveSize(0); - }); - - it("checks if meta[charset] is present or not", async () => { - const doc = document.implementation.createHTMLDocument("test doc"); - doc.head.innerHTML = ` - - ReSpec - `; - - const results = await rule.lint(config, doc); - expect(results.occurrences).toBe(0); - }); - - it("returns error when more then one meta[charset] present", async () => { - const doc = document.implementation.createHTMLDocument("test doc"); - doc.head.innerHTML = ` - - - - ReSpec - `; - - const results = await rule.lint(config, doc); - expect(results.occurrences).toBe(2); - }); - - it("return error when some other charset defined", async () => { - const doc = document.implementation.createHTMLDocument("test doc"); - doc.head.innerHTML = ` - - - ReSpec - `; - - const results = await rule.lint(config, doc); - expect(results.occurrences).toBe(1); - }); -}); diff --git a/tests/unit/SpecHelper.js b/tests/unit/SpecHelper.js index 37528ec5d5..386f467464 100644 --- a/tests/unit/SpecHelper.js +++ b/tests/unit/SpecHelper.js @@ -6,19 +6,19 @@ const iframes = []; * @param {string[]} plugins Paths of plugins to load and run. Example: `/src/core/algorithms.js` * @param {object} [options] * @param {object} [options.config] JSON-serializable respecConfig object. - * @param {string|null} [options.head] + * @param {string} [options.head] * @param {string} [options.body] * @return {Promise} */ export function makePluginDoc( plugins, - { config = {}, head = "", body = "" } = {} + { config = {}, head = ``, body = "" } = {} ) { return getDoc(` - ${head !== null ? `${head}` : ""} + ${head} diff --git a/tests/unit/core/linter-rules/check-charset-spec.js b/tests/unit/core/linter-rules/check-charset-spec.js new file mode 100644 index 0000000000..58d9735a87 --- /dev/null +++ b/tests/unit/core/linter-rules/check-charset-spec.js @@ -0,0 +1,48 @@ +import { makePluginDoc } from "../../SpecHelper.js"; + +describe("Core Linter Rule - 'check-charset'", () => { + const modules = [`/src/core/linter-rules/check-charset.js`]; + + async function getWarnings(head, disabled = false) { + const config = { lint: { "check-charset": !disabled } }; + const doc = await makePluginDoc(modules, { config, head }); + return doc.respec.warnings.filter( + warning => warning.plugin === "core/linter-rules/check-charset" + ); + } + + it("checks if meta[charset] is set to utf-8", async () => { + const results = await getWarnings(``); + expect(results).toHaveSize(0); + }); + + it("doesn't give an error when written in capitals", async () => { + const results = await getWarnings(``); + expect(results).toHaveSize(0); + }); + + it("checks if meta[charset] is present or not", async () => { + const results = await getWarnings(""); + expect(results).toHaveSize(1); + }); + + it("returns error when more then one meta[charset] present", async () => { + const results = await getWarnings(` + + + `); + expect(results).toHaveSize(1); + expect(results[0].elements).toHaveSize(2); + }); + + it("return error when some other charset defined", async () => { + const results = await getWarnings(``); + expect(results).toHaveSize(1); + expect(results[0].elements).toHaveSize(1); + }); + + it("doesn't check if disabled", async () => { + const results = await getWarnings("", true); + expect(results).toHaveSize(0); + }); +}); From 72cd918399c5f3c9da1ebb48820d33f2316a596a Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Tue, 6 Apr 2021 16:53:10 +0530 Subject: [PATCH 19/19] tests(core/a11y): increase timeout (#3439) --- tests/spec/core/a11y-spec.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/spec/core/a11y-spec.js b/tests/spec/core/a11y-spec.js index 9043c56cbf..c2bd094807 100644 --- a/tests/spec/core/a11y-spec.js +++ b/tests/spec/core/a11y-spec.js @@ -3,7 +3,13 @@ import { flushIframes, makeRSDoc, makeStandardOps } from "../SpecHelper.js"; describe("Core — a11y", () => { - afterAll(flushIframes); + beforeAll(() => { + jasmine.DEFAULT_TIMEOUT_INTERVAL *= 2; + }); + afterAll(() => { + jasmine.DEFAULT_TIMEOUT_INTERVAL /= 2; + flushIframes(); + }); const body = `